找回密码
 立即注册

QQ登录

只需一步,快速开始

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

新手求助--关于51单片机空闲与掉电模式应用

[复制链接]
跳转到指定楼层
楼主
ID:164080 发表于 2017-2-9 23:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
求助各位大神!!!
我完全按照郭天祥《51单片机C语言程序教程》例13.1.1的源程序编写下载后,数码管理论上从“00”开始递增,到“05”后变成只显示一个“5”。但我还没有用导线接入外部中断(INT0或INT1),没过几秒数码管重新从“06”开始计数了。。。请问这是什么原因呢? 我的程序还需要进行什么修改吗?
我的开发板是STC89C52,清翔电子的,略有不同。
  1. #include<reg52.h>
  2. #define uchar unsigned char
  3. #define uint unsigned int
  4. sbit dula=P2^6;
  5. sbit wela=P2^7;
  6. uchar code table[]=
  7. {
  8.         0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
  9.         0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71
  10. };
  11. uchar num;
  12. void delayms(uint);
  13. void display(uchar shi, uchar ge)
  14. {
  15.         dula=1;
  16.         P0=table[shi];
  17.         dula=0;
  18.         P0=0xff;
  19.        
  20.         wela=1;
  21.         P0=0xfe;
  22.         wela=0;
  23.         delayms(5);
  24.        
  25.         dula=1;
  26.         P0=table[ge];
  27.         dula=0;
  28.         P0=0xff;
  29.        
  30.         wela=1;
  31.         P0=0xfd;
  32.         wela=0;
  33.         delayms(5);
  34. }
  35. void delayms(uint xms)
  36. {
  37.         uint i,j;
  38.         for(i=xms;i>0;i--)
  39.                 for(j=110;j>0;j--);
  40. }
  41. void main()
  42. {
  43.         uchar a,b,num1;
  44.         TMOD=0x01;
  45.         TH0=(65536-50000)/256;
  46.         TL0=(65536-50000)%256;
  47.         EA=1;
  48.         ET0=1;
  49.         EX0=1;
  50.         EX1=1;
  51.         TR0=1;
  52.         while(1)
  53.         {
  54.                 if(num>=20)
  55.                 {
  56.                         num=0;
  57.                         num1++;
  58.                         if(num1==6)
  59.                         {
  60.                                 ET0=0;
  61.                                 PCON=0x01;
  62.                         }
  63.                         a=num1/10;
  64.                         b=num1%10;
  65.                 }
  66.                 display(a,b);
  67.         }
  68. }
  69. void timer0() interrupt 1
  70. {
  71.         TH0=(65536-50000)/256;
  72.         TL0=(65536-50000)%256;
  73.         num++;
  74. }
  75. void ex_int0() interrupt 0
  76. {
  77.         PCON=0;
  78.         ET0=1;
  79. }
  80. void ex_int1() interrupt 2
  81. {
  82.         PCON=0;
  83.         ET0=1;
  84. }
复制代码



分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:85726 发表于 2017-2-10 09:23 | 只看该作者
注意查看你开发板的原理图,特别是外部中断0和1的相应管脚,你没有自己触发,它自己就已经触发了,说明是你开发板的问题!
回复

使用道具 举报

板凳
ID:143694 发表于 2017-9-9 22:09 | 只看该作者
我用我的清翔开发板测试,正常运行了,(按照楼主意愿运行了)没有出现楼主所发现的问题。
建议楼主检查硬件以及其他问题。
回复

使用道具 举报

地板
ID:213173 发表于 2017-9-10 08:00 | 只看该作者
程序没有问题,是你的硬件导致的误触发。
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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