就在今天好好的一個程序,語發(fā)基本上都沒有任何錯誤,和官方的資料都對照了也沒有什么問題但是原本好好的程序就是定時器打不開了。為什么呢?今天又大概6個小時的時間都浪費在這個不起眼的自己曾經(jīng)不知道也沒注意的問題上。
首先我跟大家說下我的一下代碼需要實現(xiàn)的功能,非常簡單就是在定時其溢出也就是進入中斷之后單片機通過串口給我的上位機發(fā)送一個驗證字符H55,但是調(diào)試了一個下午就是沒法實現(xiàn)。大家先看看以下程序!
void main(void) { main_init(); } //-----------------主函數(shù)初始化------------------------------------ void main_init(void) { EA=1;//開總中斷 uart_init(); timer0_init(); } //-------------------串行口中斷-------------------------- void uart_rec() interrupt 4 { if(RI) { RI=0; Uart_RD=SBUF; uart_send(Uart_RD); } } //------------------定時器0初始化函數(shù)---------------------------- void timer0_init(void) { EA=1; ET0 =1 ; TR0 =1 ; AUXR|=0X80; TMOD|=0x01; TH0 =0x00; TL0 =0x00; } //------------------定時器0中斷服務(wù)函數(shù)---------------------------- void timer0() interrupt 1 { TH0 =0xff; TL0 =0x00; uart_send(0x55); }
相信大家程序也看完了,我敢保證單片機C編程基礎(chǔ)比較差的肯定找不這問題的所在!其實整個程序的問題主要是出在主函數(shù)沒有一個while(1);死循環(huán)而程序一直循環(huán)執(zhí)行主函數(shù)循環(huán)一次的時間小于定時器的定時時間00~65536,故而每次循環(huán)都會給定時器的高低八位重新初始化賦值h00、h00,所以導(dǎo)致定時器一直無法溢出去執(zhí)行定時器中斷函數(shù)。相信我說道這里單價應(yīng)該明白怎么回事了吧!
以本人所犯之錯,希望大家引以為戒!!!