找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 6637|回复: 11
打印 上一主题 下一主题
收起左侧

求助!STC89C52RC单片机的引脚问题

[复制链接]
跳转到指定楼层
楼主
ID:287368 发表于 2018-3-25 15:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
为什么STC89C52RC单片机上电后的引脚输出全部都是低电平?怎样用C语言程序定义引脚输出是高电平??
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:155507 发表于 2018-3-25 15:59 | 只看该作者
P0=0xFF;
P1=0xFF;
P2=0xFF;
P3=0xFF;
P4=0xFF;
回复

使用道具 举报

板凳
ID:287368 发表于 2018-3-25 17:03 | 只看该作者
angmall 发表于 2018-3-25 15:59
P0=0xFF;
P1=0xFF;
P2=0xFF;

放在主函数中,测试后还是上电后引脚都是低电平。实在不知是怎么回事了
回复

使用道具 举报

地板
ID:274129 发表于 2018-3-25 17:03 | 只看该作者
低电平给零  高电平给1就可以了
回复

使用道具 举报

5#
ID:287368 发表于 2018-3-25 17:29 | 只看该作者
爱爱爱 发表于 2018-3-25 17:03
低电平给零  高电平给1就可以了

还是不行
回复

使用道具 举报

6#
ID:213173 发表于 2018-3-25 17:34 | 只看该作者
STC89C52RC单片机上电复位后进入main前所有IO口默认高电平(P0开漏),你要检查单片机基本工作条件:电源、复位、振荡。
回复

使用道具 举报

7#
ID:287368 发表于 2018-3-25 18:17 | 只看该作者
wulin 发表于 2018-3-25 17:34
STC89C52RC单片机上电复位后进入main前所有IO口默认高电平(P0开漏),你要检查单片机基本工作条件:电源、 ...

电源,复位,振荡电路都没有问题,用新的芯片测试过,发觉STC89C52RC单片机的引脚默认是低电平,只能通过程序控制,不知道要修改程序哪个地方
回复

使用道具 举报

8#
ID:296855 发表于 2018-3-25 18:29 | 只看该作者
先确认一下电源,复位电路,晶振电路等是否工作正常,再检查代码。
回复

使用道具 举报

9#
ID:296878 发表于 2018-3-25 19:34 | 只看该作者
STC89C52RC有4个端口,32个输出I/O口!P0=0xFF; P1=0xFF; P2=0xFF; P3=0xFF;
回复

使用道具 举报

10#
ID:213173 发表于 2018-3-26 22:17 | 只看该作者
叶风天寒 发表于 2018-3-25 18:17
电源,复位,振荡电路都没有问题,用新的芯片测试过,发觉STC89C52RC单片机的引脚默认是低电平,只能通过 ...

