单片机定时报警C语言程序,51单片机 定时器 中断程序 (C语言)
EA ????是 中斷總開關(guān), 不管是定時(shí)器,串口還是外部中斷,都需要打開 EA 才能觸發(fā)中斷;
ET0???是 定時(shí)器0 的專用中斷開關(guān), 也就是說: 打開了EA.而不打開ET0,定時(shí)器0是無法觸發(fā)中斷的;
TR0???是 啟動定時(shí)器開始定時(shí)計(jì)數(shù) 的開關(guān),如果打開 EA 和 ET0, 就代表允許定時(shí)器 0 觸發(fā)中斷, 但是定時(shí)器0 何時(shí)開始觸發(fā),由 TR0 來啟動和停止.
51 單片機(jī) 12 分頻,
一個 機(jī)器周期 = 12/nHz?? //(n指 晶振頻率)
如要定時(shí)的時(shí)間為 M
初值? = M / 機(jī)器周期;
TH0 = (65536 - 初值) % 256;?// 高 8 位;
TL0 = (65536 - 初值) / 256;? ?// 低 8 位;
案例:
12M 晶振 做 1ms 定時(shí)計(jì)算
1. 機(jī)器周期: = 12 /(12*10^6)=1us(微秒)
2. 定時(shí)初值:(1*10^-3)/(1*10^-6) = 1ms/1us = 1000; (倍率)
將 高 位 與 低位 進(jìn)行分離;轉(zhuǎn)化成 16進(jìn)制 數(shù)據(jù);
3. TH0 = (65536 - 1000) % 256 = 64536 % 256 (10 進(jìn)制數(shù)) --> 0xFC
3. TL0 = (65536 - 1000) / 256 = 64536 / 256 (10 進(jìn)制數(shù)) --> 0x18
每次內(nèi)部 自加 1bit 時(shí),耗費(fèi) 1us; 所以,要累加 1000 次,形成 1ms 中斷溢出;
//定時(shí)器 初始化函數(shù)
void Init_Timer()
{
count = 0;????????????????????????????????// 用于 中斷后 計(jì)數(shù),判斷;
TMOD = 0x01; ???????????????????????????//T0 工作方式 1;16位 計(jì)數(shù)器;
TH0=(65536-50000)/256;? ????????// 初值高 8 位 走 1000 次,每次 1us :晶振 12MHz;
TL0=(65536-50000)%256;?????????// 初值低 8 位 走 1000 次,每次 1us :晶振 12MHz;
TR0? = 1;??????????????????????????????????// 開啟 T0 定時(shí)器;
ET0? = 1;??????????????????????????????????// 允許 T0 定時(shí)器中斷;
EA?? = 1; ????????????????????????????????// 開啟 總中斷 允許;
}
// 中斷函數(shù);
void Timer0(void) interrupt 1 using 1
{
TH0 = (65536-50000)/256;?? ?// 中斷后,賦初值;
TL0 = (65536-50000)%256;
count++;? ?????// 每次中斷,計(jì)數(shù) 累加 1;
if(count >=某個值時(shí))
{
count = 0; //?計(jì)數(shù)值 清0 ;
// 控制體;
}
}
總結(jié)
以上是生活随笔為你收集整理的单片机定时报警C语言程序,51单片机 定时器 中断程序 (C语言)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: kafka linux客户端,kafka
- 下一篇: c语言周传生教材答案,C语言程序设计与实