初学单片机,定时器遇到问题,那位大神帮忙解决解决~~~
时间:10-02
整理:3721RD
点击:
- #include<reg51.h>
- #include<intrins.h>
- #define uint unsigned int
- #define uchar unsigned char
- uint t0;
- void init()
- {
- TMOD=0x11;
- TH0=(65535-50000)/256;
- TL0=(65535-50000)%256;
- EA=1;
- EX0=1;
- TR0=1;
- }
- void main()
- {
- P1=0x01;
- t0=P1;
- while(1)
- {
- init();
- }
- }
- void timer0() interrupt 0
- {
- TH0=(65535-50000)/256;
- TL0=(65535-50000)%256;
- t0=_cror_(t0,1);
- }
我想做一个LED流水灯 下载进去后 灯不会移位~~~请高手指点指点~~
1、一般都是用typdefine usinged int uint,那样是不合适的用法。
2、你的init()函数不应该一直放在while(1)循环当中,否则会一直给定时器赋初值,定时器永远没法溢出自然进不了中断。
3、以上是我的看法,仅供参考!
首先定时器的初始化 如定时器0 应该是TMOD=0x01;//工作方式1TH0=...;
TL0=...;
ET0=1;//用定时器0应使用“ET0”定时器T0中断允许控制位。EX0是外部中断允许控制位,靠P3^2的信号变化来进入中断程序,外部触发中断才会用到EX0
TR0=1;//启动定时器0
在main函数中,
while(1)
{
init();// 这个while循环会一直执行init()这个函数,即使定时器工作了,也不会好好干活的
}
因为像初始化的语句,只需在最开始执行一次就可以了,你可你自己改改
关于I/O的操作
t0 = P0;//将P0口的数据赋给t0
如果想给P0口赋值,可以直接P0=t0;
LZ在改改看看
1.设置定时器0有误,EX0=1是外部中断0,应该是ET0=1; 2.定时器初始化程序应该置于while之前 3.最后要将t0的值送往P1口
你的灯怎么移动呀?你都没有给P1送值,而且初始化就开始执行一次就行了