; ; 本程式以P0到P3為輸出 ; ; 應用指令: ; 旋轉指令RL ; 互斥或指令XRL ; 包括進位旗標之右旋轉指令RLC ; 邏輯相反指令CPL ; ; 動作: 當LED全亮時則逐點暗掉,當LED全暗時則逐點亮起 ; 說明: 暫存器R0用以控制P0到P3為全亮或全暗,R1用以控制目前掃描的位置 ; ORG 00H JMP START ;規避00H至2FH間之中斷向量執行位址 ORG 30H ; MOV SP,#30H ;將堆疊指標重新指向 MOV A,#00H MOV P3,A ;輸出資料至埠3 CALL DELAY MOV P2,A ;輸出資料至埠2 CALL DELAY MOV P1,A ;輸出資料至埠1 CALL DELAY MOV P0,A ;輸出資料至埠0 CALL DELAY START: MOV A,#01H RT0: MOV R1,A XRL A,P0 ;與埠0執行互斥或 MOV P0,A ;輸出資料至埠0 CALL DELAY ;呼叫0.2秒延遲副程式 MOV A,R1 CLR C ;清除進位旗標 RLC A ;與進位旗標一起向左旋轉 JNC RT0 ;若進位旗標不為0則跳回再次執行 MOV A,#01H RT1: MOV R1,A XRL A,P1 ;與埠1執行互斥或 MOV P1,A ;輸出資料至埠1 CALL DELAY ;呼叫0.2秒延遲副程式 MOV A,R1 CLR C ;清除進位旗標 RLC A ;與進位旗標一起向左旋轉 JNC RT1 ;若進位旗標不為0則跳回再次執行 MOV A,#01H RT2: MOV R1,A XRL A,P2 ;與埠2執行互斥或 MOV P2,A ;輸出資料至埠2 CALL DELAY ;呼叫0.2秒延遲副程式 MOV A,R1 CLR C ;清除進位旗標 RLC A ;與進位旗標一起向左旋轉 JNC RT2 ;若進位旗標不為0則跳回再次執行 MOV A,#01H RT3: MOV R1,A XRL A,P3 ;與埠3執行互斥或 MOV P3,A ;輸出資料至埠3 CALL DELAY ;呼叫0.2秒延遲副程式 MOV A,R1 CLR C ;清除進位旗標 RLC A ;與進位旗標一起向左旋轉 JNC RT3 ;若進位旗標不為0則跳回再次執行 JMP START DELAY: MOV R5,#10 ;延遲時間約為 R5*20 mS D1: MOV R6,#40 D2: MOV R7,#249 DJNZ R7,$ DJNZ R6,D2 DJNZ R5,D1 RET END