新聞中心

EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 都是main()函數(shù)的循環(huán)執(zhí)行惹的禍題

都是main()函數(shù)的循環(huán)執(zhí)行惹的禍題

作者: 時(shí)間:2016-11-29 來(lái)源:網(wǎng)絡(luò) 收藏
就在今天好好的一個(gè)程序,語(yǔ)發(fā)基本上都沒有任何錯(cuò)誤,和官方的資料都對(duì)照了也沒有什么問(wèn)題但是原本好好的程序就是定時(shí)器打不開了。為什么呢?今天又大概6個(gè)小時(shí)的時(shí)間都浪費(fèi)在這個(gè)不起眼的自己曾經(jīng)不知道也沒注意的問(wèn)題上。

首先我跟大家說(shuō)下我的一下代碼需要實(shí)現(xiàn)的功能,非常簡(jiǎn)單就是在定時(shí)其溢出也就是進(jìn)入中斷之后單片機(jī)通過(guò)串口給我的上位機(jī)發(fā)送一個(gè)驗(yàn)證字符H55,但是調(diào)試了一個(gè)下午就是沒法實(shí)現(xiàn)。大家先看看以下程序!

本文引用地址:http://m.butianyuan.cn/article/201611/323504.htm
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);}}//------------------定時(shí)器0初始化函數(shù)----------------------------void timer0_init(void){EA=1;ET0  =1    ;TR0  =1    ;AUXR|=0X80;TMOD|=0x01;TH0  =0x00;TL0   =0x00;   }//------------------定時(shí)器0中斷服務(wù)函數(shù)----------------------------void timer0() interrupt 1{TH0  =0xff;TL0   =0x00;uart_send(0x55);    }

相信大家程序也看完了,我敢保證單片機(jī)C編程基礎(chǔ)比較差的肯定找不這問(wèn)題的所在!其實(shí)整個(gè)程序的問(wèn)題主要是出在主函數(shù)沒有一個(gè)while(1);死循環(huán)而程序一直循環(huán)執(zhí)行主函數(shù)循環(huán)一次的時(shí)間小于定時(shí)器的定時(shí)時(shí)間00~65536,故而每次循環(huán)都會(huì)給定時(shí)器的高低八位重新初始化賦值h00、h00,所以導(dǎo)致定時(shí)器一直無(wú)法溢出去執(zhí)行定時(shí)器中斷函數(shù)。相信我說(shuō)道這里單價(jià)應(yīng)該明白怎么回事了吧!
以本人所犯之錯(cuò),希望大家引以為戒?。?!



關(guān)鍵詞: main循環(huán)執(zhí)

評(píng)論


技術(shù)專區(qū)

關(guān)閉