⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mcs51.asm

📁 Keil中文版
💻 ASM
📖 第 1 页 / 共 3 页
字号:
        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 + -