1. 程式人生 > >惠州學院-微控制器實驗2-P1口轉彎燈實驗

惠州學院-微控制器實驗2-P1口轉彎燈實驗

   計算機科學系實驗報告(首頁)

課程名稱

微控制器原理及應用

班級

14計2班

實驗名稱

P1口轉彎燈實驗

教導教師

王明安

姓名

張欽穎

學號

1414080901218

組號

17

日期

2016/10/20

             

 

一、實驗目的

進一步瞭解P1口的使用,學習組合語言程式設計方法及除錯技巧。

二、實驗目的

P1.0接開關上撥為5V,左轉彎燈閃亮,P1.1接開關為5V時右轉彎燈閃亮,P1.0,P1.1接開關同時接5V或接地時,轉彎燈均不閃亮。

三、實驗程式框圖

四、實驗原理圖


五、實驗步驟

1、P1.0 接開關K1,P1.1接開關K2,用雙頭線將P1.4~P1.7分別接到發光二極體L1、L2、L7、L8;

2、連續執行程式HW02.asm,撥動開關K1、K2,應看到轉彎燈正確閃亮;

3、再用單步方式除錯本程式時需修改延時子程式,(例可把延時程式第一個位元組改成返回指令22H),以便觀察。

 

五、實驗結果

程式原始碼

ORG 0000H
    LJMP PX00
    ORG 0080H
PX00:  MOV P1,#0FFH        ;初始化
PX03:   MOV A,P1
    MOV B,A
    ANL A,#03H
    CJNEA,#01H,PX01    ;滿足只是P1.0為高條件
    JB 00H,PX04         ;閃爍標誌位
    CLR P1.4
    CLR P1.5            ;開右燈
    SETB P1.6
    SETB P1.7           ;關左燈
    MOV R2,#20H
    LCALL DELY          ;延時
    SETB 00H            ;置標誌位
    LJMP PX03           ;繼續查詢狀態
PX04:  SETB P1.4
    SETB P1.5
    SETB P1.6
    SETB P1.7           ;關燈
    MOV R2,#20H
    LCALL DELY          ;延時
    CLR 00H             ;清標誌位
    AJMP PX03           ;繼續查詢狀態
PX01:  CJNEA,#02H,PX02    ;滿足只是P1.1為高條件嗎?
    JB 01H,PX05         ;判斷標誌位
    SETB P1.4
    SETB P1.5           ;開左燈
    CLR P1.6
    CLR P1.7            ;關右燈
    MOV R2,#20H
    LCALL DELY          ;延時
    SETB 01H            ;置標誌位
    LJMP PX03           ;繼續查詢
PX05:  SETB P1.4
    SETB P1.5
    SETB P1.6           ;關燈
    SETB P1.7
    MOV R2,#20H
    LCALL DELY          ;延時
    CLR 01H             ;置標誌位
    LJMP PX03           ;繼續查詢狀態
PX02:  SETB P1.4
    SETB P1.5
    SETB P1.6
    SETB P1.7           ;關燈
    LJMP PX03           ;繼續
   
DELY:  PUSH 02H            ;延時
DEL2:  PUSH 02H
DEL3:  PUSH 02H
DEL4:  DJNZ R2,DEL4
    POP 02H
    DJNZ R2,DEL3
    POP 02H
    DJNZ R2,DEL2
    POP 02H
    DJNZ R2,DELY
    RET
    END

實驗現象:在未撥動K1與K2開關時,P1各個LED燈不亮;當撥動開關K1,關閉開關K2時,P1左轉向燈亮(L1與L2);當關閉開關K1,撥動開關K2時,P1右轉向燈亮(L7與L8);當同時撥動開關K1與K2時,P1各個LED燈不亮。

實驗截圖

未撥動K1與K2開關


撥動開關K1,關閉開關K2


關閉開關K1,撥動開關K2


同時撥動開關K1與K2


更改程式原始碼

ORG 0000H
    LJMPPX00
    ORG0080H
PX00:   MOVP1,#0FFH        ;初始化
PX03:  MOV A,P1
    MOVB,A
    ANLA,#03H
    CJNEA,#01H,PX01    ;滿足只是P1.0為高條件
    JB00H,PX04         ;閃爍標誌位
    CLRP1.4
    CLRP1.5            ;開右燈
    SETBP1.6
    SETBP1.7           ;關左燈
    MOVR2,#80H
    LCALLDELY          ;延時
    SETB00H            ;置標誌位
    LJMPPX03           ;繼續查詢狀態
PX04:   SETBP1.4
    SETBP1.5
    SETBP1.6
    SETBP1.7           ;關燈
    MOV R2,#80H
    LCALLDELY          ;延時
    CLR00H             ;清標誌位
    AJMPPX03           ;繼續查詢狀態
PX01:   CJNEA,#02H,PX02    ;滿足只是P1.1為高條件嗎?
    JB01H,PX05         ;判斷標誌位
    SETBP1.4
    SETBP1.5           ;開左燈
    CLRP1.6
    CLRP1.7            ;關右燈
    MOV R2,#80H
    LCALLDELY          ;延時
    SETB01H            ;置標誌位
    LJMPPX03           ;繼續查詢
PX05:   SETBP1.4
    SETBP1.5
    SETBP1.6           ;關燈
    SETBP1.7
    MOV R2,#80H
    LCALLDELY          ;延時
    CLR01H             ;置標誌位
    LJMPPX03           ;繼續查詢狀態
PX02:   SETBP1.4
    SETBP1.5
    SETBP1.6
    SETBP1.7           ;關燈
    LJMPPX03           ;繼續
   
DELY:   PUSH02H            ;延時
DEL2:   PUSH02H
DEL3:   PUSH02H
DEL4:   DJNZR2,DEL4
    POP02H
    DJNZR2,DEL3
    POP02H
    DJNZR2,DEL2
    POP02H
    DJNZR2,DELY
    RET
   END

實驗現象:更改延時程式,是LED發光二極體閃亮時間改變。

 

五、實驗體會

此時實驗較為簡單,在按照電路圖連線,接著執行程式碼指令即可,但是修改程式,使得延時增加,LED發光二極體閃亮時間改變,就涉及到DJNZ這條令。DJNZ RN,REL 是一條件轉移指令,先將工作暫存器Rn中的數減“1”,判斷結果是否為“0”,不為“0”程式就跳轉到行標為REL的地方執行,否則,為“0”就不轉移,利用這條指令的功能修改增大R2暫存器變數的值,通過4個巢狀迴圈中使用DJNZ指令,這樣就能使得延時增加,LED發光二極體閃亮時間改變。