标题: 求助!单片机中断计数的问题 [打印本页]

作者: asyxl    时间: 2017-8-30 11:46
标题: 求助!单片机中断计数的问题
利用两个按键模拟传感器计数为a和b,当a大于b是亮一个灯,a等于b时亮另一个灯。
道理我懂,但是为什么程序写出来后仿真却不计数呢?请各位大神帮忙看一下应该怎么改

  1. #include<reg51.h>
  2. #define uchar unsigned char
  3. #define uint unsigned int
  4. sbit out1=P1^0;
  5. sbit out2=P1^1;
  6. uint a=0,b=0;
  7. void delay(uchar c)
  8. {
  9. uchar i;
  10. while(c--)for(i=0;i<120;i++);
  11. }
  12. void t0isr() interrupt 1
  13. {
  14. a++;
  15. }
  16. void t1isr() interrupt 3
  17. {
  18. b++;
  19. }
  20. main()
  21. {
  22. TMOD=0x66;
  23. ET0=1;
  24. ET1=1;
  25. TR1=1;
  26. TR0=1;
  27. EA=1;
  28. OUT=1;
  29. while(1)
  30. {
  31. if(a>b)out1=0;
  32. if(a==b)
  33. {
  34. delay(200);
  35. out2=0;
  36. }
  37. }}
复制代码



作者: jubaolun    时间: 2017-8-30 11:46
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
sbit out1=P1^0;
sbit out2=P1^1;
uint a=0,b=0;
void delay(uchar c)
{
uchar i;
while(c--)for(i=0;i<120;i++);
}
void int0() interrupt 0
{
a++;
}
void int1() interrupt 2
{
b++;
}
main()
{

EX0=1;
EX1=1;
IT1=1;
IT0=1;
EA=1;

while(1)
{
if(a>b)out1=0;
if(a==b)
{
delay(200);
out2=0;
}
}}
作者: a330300029    时间: 2017-8-30 14:40
我也没测试过呀具体不太懂
作者: jubaolun    时间: 2017-8-30 16:11
上面我改了外部中断的语句:
EX0=1;
EX1=1;
IT1=1;
IT0=1;
作者: ahshmj    时间: 2017-8-30 16:16
定时器工作模式设置不对。“TMOD=0x66”,计数器也没有设置初值,即便你的程序其他地方没问题,你按按键也要按65536次才能产生中断,a或b才会加1。
大概你是想每按一次按键“a”或“b”增加“1”,你可以不用中断,如:a=TL0 和b=TL1 。

程序还有许多问题,你自己实践中提高吧。
作者: zl2168    时间: 2017-8-30 16:23
应先学些基础理论,才能事半功倍。
作者: asyxl    时间: 2017-8-30 16:45
太感谢了
作者: Q624353765    时间: 2017-8-30 22:11
看看3333




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1