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