定时器 0
原理图
工作模式 0
配置定时器 0:
- 工作模式 0,16 位自动重装定时器;
- 时钟源来自内部系统时钟 / 12
- 允许其在计数溢出之后请求中断;
- 每次 T0 中断,反转一次 P1.1 的输出电平。
main.c 文件:
sfr IE = 0xA8;
#define GLOBAL_IE_EA (0x80)
#define T0_IE_ET0 (0x02)
sfr TCON = 0x88;
sfr TMOD = 0x89;
sfr TL0 = 0x8A;
sfr TH0 = 0x8C;
sfr AUXR = 0x8E;
#define T0_TCON_TF0 (0x20)
#define T0_TCON_TR0 (0x10)
#define T0_TMOD_GATE (0x08)
#define T0_TMOD_CT (0x04)
#define T0_TMOD_M1 (0x02)
#define T0_TMOD_M0 (0x01)
#define T0_AUXR_T0x12 (0x80)
sfr P1 = 0x90;
sbit LED = P1^1;
void main() {
TMOD &= ~T0_TMOD_GATE;
TMOD &= ~T0_TMOD_CT;
TMOD &= ~(T0_TMOD_M1 | T0_TMOD_M0);
TH0 = (65536 - 10000) >> 8;
TL0 = (65536 - 10000) & 0xFF;
TCON &= ~T0_TCON_TF0;
TCON |= T0_TCON_TR0;
IE |= T0_IE_ET0;
IE |= GLOBAL_IE_EA;
while(1) {}
}
void Timer0InterruptService() interrupt 1 {
LED = !LED;
}
使用 STC-ISP 下载程序,频率设为 12.000 MHz:
注意:虽然 STC-ISP 提示下载失败!但是,我发现单片机仍然按照我的设想执行程序,这里可能是 STC-ISP 有问题。
对 T0 的时钟源进行 12 分频(AUXR &= ~T0_AUXR_T0x12; ),测量 P1.1 输出:
注意:虽然在原理图中,我给单片机的电源符号是 5V,但是在实际测试中,我使用的是 USB 转串口模块上提供的 3.3V(实测没有 3.3V),这并不妨碍单片机正常运行。
不对 T0 的时钟源进行分频(AUXR |= T0_AUXR_T0x12; ),测量 P1.1 输出:
参考
宏晶科技 STC - STC15 系列单片机器件手册
|