學(xué)習(xí)51單片機(jī)的基本調(diào)試經(jīng)驗(yàn)
一.單片機(jī)的組成:
CPU:由運(yùn)算和控制邏輯組成,同時(shí)還包括中斷系統(tǒng)和部分外部特殊功能寄存器;
RAM:用以存放可以讀寫(xiě)的數(shù)據(jù),如運(yùn)算的中間結(jié)果、最終結(jié)果以及欲顯示的數(shù)據(jù);
ROM:用以存放程序、一些原始數(shù)據(jù)和表格;
I/O口:四個(gè)8位并行I/O口,既可用作輸入,也可用作輸出;
T/C:兩個(gè)定時(shí)/記數(shù)器,既可以工作在定時(shí)模式,也可以工作在記數(shù)模式;
五個(gè)中斷源的中斷控制系統(tǒng);
一個(gè)全雙工UART(通用異步接收發(fā)送器)的串行I/O口,用于實(shí)現(xiàn)單片機(jī)之間或單片機(jī)與微機(jī)之間的串行通信;
片內(nèi)振蕩器和時(shí)鐘產(chǎn)生電路,石英晶體和微調(diào)電容需要外接。最高振蕩頻率取決于單片機(jī)型號(hào)及性能。
二、I 2C串行總線(xiàn)的組成及工作原理
一開(kāi)始出現(xiàn)燈沒(méi)有亮的現(xiàn)象,產(chǎn)生原因是在寫(xiě)信號(hào)和讀信號(hào)之間沒(méi)有延時(shí),添加delay1(100),注意此時(shí)間不能過(guò)短,然后在SDA及SCL的賦值后面也要添加delay1(1),此處時(shí)間似乎沒(méi)有多大限制。
三、I 2C串行總線(xiàn)的組成及工作原理-斷電保存顯示程序的調(diào)試
1. 現(xiàn)警告AT24C02有問(wèn)題,是由于編寫(xiě)時(shí)的輸入法問(wèn)題導(dǎo)致,此時(shí)應(yīng)該注意是在英文格式下輸入,另外數(shù)碼管的位置顯示不正確
2. LED顯示十位出現(xiàn)閃爍不穩(wěn)定現(xiàn)象,通過(guò)調(diào)整LED程序中的延遲時(shí)間現(xiàn)象得到一定緩解,但問(wèn)題仍然存在。若將值修改到很小則出現(xiàn)問(wèn)題3;
3. 顯示十位數(shù)字出現(xiàn)跟個(gè)位數(shù)字一樣的余輝?通過(guò)修改主函數(shù)中delay時(shí)間數(shù)問(wèn)題得到解決,但是數(shù)字仍閃爍。
四、時(shí)鐘程序
#include <>格式:引用標(biāo)準(zhǔn)庫(kù)頭文件,編譯器從標(biāo)準(zhǔn)庫(kù)目錄開(kāi)始搜索
#incluce ""格式:引用非標(biāo)準(zhǔn)庫(kù)的頭文件,編譯器從用戶(hù)的工作目錄開(kāi)始搜索
1. 液晶顯示秒位變化過(guò)慢?
問(wèn)題出現(xiàn)在while下面的if語(yǔ)句中寫(xiě)的是if(count==0),本應(yīng)為if(count==20)
2. 液晶顯示時(shí)間在有進(jìn)位的時(shí)候不正確,在開(kāi)始設(shè)置23:59:30走時(shí),顯示的卻是按23:59:00開(kāi)始走,并且在秒進(jìn)位后,分顯示的1,且時(shí)鐘也沒(méi)有進(jìn)位?
問(wèn)題原因:初始化顯示不成功,它是默認(rèn)按照00:00:00開(kāi)始走的;
解決問(wèn)題:初始化shi=23,fen=59,miao=30寫(xiě)在了display子函數(shù)中,應(yīng)該將其寫(xiě)在主函數(shù)中。
五、時(shí)鐘程序
1. 初步調(diào)試keyscan()沒(méi)反應(yīng),因?yàn)闆](méi)有將keyscan()寫(xiě)在大循環(huán)while(1)下
2. keyscan中if(s1num!=0)應(yīng)寫(xiě)在與if(s1==0)平級(jí)的地方,如果寫(xiě)在if(s1==0)里頭,將會(huì)出現(xiàn)要同時(shí)按兩個(gè)鍵才會(huì)有變化,顯然不符合要求,故不響應(yīng)。
3. keyscan中miao.fen,shi,應(yīng)該是在為-1的情況下再置為0,而開(kāi)頭把miao.fen,shi設(shè)置的是uchar型,故應(yīng)改為char型。
4. 寫(xiě)完年月日顯示函數(shù)后,在日期有進(jìn)位的情況下,在23;59;59;進(jìn)位時(shí),產(chǎn)生花屏現(xiàn)象,估計(jì)是地址指針寫(xiě)完數(shù)據(jù)后沒(méi)有及時(shí)設(shè)置的問(wèn)題?有待解決?
問(wèn)題出在自己寫(xiě)的年月日函數(shù),不能正常讀取數(shù)據(jù)?將寫(xiě)數(shù)據(jù)函數(shù)寫(xiě)成了寫(xiě)命令函數(shù),即將lcdwrite_date()寫(xiě)成了lcdwrite_date();改后能顯示出年月日,但是年份顯示時(shí)間不正確。
年份是四位數(shù),用uchar型顯然無(wú)法正確表達(dá),應(yīng)改用unsigned long型,并且在write_nian()函數(shù)中也應(yīng)該注意到date類(lèi)型也應(yīng)該為unsigned long型;
六、萬(wàn)年歷時(shí)鐘程序
1. 初始化后,初步調(diào)試年月日進(jìn)位成功。
2. 分開(kāi)寫(xiě)大小月的時(shí)候調(diào)試出現(xiàn)問(wèn)題,光標(biāo)在秒位上不斷地閃爍且不移動(dòng)?看完全文了嗎?喜歡就一起來(lái)點(diǎn)個(gè) 贊 吧!
編輯:admin 最后修改時(shí)間:2018-05-19