?? mcs51.asm
字號:
ADDC A,B
MOV R4,A
SJMP $
;======================= 軟件實驗五 數據排序實驗 =========================
ORG 09B0H
QUE: MOV R3,#50H
QUE1: MOV A,R3 ;指針送R0
MOV R0,A
MOV R7,#0AH ;長度送R7
CLR 00H ;標志位為0
MOV A,@R0
QL2: INC R0
MOV R2,A
CLR C
MOV 22H,@R0
CJNE A,22H,QL3 ;相等嗎?
SETB C
QL3: MOV A,R2
JC QL1 ;大于交換位置
SETB 00H
XCH A,@R0
DEC R0
XCH A,@R0
INC R0 ;大于交換位置
QL1: MOV A,@R0
DJNZ R7,QL2
JB 00H,QUE1 ;一次循環中有交換繼續
SJMP $ ;無交換退出
;======================== 軟件實驗八 多分支程序 ==========================
ORG 0A10H
MEMS: MOV A,20H
MOV DPTR,#KKKK ;散轉首址
RL A ;(20)*2
JMP @A+DPTR ;轉到(20)*2+DPTR
KKKK: AJMP MEMSP0
AJMP MEMSP1
AJMP MEMSP2
SJMP MEMSP3
MEMSP0: MOV 20H,#0C0H ;0字循環
LJMP SOX0
MEMSP1: MOV 20H,#0F9H ;1字循環
LJMP SOX0
MEMSP2: MOV 20H,#0A4H ;2字循環
LJMP SOX0
MEMSP3: MOV 20H,#0B0H ;3字循環
LJMP SOX0
;==================== 軟件實驗六 查找相同數個數 ===========================
ORG 0AA0H
L5800: MOV R0,#10H ;查找16個字節
MOV R1,#00H
MOV DPTR,#2000H
L5811: MOVX A,@DPTR
CJNE A,#00H,L5816 ;取出內容與00H相等嗎?
INC R1 ;取出個數加1
L5816: INC DPTR
DJNZ R0,L5811 ;未完繼續
MOV DPTR,#2100H
MOV A,R1
MOVX @DPTR,A ;相同數個數送2100H
L581E: SJMP L581E
;===================== 硬件實驗八 簡單I/O口擴展 ==========================
ORG 0B80H
GOD0: MOV DPTR,#0FFE0H
MOVX A,@DPTR ;取出244狀態
MOV DPTR,#0FFE4H
MOVX @DPTR,A ;送273驅動發光二極管
SJMP GOD0
;==================== 硬件實驗七 8255控制交通燈 ==========================
ORG 0BB0H
JOD0: MOV SP,#60H
MOV DPTR,#0FFDBH
MOV A,#88H
MOVX @DPTR,A ;8255初始化
MOV DPTR,#0FFD8H
MOV A,#0B6H
MOVX @DPTR,A
INC DPTR
MOV A,#0DH
MOVX @DPTR,A ;點亮4個紅燈
MOV R2,#25H ;延時
LCALL DELY
JOD3: MOV DPTR,#0FFD8H
MOV A,#75H
MOVX @DPTR,A
INC DPTR
MOV A,#0DH
MOVX @DPTR,A ;東西綠燈亮,南北紅燈亮
MOV R2,#55H
LCALL DELY ;延時
MOV R7,#05H ;閃爍次數
JOD1: MOV DPTR,#0FFD8H
MOV A,#0F3H
MOVX @DPTR,A
INC DPTR
MOV A,#0CH
MOVX @DPTR,A ;東西黃燈亮,南北紅燈亮
MOV R2,#20H
LCALL DELY ;延時
MOV DPTR,#0FFD8H
MOV A,#0F7H
MOVX @DPTR,A
INC DPTR
MOV A,#0DH
MOVX @DPTR,A ;南北紅燈亮
MOV R2,#20H
LCALL DELY ;延時
DJNZ R7,JOD1 ;閃爍次數未到繼續
MOV DPTR,#0FFD8H
MOV A,#0AEH
MOVX @DPTR,A
INC DPTR
MOV A,#0BH
MOVX @DPTR,A ;東西紅燈亮,南北綠燈亮
MOV R2,#55H
LCALL DELY ;延時
MOV R7,#05H ;閃爍次數
JOD2: MOV DPTR,#0FFD8H
MOV A,#9EH
MOVX @DPTR,A
INC DPTR
MOV A,#07H
MOVX @DPTR,A ;東西紅燈亮,南北黃燈亮
MOV R2,#20H
LCALL DELY ;延時
MOV DPTR,#0FFD8H
MOV A,#0BEH
MOVX @DPTR,A
INC DPTR
MOV A,#0FH
MOVX @DPTR,A ;東西紅燈亮
MOV R2,#20H
LCALL DELY ;延時
DJNZ R7,JOD2 ;閃爍次數未到繼續
LJMP JOD3 ;循環
;==================== 硬件實驗二 P1口轉彎燈實驗 ====================
ORG 0C30H
PX00: MOV P1,#0FFH ;初始化
PX03: MOV A,P1
MOV B,A
ANL A,#03H
CJNE A,#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: CJNE A,#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 ;繼續
;================== 硬件實驗十六 步進電機控制 =========================
ORG 0CA0H
DOJ0: MOV SP,#53H
LCALL LEDP
DOJ6: LCALL X2 ;X1 ;調鍵掃顯示子程序(見軟件實驗十)
JB ACC.4,DOJ5
LCALL X3 ;調數字鍵處理子程序(見軟件實驗十)
DB 79H,7EH
SJMP DOJ6
DOJ5: CJNE A,#16H,DOJ6 ;不是執行鍵轉
MOV A,7AH
SWAP A
ORL A,79H
MOV R6,A ;低字節步距數送R6
MOV A,7CH
SWAP A
ORL A,7BH
MOV R7,A ;高字節步距數R7
MOV A,7EH
CJNE A,#00H,DOJ2 ;判轉動方向
DOJ1: MOV P1,#03H ;順時針轉動
LCALL DEL0Y
LCALL GGJ0
MOV P1,#06H
LCALL DEL0Y
LCALL GGJ0
MOV P1,#0CH
LCALL DEL0Y
LCALL GGJ0
MOV P1,#09H
LCALL DEL0Y
LCALL GGJ0
SJMP DOJ1
DOJ2: MOV P1,#09H ;逆時針轉動
LCALL DEL0Y
LCALL GGJ0
MOV P1,#0CH
LCALL DEL0Y
LCALL GGJ0
MOV P1,#06H
LCALL DEL0Y
LCALL GGJ0
MOV P1,#03H
LCALL DEL0Y
LCALL GGJ0
SJMP DOJ2
DEL0Y: MOV A,7DH ;根據(7D)內容改變延時時間
SWAP A
CLR C
RRC A
RRC A
MOV R2,A
DELY1: MOV R5,#01H
DEL1Y: LCALL DIS
DJNZ R5,DEL1Y
DJNZ R2,DELY1
RET
GGJ0: CJNE R7,#00H,GGJ1 ;步距數為0停止
CJNE R6,#00H,GGJ1 ;不為0減1后顯示
AJMP DOJ4
GGJ1: DJNZ R6,DOJ3
CJNE R7,#00H,DDJ8
DOJ4: LCALL DOJ7
SJMP DOJ4
DDJ8: DJNZ R7,DOJ3
AJMP DOJ4
DOJ3: LCALL DOJ7
RET
DOJ7: MOV R0,#79H
MOV A,R6
LCALL PTDS5
MOV A,R7
LCALL PTDS5
LCALL SSEE ;顯示
RET
PTDS5: MOV R1,A
ACALL PTDS6
MOV A,R1
SWAP A
PTDS6: ANL A,#0FH
MOV @R0,A
INC R0
RET
SSEE: SETB RS1 ;換工作區
MOV R5,#05H
SSE2: MOV 30H,#20H
MOV 31H,#7EH
MOV R7,#06H
SSE1: MOV R1,#0DDH
MOV A,30H
MOVX @R1,A ;字位送入
MOV R0,31H
MOV A,@R0
MOV DPTR,#DDFF
MOVC A,@A+DPTR ;取字形代碼
MOV R1,#0DCH
MOVX @R1,A ;字形送入
MOV A,30H ;右移
RR A
MOV 30H,A
DEC 31H
MOV A,#0FFH
MOVX @R1,A ;關顯示
DJNZ R7,SSE1 ;6位顯示完了嗎?
DJNZ R5,SSE2 ;5次顯示完了嗎?
CLR RS1
RET
;================= 軟件實驗十 電腦時鐘(定時器、中斷綜合實驗)=============
DDFF: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H
DB 88H,83H,0C6H,0A1H,86H,8EH,0FFH,0CH,89H,0DEH
ORG 0DA0H
SOX0: MOV A,20H
MOV R0,#0DCH
MOV R1,#0DDH
MOVX @R0,A
MOV A,#01H
SOX1: MOVX @R1,A
MOV R2,#20H
LCALL DELY
RL A ;顯示子程序
SJMP SOX1
ORG 0DC0H
ZO00: MOV TL0,#0B7H ;恢復初值
MOV TH0,#3CH ;0.1秒加1
INC 23H
MOV A,23H
CJNE A,#0AH,ZO01 ;1秒不到退出
MOV 23H,#00H
MOV 40H,TH1
MOV 41H,TL1 ;取出TH0.TL0內容
MOV TL1,#00H
MOV TH1,#00H ;重新計數
ZO01: RETI
ORG 0DF0H
LCK0: LCALL X2
JB ACC.4,LDFC
LCALL X3
DB 79H,7EH
SJMP LCK0
LDFC: CJNE A, #16H, LCK0
MOV A, 7AH
SWAP A
ORL A, 79H
MOV 22H, A
CJNE A, #60H, LE09
LE09: JNC LE24
MOV A, 7CH
SWAP A
ORL A, 7BH
MOV 21H, A
CJNE A, #60H, LE15
LE15: JNC LE24
MOV A, 7EH
SWAP A
ORL A, 7DH
MOV 20H, A
CJNE A, #24H, LE21
LE21: JNC LE24
RET
LE24: CLR 8CH
LJMP 0000H
DELYA: PUSH 02H
DELYB: PUSH 02H
DELYC: PUSH 02H
DELYD: DJNZ R2,DELYD
LCALL SSEE ;調顯示子程序
POP 02H
DJNZ R2,DELYC
POP 02H
DJNZ R2,DELYB
POP 02H
DJNZ R2,DELYA ;延時
RET
ORG 0E42H
L240: MOV R5,#0CH
LJMP L245 ;0字循環
L241: MOV R5,#9FH
LJMP L245 ;1字循環
L242: MOV R5,#4AH
L245: MOV R6,#08H ;2字循環
L246: MOV A,R6
MOV DPTR,#0FFE1H
MOVX @DPTR,A ;字位送入8279
MOV A,R5
MOV DPTR,#0FFE0H
MOVX @DPTR,A ;字形送入8279
MOV R2,#20H
LCALL DELY ;延時
MOV A,#0FFH
MOVX @DPTR,A ;關顯示
INC R6 ;下一位顯示
CJNE R6,#88H,L246
AJMP L245 ;不到最后一位繼續
;==================== 硬件實驗十七 8253方波 ========================
ORG 0EC0H
L8253: MOV DPTR,#0FFE3H
MOV A,#36H
MOVX @DPTR,A ;置8253工作方式
MOV DPTR,#0FFE0H
MOV A,#00H ;啟動8253方波程序
MOVX @DPTR,A
MOV A,#10H
MOVX @DPTR,A
SJMP $ ;結束
;================== 硬件實驗十五 繼電器控制 ==========================
ORG 0F00H
LOP3: CLR P1.0
MOV R2,#30H
LCALL DELY
SETB P1.0
MOV R2,#30H
LCALL DELY
SJMP LOP3
;--------------------------------
END
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -