找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

绝了,单片机中断进入失败!软件没问题,计数器由DCLOCK激励输入

查看数: 1486 | 评论数: 8 | 收藏 0
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2019-6-16 11:53

正文摘要:

几个钟头了,用简单中断试过,软件没问题,计数器由DCLOCK激励输入,还试过直接开关加接地手动方波。 谢谢大佬们! 单片机源程序如下: #include<reg51.h> #include<intrins.h> sbit duan=P3^0; sb ...

回复

ID:563332 发表于 2019-6-18 16:56
yzwzfyz 发表于 2019-6-17 14:46
1、仿真是谁在仿?仿什么东西的真?仿的错不错?无论哪一项有误都不行。
2、有些动作,仿真不一定仿得出来 ...

确实是实践出真知!我的开发板在路上了!
ID:563332 发表于 2019-6-18 16:55
libin123 发表于 2019-6-17 11:00
把KEIL关闭,重启电脑,重启软件后,一样的程序,重新下载,就OK了

试了一下应该不是这个问题。但是谢谢你的帮助。
ID:563332 发表于 2019-6-18 16:54
wifingtta 发表于 2019-6-17 08:09
我也出现过这种情况,调试很多次都没用。
结果把KEIL关闭,重启电脑,重启软件后,一样的程序,重新下载, ...

对我这没起效,但是谢谢你的方案喔!
ID:563332 发表于 2019-6-18 16:49
wulin 发表于 2019-6-17 06:56
楼主自信软件没问题,其实就是软件问题:中断向量入口错误。

牛。。牛人!咱这论坛太猛了。谢谢您啦!学到了!
ID:123289 发表于 2019-6-17 14:46
1、仿真是谁在仿?仿什么东西的真?仿的错不错?无论哪一项有误都不行。
2、有些动作,仿真不一定仿得出来,否则就不叫仿了。
所以做个实战,一切都明朗,能花几个钱呢。
ID:448543 发表于 2019-6-17 11:00

把KEIL关闭,重启电脑,重启软件后,一样的程序,重新下载,就OK了
ID:208271 发表于 2019-6-17 08:09
我也出现过这种情况,调试很多次都没用。
结果把KEIL关闭,重启电脑,重启软件后,一样的程序,重新下载,就OK了。
直到现在我也不知道原因是什么,有哪位大神能指示一下。
ID:213173 发表于 2019-6-17 06:56
楼主自信软件没问题,其实就是软件问题:中断向量入口错误。

  1. #include<reg51.h>
  2. #include<intrins.h>
  3. sbit duan=P3^0;
  4. sbit wei=P3^1;
  5. unsigned int ct0=0;
  6. unsigned char count=0;
  7. unsigned char code table[] = {
  8. 0x3f,0x06,0x5b,0x4f,
  9. 0x66,0x6d,0x7d,0x07,
  10. 0x7f,0x6f,0x77,0x7c,
  11. 0x39,0x5e,0x79,0x71 };

  12. void delay(unsigned int z)       //延迟
  13. {
  14.   unsigned char i,j;
  15.   for(i=0;i<z;i++)
  16.           for(j=0;j<110;j++);
  17. }
  18. void cl(void)            //初始化
  19. {
  20.         TMOD=0x15;                //T0外部计数器T1定时器
  21.         TH0=0x00;
  22.         TL0=0x00;
  23.         TH1 = 0x3C;                //设置定时器T1初值50ms
  24.         TL1 = 0xB0;                //设置定时器T1初值50ms
  25.         TR0=1;
  26.         TR1=1;
  27.         EA=1;
  28. //        ET0=1;
  29.         ET1=1;
  30. }


  31. void show6led(unsigned int num)
  32. {
  33.         static unsigned char count=0;        //计数变量
  34.         P2=0x00;                                        //消隐
  35.         duan=1;
  36.         duan=0;
  37.         switch(count)
  38.         {
  39.                 case 0:                               
  40.                    P2=table[num/10000%10];
  41.                    duan=1;
  42.                    duan=0;

  43.                    P2=0x7d;
  44.                    wei=1;
  45.                    wei=0;
  46.                    count++;
  47.                 break;
  48.                 case 1:                               
  49.                    P2=table[num/1000%10]|0x80;
  50.                    duan=1;
  51.                    duan=0;
  52.                
  53.                    P2=0x7b;
  54.                    wei=1;
  55.                    wei=0;
  56.                    count++;
  57.                 break;
  58.                 case 2:                                       
  59.                    P2=table[num/100%10];
  60.                    duan=1;
  61.                    duan=0;
  62.                
  63.                    P2=0x77;
  64.                    wei=1;
  65.                    wei=0;
  66.                    count++;
  67.                 break;
  68.                 case 3:       
  69.                    P2=table[num/10%10];
  70.                    duan=1;
  71.                    duan=0;
  72.                
  73.                    P2=0xef;
  74.                    wei=1;
  75.                    wei=0;
  76.                    count++;
  77.                 break;
  78.                 case 4:       
  79.                    P2=table[num%10];
  80.                    duan=1;
  81.                    duan=0;
  82.                
  83.                    P2=0xdf;
  84.                    wei=1;
  85.                    wei=0;
  86.                    count=0;
  87.                 break;
  88.         }
  89. }

  90. void main()      
  91. {
  92.         cl();
  93.         while(1)
  94.         {           
  95.                 show6led(ct0);
  96.                 delay(1);
  97.         }
  98. }
  99. void t() interrupt 3 //T1中断服务函数
  100. {
  101.         TH1 = 0x3C;                //设置定时初值50ms
  102.         TL1 = 0xB0;                //设置定时初值
  103.         count++;
  104.         if(count>=20)        //1秒
  105.         {
  106.                 count=0;
  107.                 ct0=TH0<<8|TL0;//读取T0计数值
  108.                 TH0=0x00;
  109.                 TL0=0x00;
  110.         }
  111. }
复制代码



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

Powered by 单片机教程网

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