最新回答
- 2024-04-30winonafirst1
用T2作为计数器了来计数外部脉冲了 P1.0作为I/O口用了以后T2计数是不行了,不过定时或是作为串口时钟还是可以的。 T2是一个16位自动重载的,像T0和T1的方式2一样,只不过它是16位重载,如果作为计数器或定时用,可以参照T0和T1的方式2的用法,不过寄存器是不一样的,你要看一下pdf资料。中断用的是5,就是interrupt 5
赞254
- 2024-04-30丨加小菲丨
你好,你好,很荣幸回答你的问题,定时器其实就是单片机的一个内部自身时钟的计数器,每一个周期计数器加1,所以使用定时器功能时候先要给定时器付初值,就是先写TH0TL0的值(如下),写完初值后就等着定时器功能的那个计数器记满了数后也就是到了65536后就溢出了,所以一次定时的过程就是65536-初值 之间的数 所代表的时钟周期,计数满了溢出要产生中断就要写一个中断服务子程序,子程序如下void timer0() interrrupt X 中断服务子程序中还要给定时器计数器的TH TL付初值 进行下一次的计数。
希望我的回答可以帮到你,谢谢。
赞55
- 2024-04-30已然晕菜
根据晶振频率,计算指令周期,设置定时器的分频,然后设置定时器的工作方式TMOD,最后设置初值TH0 TL0 比如用的X HZ的晶振,stc的单片机有3种模式(X/12)x/6,还有单周期指令,选择12分频的,T=1/(X/12)就是一个指令周期 ,如果定时没有分频,(65536-Z(初值))*T就是定时的时间比如是12M的晶振那么 设置TMOD=0x01;16位定时器模式TH0=(65536-20000)/256;TL0=(65536-20000)%256;就是设置了20ms的定时.
希望我的回答可以帮助到您。
赞251