单片机源程序如下:
  1. #include<reg52.h>
  2. #define uint unsigned int
  3. #define uchar unsigned char                 //宏定义
  4. //元器件定义
  5. sbit DY_key1=P3^2; //布防/撤防公用一个键
  6. //sbit DY_key2=P3^3; //撤防
  7. sbit DY_BUZZ=P0^4;  //蜂鸣器
  8. sbit DY_rsd=P2^4; //热释电输入
  9. sbit LED_B=P2^3; //布防指示灯
  10. sbit LED_S=P2^0; //发送消息指示灯
  11. //初始化定义
  12. uchar code somebody[]="SOS";//字符串数组
  13. uint Cnt250us=0;                                //250us计时变量
  14. uchar Cnt500ms=0;                                //500ms计时变量
  15. bit Cnt1min=0;                                //1分钟计时标志位(当发送一条短信后,不能马上发送第二条,所以等待一分钟后再检测是否有人,有人再发送短信)
  16. bit flag=0;                                        //布防标志
  17. bit again=0;                                 //1分钟等待标志
  18. bit Twinkle=1;                                //闪烁标志

  19. void Uart_init()
  20. {
  21.         TMOD=0x22;        //T0方式2、T1方式2
  22.         TH0=0x1A;        //设置定时重载值250us
  23.         TL0=0x1A;        //8位自动重装
  24.         TH1=0xfd;        //8位自动重装
  25.         TL1=0xfd;        //波特率为 9600
  26.         SM0=0;                //设置串口的工作模式
  27.         SM1=1;                //方式 1
  28.         TF0=0;                //定时器0溢出标志TF0清0
  29.         TR0=1;                //开定时器0
  30.         TR1=1;                //开定时器0
  31. //        REN=1;                //不用开接收
  32. //        ES=1;                //不用开串口中断
  33. //        EA=1;                //不用开总中断
  34. }
  35. //按键扫描函数
  36. void keyscan()        
  37. {
  38.         static bit key_sign=0;                //按键自锁标志
  39.         static uchar count=0;                //消抖计数变量                        
  40.         if(!DY_key1)                                //检测按键如果为0
  41.         {
  42.                 count++;                                //消抖计数
  43.                 if((count>=250)&&(key_sign==0))
  44.                 {                        
  45.                         key_sign=1;                        //按键自锁标志置1
  46.                         flag=~flag;                        //布防标志取反
  47.                         if(flag==1)
  48.                         {
  49.                                 Cnt250us=0;                //250us计时变量清0
  50.                                 Cnt500ms=0;                //500ms计时变量清0
  51.                                 Cnt1min =0;                //Cnt1min计时变量清0
  52.                                 again=0;                //1分钟等待标志位置0
  53.                         }
  54.                         else
  55.                         {
  56.                                 LED_B=1;                //布防灯熄灭
  57.                         }
  58.                 }
  59.         }
  60.         else
  61.         {
  62.                 key_sign=0;                                //按键自锁标志清0
  63.                 count=0;                                //消抖计数清0
  64.         }
  65. }
  66. //计时函数
  67. void Time()        
  68. {
  69.         if(TF0==1)                                                //查询定时器溢出标志TF0为1
  70.         {               
  71.                 if(flag==1)                                                //布防标志为1
  72.                 {                                                                //定时器溢出周期250us
  73.                         Cnt250us++;                                        //时间变量Cnt250us自+1
  74.                           if(Cnt250us>=2000)                        //如果时间变量Cnt200us>=2000
  75.                         {                                                        //500毫秒时间到
  76.                                 Cnt250us=0;                                //时间变量Cnt200us清0
  77.                                 Twinkle=~Twinkle;                //闪烁标志取反
  78.                                 Cnt500ms++;                                //时间变量Cnt1s自+1
  79.                                 if(Cnt500ms>=120)                //1分钟时间到
  80.                                 {                                
  81.                                           Cnt500ms=0;                        //时间变量Cnt500ms清0
  82.                                         Cnt1min=1;                        //1分钟标志置1
  83.                                         again=1;                        //1分钟等待标志位置1
  84.                                 }
  85.                         }
  86.                 }
  87.                 TF0=0;                                                //定时器0溢出标志TF0清0
  88.         }
  89. }
  90. void SendASC(uchar d) //串口发送字符
  91. {
  92.         SBUF=d;  //数据赋值到缓冲区
  93.         while(!TI); //发送完
  94.         TI=0; //清零
  95. }
  96. void GSM_work()//发送 GSM 短信
  97. {
  98.         uchar i;
  99.         for(i=0;i<3;i++)
  100.                 SendASC(somebody[i]); //发送字符;
  101. }
  102. //警报函数
  103. void alert()
  104. {
  105.         if(flag==1)
  106.         {
  107.                 if(again==0)                                //预备等待        
  108.                         LED_B=Twinkle;                        //布防灯闪烁
  109.                 else
  110.                 {
  111.                         LED_B=0;                                        //布防灯常亮
  112.                         if(DY_rsd==0)                        //有人入侵
  113.                         {
  114.                                 DY_BUZZ=Twinkle;        //报警
  115.                                 if(Cnt1min==1)                //立即发送信息,以后隔1分钟发送一次信息
  116.                                 {
  117.                                         LED_S=0;                        //发送指示灯亮
  118.                                         GSM_work();                        //发送 GSM 短信
  119.                                         Cnt1min=0;                        //1分钟等待标志位清0
  120.                                 }
  121.                                 if(Twinkle==0)
  122.                                         LED_S=1;                                //发送指示灯熄灭
  123.                         }
  124.                         else DY_BUZZ=1;                                //蜂鸣器复位
  125.                 }
  126.         }
  127. }
  128. //主函数
  129. void main()
  130. {
  131.         Uart_init();                 //初始化定时器
  132.         DY_key1=1;                        //初始化端口
  133. //        DY_key2=1;
  134.         DY_BUZZ=1;
  135.         DY_rsd=1;
  136.         LED_B=1;
  137.         LED_S=1;
  138.         while(1)                        //进入 while 循环
  139.         {
  140.                 keyscan();                //按键
  141.                 Time();                        //计时
  142.                 alert();                        //警报
  143.         }
  144. }
复制代码
回复

使用道具 举报

11#
ID:297809 发表于 2018-3-27 16:00 | 只看该作者
晶振电路等是否工作正常
回复

使用道具 举报

12#
ID:297824 发表于 2018-3-27 16:19 | 只看该作者
输出管脚接10K电阻上拉到VDD。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表