本帖最后由 芯圣电子官方QQ 于 2023-7-24 14:59 编辑
测试下定时器0中断,使用定时器0产生1ms定时中断,反转P00口电平。
一、手册相关的资料
定时器0的工作方式1和通用的单片机一样 ,16位定时器计数器进入中断口要重新装载TH0和TL0的值。
二、程序代码
- //main.c
- #define ALLOCATE_EXTERN
- #include "config.h"
- //系统初始化
- void SystemInit(void)
- {
- /************************************系统初始化****************************************/
- WDTCCR = 0x00; //关闭看门狗
- while((CLKCON&0x20)!=0x20); //等待内部高频RC起振
- CLKSWR = 0x51; //选择内部高频时钟为主时钟,内部高频RC2分频,Fosc=16MHz
- while((CLKSWR&0xC0)!=0x40); //等待内部高频切换完成
- CLKDIV = 0x01; //Fosc1分频得到Fcpu,Fcpu=16MHz
- }
- void main(void)
- {
- // uint i;
- SystemInit(); //系统初始化
- Init_Port(); //端口初始化
- //EintInit(); //外部中断初始化
- //INT2_7_Init(); //外部中断2-7初始化
- //CCO_Init(); //CCO输出
-
- Init_Timer0(); //初始化定时器0
-
- while(1)
- {
- }
- }
- //timer.c
- #include "config.h"
- //定时器0初始化
- void Init_Timer0(void)
- {
- TCON1 |= 0x01; //定时器0时钟1分频
- TMOD |= 0x01; //设置T0为16位定时模式
- TH0 = 0xc1;
- TL0 = 0x80; //1MS
- ET0=1;
- TR0=1;
- EA = 1; //打开总中断
- }
- //定时器0中断处理
- void timer0(void) interrupt TIMER0_VECTOR
- {
- TH0 = 0xc1;
- TL0 = 0x80; //1MS
- P0_0 =~ P0_0; //P00翻转
- }
程序源码:
HC89S003F4_TEST_TIMER.rar
(45.39 KB, 下载次数: 11)
定时器0工作方式0是在方式1的基础上,将定时器中断里面的
TH0 = 0xc1;
TL0 = 0x80; //1MS 自动可以赋值,执行结果是一样的。
三、执行结果
P00口输出1MS方波
|