實驗前的準備:
MPLAB IDE v8.80 (http://pan.baidu.com/s/1qWwhONM )
Pickit 2 Programmer/Debugger v2.61(http://pan.baidu.com/s/1jGC9ei6)
閱讀PIC16F886的datasheet (http://pan.baidu.com/s/1sjrwgmp)
要求:
1,用匯編語言寫程序,使LED燈閃動。
2,記錄問題
3,軟件仿真
我做出來的結果:使LED燈亮,但還不會閃動。
MPLAB IDE 建工程的過程參考:
PIC教程3-點亮LED②軟件 http://wenku.baidu.com/link?url= ... PCXy1DP0C3GKSt6YQI3
MPLAB教程(http://pan.baidu.com/s/1ntNstG9)
PICKIT使用參考:
PICkit2 User Guide 51553E (http://pan.baidu.com/s/1kT1HGX5)
我的代碼 :
;LED.asm
LIST p=16f886
INCLUDE p16f886.inc
ORG 0x00
BANKSEL TRISC
CLRF TRISC
CLRF STATUS
MOVLW B'00001111'
MOVWF PORTC
END
我的LED燈接到RC3上,亮。
不理解的地方:
PICKIT 2中選擇5V on ,測得Vdd=4.2V,萬用表直流電壓檔測得PIN RC3 是2.7V ,示波器測時發現RC3引腳是頻率是50Hz,幅值是2.7V的正方波。。。神啊,求解釋。。。真心不理解。。。
1,在只要求結果而先驗知識為0的情況下應當選擇風險最小、不可控因素最少的道路。硬件要最簡單(最小系統),軟件要最簡單(盡可能少寫指令,軟件對器件資源的依賴盡可能少)。要用最簡單的方法解決問題。讓風險可控。
2,MPLAB IDE安裝漏選Pickit2支持選項
LED與電阻
下載器連接
防止外部電路對編程信號的影響和編程信號對外部電路的影響,單片機功能配置位CONFIG1,CONFIG2
PIC內部組織形式
BANKSEL PORTC
=>BCF STATUS,RP1
BCFSTATUS,RP0
盡量把同一分區的操作放在一起,以減少編譯器生成的代碼量
端口操作要設置為輸出方式
延時程序段
PIC匯編變量存放在哪里?判斷跳轉指令可以用跳轉
incf xxx,w
incf xxx,f
symbol not previously defined
movwf TRISC 錯誤
#include p16f886.inc
訪問SFR實際是對某一地址的訪問
TRISC EQU H'0087'
尋址方式
立即數尋址:操作數直接放在指令中
movlw 0x55(PORTA s實際放得是PORTA的地址,不要指望放變量)
直接尋址
操作數地址直接在指令當中
movwf 0x55
間接尋址
操作數地址放在寄存器中
引用寄存器簡介訪問 INDF
為什么會遇到錯誤?
pickit2下載不穩定:有時會成功,有時不能成功——一切皆有可能,錯誤可能性排序,一一排除
參考資料:勘誤表 PIC16F882/883/886/887 FamilySilicon Errata and Data Sheet Clarification
LVP編程:LVP enable 時RB3編程指示位高進入編程狀態。LVP默認為低,enable.RB3低正常工作,高編程。CMOS工藝不能把輸入懸空。允許LVP功能,則PB3引腳在運行時不能為高或懸空。
完善實驗一
復現以前的錯誤,找到唯一的原因。
做實驗的額目的在于找到所有可能的錯誤,搞清楚不確定的問題。
|