| 你这个用定时器触发中断,但是定时完一次之后你这个定时器需要重新启动,才能再次开始定时,然后进入中断才会反转 |
| int x=0,y=0; 放到外面去做全局变量 |
wulin 发表于 2020-6-11 16:39 好的多谢 |
左眼 发表于 2020-6-11 18:06 懂了多谢 |
| 把在定时器0的中断服务函数里的int前面加上static就行了。你的错误出现在每一次定时器中断进入你都会重置x,y值,导致其每次都是0开始,1结束。对于其为什么会亮,是因为你电路图有问题的,没有上拉或下拉电阻,你的端口值是不确定的,似乎是低电平,导致通电就亮。建议买块板子,不要用仿真,新手用实物,等你本事到了再用仿真。 |
| 另外y的值设的有点大,时间长得让人怀疑是不是有问题 |
|
楼主局部变量int x=0,y=0;,也就是每次进入中断都清0,永远也加不到想要的数。只有把x、y设为全局变量或局部静态变量才能达到楼主想要的效果。 void timer () interrupt 1 { static unsigned char x=0,y=0; TH0=0x3C; //计数初值重装载 TL0=0xB0; if(led2==0) { x++; if(x==40) { led2=1; x=0; } } if(led2==1) { y++; if(y==200) { led2=0; y=0; } } } |
你在定时器中断中定义的x,y是局部变量,每进入一次中断都会被重新赋值为0,所以它们永远不会达到你设置的改变条件。 |
| 定时器里面的变量或声明为公共变量或声明为静态变量。否则进入中断变量始终为0。 |
| 我想做一个手控灯,一个自动灯,但是那个自动灯亮了就不灭了 |