10_单片机_定时器初识
1. STC89C51RC系列单片机有定时器0和定时器1,都具有2种工作方式:定时方式和计数方式。
2种方式的本质区别:脉冲来源不同。定时方式:脉冲来自系统时钟;计数方式:脉冲来自单片机外部引脚(T0为P3^4,T1为P3^5)
2. 51单片机定时/计数器的核心部件是一个加法的计数器(也有减法,当前使用的硬件不支持)
3. 定时器相关的寄存器

定时器/计数器的工作模式选择,如下

4. 实现定时器工作的步骤:
a. 配置定时器的工作模式(TMOD);
b. 设置TH0和TL0;
c. 配置寄存器;
d. 配置中断处理函数;
e. 运行验证;
5. 编写代码:实现LED闪烁间隔500ms;
采用模式1的工作方式,即16位,2^16 = 65536
当前单片机晶振频率是12MHz,12T模式,1个机器频率 1MHz = 12MHz/12T,周期 1us = 1/f = 1/1MHz;
模式1 最大支持时间是 65536 * 1us = 65.536ms。现在需要定时500ms,可以分成 50ms*10
单片机的定时器是加法计数,则初值设置为”15536 = 65536-50000“
TH0 = 15536/256; TL0 = 15536%256;(注:16位二进制,对256求模=高8位;对256求余=低8位)
也可以写成:TH0 = 15536>>8;TL0 = 15536
1 #include <REG51.H> 2 3 sbit led1 = P2^7; 4 5 #define TMS_50 65536-50000 // 设置定时50ms 6 7 unsigned char count = 0; 8 9 void timer0_isr(void) interrupt 1 using 1 10 { 11 // 重置定时器 12 TL0 = TMS_50; 13 TH0 = TMS_50>>8; 14 15 count--; 16 if(count == 0) 17 { 18 led1 = !led1; // led状态取反 19 count = 10; 20 } 21 } 22 23 void main(void) 24 { 25 TMOD = 0x01; // 设置模式1 26 27 TL0 = TMS_50; // TMS_50 % 256 28 TH0 = TMS_50>>8; // TMS_50 /256 29 30 TR0 = 1; 31 ET0 = 1; 32 EA = 1; 33 34 count = 10; 35 36 while(1); 37 }
初学请指正,谢谢
浙公网安备 33010602011771号