22
2426
3422
论坛元老
使用道具 举报 送花
#include "../comm/Ai8051U.h" // 包含 Ai8051U 头文件 unsigned int sec_counter = 0; // 秒计数器 u8 Led_State = 0xFF; bit t0_flag = 0; //定义1个位变量,T0事件位变量标志,记录定时器0已产生中断 // 供主循环查询到该定时器已产生中断,在主循环中处理定时器0的中断任务,不堵塞其他中断 bit t1_flag = 0; //定义1个位变量,T0事件位变量标志,记录定时器0已产生中断的不同时间 // 供主循环查询到该定时器已产生中断的不同时间,在主循环中处理定时器0的中断任务,不堵塞其他中断 void SYS_init(void); void Timer0_1sInit(void); //定时器0初始化,1秒@24.000MHz12T模式 void Timer0_2Init(void); //定时器0初始化,2秒@40.000MHz,12T模式 void Timer0_4Init(void); //定时器0初始化,4秒@24.000MHz12T模式 void main() { SYS_init(); EA = 1; // 开启总中断 //Timer0_1sInit(); //1秒@24.000MHz12T模式 Timer0_2Init(); //定时器0初始化,2秒@40.000MHz,12T模式 //Timer0_4Init(); //4秒@24.000MHz12T模式 P40 = 0; //给LED灯供电 Led_State = 0; while (1) { // 主循环可以做其他事情 // 1秒到了会在中断里置标志位 if(t0_flag == 1) //如果定时器0已产生中断,主循环判断要处理定时器0的中断任务 { t0_flag = 0; //清0,T0事件位变量标志 P00 = ~P00; //P00灯2秒闪烁,中断服务程序中尽量少执行长的任务,防止堵塞其他中断 } if(t1_flag == 1) // 2秒累加数=2,就是4秒 { P07=~P07; //P07灯4秒闪烁 t1_flag = 0; } } } void sys_init(void) //系统初始化 { EAXFR = 1; //允许访问扩展的特殊寄存器,XFR WTST = 0; //设置取程序代码等待时间,赋值为 0 表示不等待,程序以最快速度运行 CKCON = 0; //设置访问片内的 xdata 速度,赋值为 0 表示用最快速度访问,不增加额外的等待时间 P0M0 = 0x00; P0M1 = 0x00; //设置 P0 口为准双向口模式 P1M0 = 0x00; P1M1 = 0x00; //设置 P1 口为准双向口模式 P2M0 = 0x00; P2M1 = 0x00; //设置 P2 口为准双向口模式 P3M0 = 0x00; P3M1 = 0x00; //设置 P3 口为准双向口模式 P4M0 = 0x00; P4M1 = 0x00; //设置 P4 口为准双向口模式 P5M0 = 0x00; P5M1 = 0x00; //设置 P5 口为准双向口模式 P6M0 = 0x00; P6M1 = 0x00; //设置 P6 口为准双向口模式 P7M0 = 0x00; P7M1 = 0x00; //设置 P7 口为准双向口模式 } void Timer0_1sInit(void) //1秒@24.000MHz12T模式 { TM0PS = 0x1E; //设置定时器时钟预分频 ( 注意:并非所有系列都有此寄存器,详情请查看数据手册 ) AUXR &= 0x7F; //定时器时钟12T模式 TMOD &= 0xF0; //设置定时器模式 TL0 = 0xFC; //设置定时初始值 TH0 = 0x03; //设置定时初始值 TF0 = 0; //清除TF0标志 TR0 = 1; //定时器0开始计时 ET0 = 1; //使能定时器0中断 } void Timer0_2Init(void) //定时器0初始化,2秒@40.000MHz,12T模式 { TM0PS = 0x65; //设置定时器时钟预分频 ( 注意:并非所有系列都有此寄存器,详情请查看数据手册 ) AUXR &= 0x7F; //定时器时钟12T模式 TMOD &= 0xF0; //设置定时器模式 TL0 = 0xB1; //设置定时初始值 TH0 = 0x00; //设置定时初始值 TF0 = 0; //清除TF0标志 TR0 = 1; //定时器0开始计时 ET0 = 1; //使能定时器0中断 } void Timer0_4Init(void) //4秒@24.000MHz12T模式 { TM0PS = 0x7A; //设置定时器时钟预分频 ( 注意:并非所有系列都有此寄存器,详情请查看数据手册 ) AUXR &= 0x7F; //定时器时钟12T模式 TMOD &= 0xF0; //设置定时器模式 TL0 = 0xEF; //设置定时初始值 TH0 = 0x01; //设置定时初始值 TF0 = 0; //清除TF0标志 TR0 = 1; //定时器0开始计时 ET0 = 1; //使能定时器0中断 } // 定时器0中断服务程序 void Timer0_Isr(void) interrupt TMR0_VECTOR //定时器0中断服务程序 { static unsigned char count = 0; count++; sec_counter++; t0_flag = 1; //置1,记录定时器0已产生中断,供主循环判断要处理定时器0的中断任务 if (sec_counter >= 2) { t1_flag = 1; sec_counter = 0; } } 复制代码
Tmie0_2秒.zip
2026-1-17 12:03 上传
点击文件名下载附件
41.26 KB, 下载次数: 0
本版积分规则 发表回复 回帖后跳转到最后一页
|手机版|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )
GMT+8, 2026-4-1 04:11 , Processed in 0.116780 second(s), 75 queries .
Powered by Discuz! X3.5
© 2001-2026 Discuz! Team.