5-8 光遮斷器控制實習
5-8 1 沒遮斷 0 有遮斷 1 沒遮斷 0 有遮斷
Program description 5_8_1 利用光遮斷器PH2控制馬達運轉,平常步進馬達正轉,當光遮斷器PH2被遮斷時,步進馬達變成反轉,遮斷解除時,又恢復正轉。 5_8_2 利用光遮斷器PH1做外部中斷1的觸發控制,平常步進馬達為正轉,當PH1被遮斷時則啟動外部中斷請求,令步進馬達反轉一圈後,再回復正轉。 5_8_1_1 將PH1輸出連接至T1 (利用短路套將JP3之bit 1和bit 2短路),利用PH1來控制步進馬達的正反轉。 5_8_1_2 設計一個單一LED點亮的廣告燈程式,當PH2被遮斷時, LED的變化為由左往右移動,當PH2未被遮斷時, LED的變化為由右至左移動。 5_8_2_1 利用PH1被遮斷時產生外部中斷請求,使步進馬達以原來1/2的轉速旋轉 2 圈後,再回復原來的轉速。
5-8-1 光遮斷器控制實習 (一)
Program 5_8_1 ORG 000H MOV A,#00110011B TEST: JB P3.4,TURNR ; to detect whether T0 = 1 or not ; comes here if T0 = 0 RL A ; for counterclockwise rotation MOV P2,A CALL DELAY JMP TEST ; comes here if T0 = 1 TURNR: RR A ; for clockwise rotation ;============================== ; DELAY 10mS DELAY: MOV R6,#20 DL1: MOV R7,#249 DJNZ R7,$ DJNZ R6,DL1 RET END
5-8-2 光遮斷器控制實習 (二)
Program 5_8_2 ORG 000H JMP MAIN ORG 013H JMP INT1 ORG 100H MAIN: MOV IE,#10000100B SETB IT1 MOV A,#00110011B NEXT: MOV P2,A CALL DELAY RR A JMP NEXT ;============================== INT1: CLR EA PUSH 6 ; push R6 PUSH 7 ; push R7 MOV R0,#200 NEXT_L MOV P2,A RL A DJNZ R0,NEXT_L POP 7 POP 6 SETB EA RETI ; DELAY 10mS DELAY: MOV R6,#20 DL1: MOV R7,#249 DJNZ R7,$ DJNZ R6,DL1 RET END
Question: Program 5-8-2 的DELAY副程式有用到R6和R7 ,因此interrupt service routine 一開始就須將R6, R7先暫存(用 PUSH 6和PUSh 7指令)。 Program 5-5-3的interrupt service routine 裡並不須如此,即使其DELAY副程式有用到R6和R7。 Why?