/**********************************************************************
name:发光二极管以1秒钟的间隔,连续闪烁
延时方式:定时器0,工作方式0(13位计数) 程序控制方式:中断方式
连线:P2口—>发光二极管JP14
计数初值计算过程分析:1s=200*0.005s
每秒计数机器周期个数=11.0592M/12=921600
0.005s计数个数N=921600*0.005=4608
定时0.005s计数初值X=8192-4608=3584
低5位(TL0):X%32 高8位(TH0):X/32
**********************************************************************/
#include #define uint unsigned int #define uchar unsigned char #define LED P2 //重新定义P2口为LED void init_T0(void); void isr_T0(void); uchar count = 0; main() { init_T0(); while(1) { //方式二:将定时时间到的处理程序写在主函数中处理!较好!! if(count == 200) { count = 0; //清0,重新计数 //P2 = ~P2; LED = ~LED; } } } void isr_T0(void) interrupt 1 { ++count; //方式一:将定时时间到的处理程序写在中断服务函数里,不好! 提到主函数中处理!! /*if(count == 200) { count = 0; //清0,重新计数 P2 = ~P2; } */ TL0 = 38%32; //重新写入计数初值低8位 TH0 = 38/32; //重新写入计数初值高8位 //清除溢出标志位:中断方式硬件自动清0 } void init_T0(void) { TMOD = 0x0; //设定定时计数器0:工作方式0 TL0 = 38%32; //设置计数初值低8位 TH0 = 38/32; //设置计数初值高8位 EA = 1; //开总中断 ET0 = 1; //开定时计数器0中断 TR0 = 1; //TCON=0x10,启动定时计数器0 } /******************************************************************* name:发光二极管以1秒钟的间隔,连续闪烁 延时方式:定时器0,工作方式2(8位计数,自动重装载) 程序控制方式:中断方式 连线:P2口—>发光二极管JP14 计数初值计算过程分析: 每秒计数机器周期个数=11.0592M/12=921600 0.00015625s计数个数N=921600*0.00015625=144 1s = 0.00015625*00 定时0.00015625s计数初值X=256-144=112 高8位(TH0)=低8位(TL0):X *******************************************************************/ #include #define uint unsigned int #define uchar unsigned char #define LED P2 //重新定义P2口为LED void init_T0(void); void isr_T0(void); uint count = 0; main() { init_T0(); while(1) { //方式二:将定时时间到的处理程序写在主函数中处理!较好!! if(count == 00) { count = 0;//清0,重新计数 LED = ~LED; } } } void isr_T0(void) interrupt 1 { ++count; //计数初值自动重装载 //清除溢出标志位:中断方式硬件自动清0 } void init_T0(void) { TMOD = 0x02; //设定定时计数器0:工作方式2 TH0 =TL0 = 112; //设置计数初值高8位=低8位 EA = 1; ET0 = 1; TR0 = 1; } //开总中断 //开定时计数器0中断 //TCON=0x10,启动定时计数器0 因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- hids.cn 版权所有 赣ICP备2024042780号-1
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务