|
/*********************************************************************************************
函數(shù)名:定時(shí)/計(jì)數(shù)器初始化函數(shù)
調(diào) 用:T_C_init();
參 數(shù):無
返回值:無
結(jié) 果:設(shè)置SFR中T/C1和(或)T/C0相關(guān)參數(shù)
備 注:本函數(shù)控制T/C1和T/C0,不需要使用的部分可用//屏蔽
/**********************************************************************************************/
void T_C_init (void){
TMOD = 0x11; //高4位控制T/C1 [ GATE,C/T,M1,M0,GATE,C/T,M1,M0 ]
EA = 1; //中斷總開關(guān)
TH1 = 0xFF; //16位計(jì)數(shù)寄存器T1高8位(寫入初值)
TL1 = 0xFF; //16位計(jì)數(shù)寄存器T1低8位
ET1 = 1; //T/C1中斷開關(guān)
TR1 = 1; //T/C1啟動(dòng)開關(guān)
//TH0 = 0x3C; //16位計(jì)數(shù)寄存器T0高8位
//TL0 = 0xB0; //16位計(jì)數(shù)寄存器T0低8位(0x3CB0 = 50mS延時(shí))
//ET0 = 1; //T/C0中斷開關(guān)
//TR0 = 1; //T/C0啟動(dòng)開關(guān)
}
/**********************************************************************************************/
/*********************************************************************************************
函數(shù)名:定時(shí)/計(jì)數(shù)器1中斷處理函數(shù)
調(diào) 用:[T/C1溢出后中斷處理]
參 數(shù):無
返回值:無
結(jié) 果:重新寫入16位計(jì)數(shù)寄存器初始值,處理用戶程序
備 注:必須允許中斷并啟動(dòng)T/C本函數(shù)方可有效,重新寫入初值需和T_C_init函數(shù)一致
/**********************************************************************************************/
void T_C1 (void) interrupt 3 using 3{ //切換寄存器組到3
TH1 = 0x3C; //16位計(jì)數(shù)寄存器T1高8位(重新寫入初值)
TL1 = 0xB0; //16位計(jì)數(shù)寄存器T1低8位(0x3CB0 = 50mS延時(shí))
//函數(shù)內(nèi)容
}
/**********************************************************************************************/
/*********************************************************************************************
函數(shù)名:定時(shí)/計(jì)數(shù)器0中斷處理函數(shù)
調(diào) 用:[T/C0溢出后中斷處理]
參 數(shù):無
返回值:無
結(jié) 果:重新寫入16位計(jì)數(shù)寄存器初始值,處理用戶程序
備 注:必須允許中斷并啟動(dòng)T/C本函數(shù)方可有效,重新寫入初值需和T_C_init函數(shù)一致
/**********************************************************************************************/
void T_C0 (void) interrupt 1 using 1{ //切換寄存器組到1
TH0 = 0x3C; //16位計(jì)數(shù)寄存器T0高8位(重新寫入初值)
TL0 = 0xB0; //16位計(jì)數(shù)寄存器T0低8位(0x3CB0 = 50mS延時(shí))
//函數(shù)內(nèi)容
}
/**********************************************************************************************/
/*********************************************************************************************
程序名: 定時(shí)計(jì)數(shù)器中斷處理程序
硬件支持: STC12C2052AD 12MHz
接口說明: P1接口8個(gè)LED燈
/*********************************************************************************************
說明:本程序可使單片機(jī)P1.0、P1.1接口上的LED燈分別以定時(shí)器T0和T1的各自周期閃爍。
P1.0 由 T0 控制
P1.1 由 T1 控制
/*********************************************************************************************/
#include <REG51.h> //通用89C51頭文件
sbit LED1 = P1 ^ 0; //定義閃爍LED
sbit LED2 = P1 ^ 1; //定義閃爍LED
/*********************************************************************************************
函數(shù)名:定時(shí)/計(jì)數(shù)器初始化函數(shù)
調(diào) 用:T_C_init();
參 數(shù):無
返回值:無
結(jié) 果:設(shè)置SFR中T/C1和(或)T/C0相關(guān)參數(shù)
備 注:本函數(shù)控制T/C1和T/C0,不需要使用的部分可用//屏蔽
/**********************************************************************************************/
void T_C_init (void){
TMOD = 0x11; //高4位控制T/C1 [ GATE,C/T,M1,M0,GATE,C/T,M1,M0 ]
EA = 1; //中斷總開關(guān)
TH1 = 0xFE; //16位計(jì)數(shù)寄存器T1高8位(寫入初值)
TL1 = 0xFE; //16位計(jì)數(shù)寄存器T1低8位
ET1 = 1; //T/C1中斷開關(guān)
TR1 = 1; //T/C1啟動(dòng)開關(guān)
TH0 = 0x13; //16位計(jì)數(shù)寄存器T0高8位
TL0 = 0x13; //16位計(jì)數(shù)寄存器T0低8位(0x3CB0 = 50mS延時(shí))
ET0 = 1; //T/C0中斷開關(guān)
TR0 = 1; //T/C0啟動(dòng)開關(guān)
}
/**********************************************************************************************/
/*********************************************************************************************
函數(shù)名:定時(shí)/計(jì)數(shù)器1中斷處理函數(shù)
調(diào) 用:[T/C1溢出后中斷處理]
參 數(shù):無
返回值:無
結(jié) 果:重新寫入16位計(jì)數(shù)寄存器初始值,處理用戶程序
備 注:必須允許中斷并啟動(dòng)T/C本函數(shù)方可有效,重新寫入初值需和T_C_init函數(shù)一致
/**********************************************************************************************/
void T_C1 (void) interrupt 3 using 3{ //切換寄存器組到3
TH1 = 0xFE; //16位計(jì)數(shù)寄存器T1高8位(重新寫入初值)
TL1 = 0xFE; //16位計(jì)數(shù)寄存器T1低8位
LED2 = ~LED2; //取LED相反狀態(tài)
}
/**********************************************************************************************/
/*********************************************************************************************
函數(shù)名:定時(shí)/計(jì)數(shù)器0中斷處理函數(shù)
調(diào) 用:[T/C0溢出后中斷處理]
參 數(shù):無
返回值:無
結(jié) 果:重新寫入16位計(jì)數(shù)寄存器初始值,處理用戶程序
備 注:必須允許中斷并啟動(dòng)T/C本函數(shù)方可有效,重新寫入初值需和T_C_init函數(shù)一致
/**********************************************************************************************/
void T_C0 (void) interrupt 1 using 1{ //切換寄存器組到1
TH0 = 0x13; //16位計(jì)數(shù)寄存器T0高8位(重新寫入初值)
TL0 = 0x13; //16位計(jì)數(shù)寄存器T0低8位
LED1 = ~LED1; //取LED相反狀態(tài)
}
/**********************************************************************************************/
/*********************************************************************************************/
void main (void){ //主程序
T_C_init(); //初始化
while(1){
}
}
/*********************************************************************************************/
1. 定時(shí)/計(jì)數(shù)器程序應(yīng)考慮系統(tǒng)時(shí)鐘頻率,本實(shí)驗(yàn)以12.000MHz晶體為例。
2. 定時(shí)/計(jì)數(shù)器程序需要考慮機(jī)械周期,STC系列1T單片機(jī)在默認(rèn)設(shè)置時(shí)與12T單片機(jī)性能兼容。
3. 定時(shí)/計(jì)數(shù)器程序在中斷處理時(shí)將不暫時(shí)關(guān)閉其他中斷。
[SFR中與定時(shí)/計(jì)數(shù)器工作方式有關(guān)的設(shè)計(jì)]
-----------------------------------------------------------------------------
M1 M0 方式 說明
0 0 0 13位T/C,由TL低5位和TH的8位組成13位計(jì)數(shù)器
0 1 1 16位T/C,TL和TH共16位計(jì)數(shù)器
1 0 2 8位T/C,TL用于計(jì)數(shù),當(dāng)TL溢出時(shí)將TH中的值自動(dòng)寫入TL
1 1 3 兩組8位T/C
-----------------------------------------------------------------------------
可將其模板下載到本地硬盤,在編寫新程序的時(shí)候復(fù)制、粘貼到工程當(dāng)中,然后根據(jù)情況寫入具體內(nèi)容。
|
|
相關(guān)帖子
- • 這是定義的問題嗎,用的c語言,怎么都改不對
- • adc_dma進(jìn)行采集時(shí)打印數(shù)據(jù)為0,不開dma數(shù)據(jù)能夠正常顯示,想問一下是什么原因
- • 單片機(jī)不使用外部中斷,如何LED顯示程序?
- • 做了個(gè)替BF7612CM的測試
- • Keil程序求助,這些報(bào)錯(cuò)怎么解決,小白一個(gè),剛接觸單片機(jī)
- • 求用at89c51單片機(jī)測LM331 V/F轉(zhuǎn)化后的頻率 我的沒有顯示
- • MCU模擬SPI通信,能發(fā)送數(shù)據(jù),接收不到數(shù)據(jù)
- • stm8s105k4單片機(jī)讀寫寄存器操作
- • 菜鳥求助 這個(gè)問題怎么解決,已經(jīng)在oledfont.h定義了 還是報(bào)錯(cuò)
- • STM32單片機(jī)向ESP8266發(fā)送指令,設(shè)置延時(shí)1秒上傳一次數(shù)據(jù),延時(shí)不準(zhǔn)確
- • 關(guān)于51單片機(jī)定時(shí)器計(jì)數(shù)不夠長的問題,想問問各位大佬有沒有什么思路
- • 單片機(jī)矩陣按鍵 原理圖+源代碼
- • 通過手機(jī)藍(lán)牙APP發(fā)出控制指令,控制3個(gè)以上LED燈亮滅和蜂鳴器報(bào)警和關(guān)閉,怎么做 求指導(dǎo)
- • 關(guān)于用51單片機(jī)驅(qū)動(dòng)AD9851的原理及其編程思路?
- • 單片機(jī)用點(diǎn)陣LED實(shí)現(xiàn)靜態(tài)字符顯示實(shí)驗(yàn)程序
- • 關(guān)于單片機(jī)矩陣鍵盤多位數(shù)的輸入程序問題
- • CCS10.2編譯器貌似不支持部分GNU的__attribute__
- • 單片機(jī)定時(shí)器/計(jì)數(shù)器問題求解答
- • STC15單片機(jī)+DS3231+DS18B20+DHT11+OLED12864+ESP8266_01S組成網(wǎng)絡(luò)時(shí)間 有待改善
- • 基于單片機(jī)的自行車?yán)锍瘫沓绦?大寫N到底是什么性質(zhì)的變量 在哪里聲明
|
|
|
|
|