; ; 本程式以P0到P3為輸出(查表法運用) ; ; 應用指令: ; BD虛指令用以定義資料 ; 間接資料指標暫存器DPTR之設定與索引定指法應用 ; 比較是否相等指令CJNE,若不等則跳躍 ; 暫存器累加1指令 ; ; 動作: LED逐一亮起後再逐一滅掉 ; 說明: 利用間接資料指標暫存器DPTR讀取資料庫之資料並顯示在各輸出埠上 ; ORG 00H JMP START ;規避00H至2FH間之中斷向量執行位址 ORG 30H ; MOV SP,#30H ;將堆疊指標重新指向 START: MOV A,#00 MOV P3,A ;輸出資料至埠3 CALL DELAY ;呼叫0.2秒延遲副程式 MOV P2,A ;輸出資料至埠2 CALL DELAY ;呼叫0.2秒延遲副程式 MOV P1,A ;輸出資料至埠1 CALL DELAY ;呼叫0.2秒延遲副程式 MOV P0,A ;輸出資料至埠0 CALL DELAY ;呼叫0.2秒延遲副程式 LOOP: MOV DPTR,#DAT ;載入資料DAT之位址至資料指標暫存器DPTR中 RT0: MOV A,#0 MOVC A,@A+DPTR ;載入DPTR所指位址之資料至累積器A中 MOV P0,A ;輸出資料至埠0 CALL DELAY ;呼叫0.2秒延遲副程式 INC DPTR ;將DPTR加1, 即用於指向下一筆資料 CJNE A,#FFH,RT0 ;比較A是否為值FFH, 若否則跳回RT0重新執行 RT1: MOV A,#0 MOVC A,@A+DPTR ;載入DPTR所指位址之資料至累積器A中 MOV P1,A CALL DELAY INC DPTR CJNE A,#FFH,RT1 RT2: MOV A,#0 MOVC A,@A+DPTR ;載入DPTR所指位址之資料至累積器A中 MOV P2,A CALL DELAY INC DPTR CJNE A,#FFH,RT2 RT3: MOV A,#0 MOVC A,@A+DPTR ;載入DPTR所指位址之資料至累積器A中 MOV P3,A CALL DELAY INC DPTR CJNE A,#FFH,RT3 RT4: MOV A,#0 MOVC A,@A+DPTR ;載入DPTR所指位址之資料至累積器A中 MOV P3,A ;輸出資料至埠3 CALL DELAY ;呼叫0.2秒延遲副程式 INC DPTR ;將DPTR加1, 即用於指向下一筆資料 CJNE A,#0,RT4 ;比較A是否為值0, 若否則跳回RT4重新執行 RT5: MOV A,#0 MOVC A,@A+DPTR ;載入DPTR所指位址之資料至累積器A中 MOV P2,A CALL DELAY INC DPTR CJNE A,#0,RT5 RT6: MOV A,#0 MOVC A,@A+DPTR ;載入DPTR所指位址之資料至累積器A中 MOV P1,A CALL DELAY INC DPTR CJNE A,#0,RT6 RT7: MOV A,#0 MOVC A,@A+DPTR ;載入DPTR所指位址之資料至累積器A中 MOV P0,A CALL DELAY INC DPTR CJNE A,#0,RT7 JMP LOOP DELAY: MOV R5,#10 D1: MOV R6,#40 D2: MOV R7,#249 DJNZ R7,$ DJNZ R6,D2 DJNZ R5,D1 RET DAT: DB 01H,03H,07H,0FH,1FH,3FH,7FH,FFH DB 01H,03H,07H,0FH,1FH,3FH,7FH,FFH DB 01H,03H,07H,0FH,1FH,3FH,7FH,FFH DB 01H,03H,07H,0FH,1FH,3FH,7FH,FFH DB 7FH,3FH,1FH,0FH,07H,03H,01H,00H DB 7FH,3FH,1FH,0FH,07H,03H,01H,00H DB 7FH,3FH,1FH,0FH,07H,03H,01H,00H DB 7FH,3FH,1FH,0FH,07H,03H,01H,00H END