本帖最后由 芯圣电子官方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)
定时器0工作方式0是在方式1的基础上,将定时器中断里面的
TH0 = 0xc1;
TL0 = 0x80; //1MS 自动可以赋值,执行结果是一样的。
三、执行结果
P00口输出1MS方波
|