ժ Ҫ PIC單片機在國內日益流行,本文介紹Microchip PIC系列單片機開發過程中軟、硬體設計的一些經驗、技巧。 由美國Microchip公司生產的PIC系列單片機,由於其超小型、低功耗、低成本、多品種等特點,已廣泛應用於工業控制、儀器、儀錶、通信、家電、玩具等領域,本文總結了作者在PIC單片機開發過程中的一些經驗、技巧,供同行參考。 具體做法是在閑置的一個I/O腳(如RB1)和OSC1管腳之間跨接一電阻(R1),如圖1所示。低速狀態置RB1=0。需進行快速運算時先置RB1=1,由於充電時,電容電壓上升得快,工作頻率增高,運算時間減少,運算結束又置RB1=0,進入低速、低功耗狀態。工作頻率的變化量依R1的阻值而定(注意R1不能選得太小,以防振蕩電路不起振,一般選取大於5kΩ)。 圖1 提高工作頻率的方法 INTCON中的各中斷允許位對中斷狀態位並無影響。當PORT B配置成輸入方式時,RB<7:4>引腳輸入在每個讀操作周期被抽樣並與舊的鎖存值比較,一旦不同就產生一個高電平,置RBIF=1。在開RB中斷前,也許RBIF已置“1”,所以在開RB中斷時應先清RBIF位,以免受RBIF原值的影響,同時在中斷處理完成後最好是清RBIF位。 3 用Mplab-C高級語言寫PIC單片機程序時要注意的問題 3.1 程序中嵌入彙編指令時注意書寫格式 見例3。 例3 當內嵌彙編指令時,從“#asm”到“endasm”每條指令都必須各佔一行,否則編譯時會出錯。 3.2 加法、乘法的最安全的表示方法 見例4。 例4
原因是Mplab-C以8×8乘法方式來編譯c=a*b,返回單位元組結果給c,結果的溢出被忽略。改上例中的“c=a*b;”表達式為“c=a;c=c*b;”,最為安全(對加法的處理同上)。 3.3 了解乘除法函數對寄存器的佔用 由於PIC單片機片內RAM僅幾十個位元組,空間特別寶貴,而Mplab-C編譯器對RAM地址具有不釋放性,即一個變數使用的地址不能再分配給其它變數。如RAM空間不能滿足太多變數的要求,一些變數只能由用戶強制分配相同的RAM空間交替使用。而Mplab-C中的乘除法函數需借用RAM空間來存放中間結果,所以如果乘除法函數佔用的RAM與用戶變數的地址重疊時,就會導致出現不可預測的結果。如果C程序中用到乘除法運算,最好先通過程序機器碼的反彙編代碼(包含在生成的LST文件中)查看乘除法佔用地址是否與其它變數地址有衝突,以免程序跑飛。Mplab-C手冊並沒有給出其乘除法函數對具體RAM地址的佔用情況。例5是乘法函數對0×13、0×14、0×19、0×1A地址佔用情況。 例5
對無硬體模擬器的用戶,總是選用帶EPROM的晶元來調試程序。每更改一次程序,都是將原來的內容先擦除,再編程,其過程浪費了相當多的時間,又縮短了晶元的使用壽命。如果后一次編程的結果較前一次,僅是對應的機器碼位元組的相同位由“1”變成“0”,就可在前一次編程晶元上再次寫入數據,而不必擦除原片內容。 4 對晶元重複編程 1 怎樣進一步降低功耗
2 注意INTCON中的RBIF位 |
[admin via 研發互助社區 ] PIC單片機開發的若干問題已經有2745次圍觀
http://cocdig.com/docs/show-post-802.html