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

📄 mcs51.asm

📁 Keil中文版
💻 ASM
📖 第 1 页 / 共 3 页
字号:
XX1:    MOV R6,A
        MOV A,R7
        MOV @R0,A
        MOV A,R6
XX0:    RET
XLE:    ACALL DIS
        ACALL KEY
        MOV R4,A
        MOV R1,#48H
        MOV A,@R1
        MOV R2,A
        INC R1
        MOV A,@R1
        MOV R3,A
        MOV A,R4
        XRL A,R3
        MOV R3,04H
        MOV R4,02H
        JZ X10
        MOV R2,#88H
        MOV R4,#88H
X10:    DEC R4
        MOV A,R4
        XRL A,#82H
        JZ X11
        MOV A,R4
        XRL A,#0EH
        JZ X11
        MOV A,R4
        JZ X12
        MOV R4,#20H
        DEC R2
        SJMP X13
X12:    MOV R4,#0FH
X11:    MOV R2,04H
	NOP
	NOP
        MOV R4,03H
X13:    MOV R1,#48H
        MOV A,R2
        MOV @R1,A
        INC R1
        MOV A,R3
        MOV @R1,A
        MOV A,R4
        JB ACC.5,X113
	JB ACC.4,X113
	MOV DPTR,#LS3
	MOVC A,@A+DPTR
X113:   RET
LS3:    DB 07H,04H,08H,05H,09H,06H,0AH
        DB 0BH,01H,00H,02H,0FH,03H,0EH
        DB 0CH,0DH
DIS:    PUSH DPH
        PUSH DPL
        SETB RS1
        MOV R0,#7EH
        MOV R2,#20H
        MOV R3,#00H
        MOV DPTR,#LS0
LS2:    MOV A,@R0
        MOVC A,@A+DPTR
        MOV R1,#0DCH
        MOVX @R1,A
        MOV A,R2
        inc R1
        MOVX @R1,A
LS1:    DJNZ R3,LS1
        CLR C
        RRC A
        MOV R2,A
        DEC R0
        JNZ LS2
        movx @r0,a
	dec r0
	cpl a
	movx @r0,a
        CLR RS1
        POP DPL
        POP DPH
        RET
LS0:    DB 0C0H,0F9H,0A4H,0B0H,99H,92H
        DB 82H,0F8H,80H,90H,88H,83H,0C6H
        DB 0A1H,86H,8EH,0FFH,0CH,89H,7FH,0BFH
KEY:    SETB RS1
        MOV R2,#0FEH
        MOV R3,#08H
        MOV R0,#00H
LP1:    MOV R1,#0DDH
        MOV A,R2
        MOVX @R1,A
        RL A
        MOV R2,A
        inc r1
        MOVX A,@R1
        CPL A
        ANL A,#0FH
        JNZ LP0
        INC R0
        DJNZ R3,LP1
XP33:   MOV A,#20H
XP3:    mov r2,a
	clr a
	mov r1,#0ddh
	movx @r1,a
	mov a,r2
        CLR RS1
        RET
LP0:    CPL A
        JB ACC.0,XP0
        MOV A,#00H
        SJMP LPP
XP0:    JB ACC.1,XP1
        MOV A,#08H
        SJMP LPP
XP1:    JB ACC.2,XP2
        MOV A,#10H
        SJMP LPP
XP2:    JB ACC.3,XP33
        MOV A,#18H
LPP:    ADD A,R0
        sjmp xp3
;--------------------------------
LEDP:   MOV 50H,#7EH
	  MOV A,#10H
	  MOV R0,#79H
LEDS:	  MOV @R0,A
	  INC R0
	  CJNE R0,#7EH,LEDS
	  INC A
	  MOV @R0,A
	  RET	


;===================== 硬件实验五  8255 A.B.C口输出方波 ===================
        ORG 0580H
SE09:   MOV DPTR,#0FFDBH
        MOV A,#80H
        MOVX @DPTR,A            ;8255初始化
        MOV A,#55H              ;一位隔一位高电平
LO15:   MOV DPTR,#0FFD8H
        MOVX @DPTR,A
        INC DPTR
        MOVX @DPTR,A
        INC DPTR
        MOVX @DPTR,A            ;A.B.C口送入
        MOV R2,#40H             ;延时
        LCALL DELY
        CPL A                   ;取反
        SJMP LO15               ;循环


;=================== 硬件实验九  A/D转换实验 ========================
        ORG 05A0H
SE11:   MOV SP,#53H
        MOV 7EH,#00H
        MOV 7DH,#08H
        MOV 7CH,#00H
        MOV 7BH,#09H
        MOV 7AH,#10H
        MOV 79H,#10H            ;显示缓冲区初值
LO18:   LCALL DIS	;SSEE              ;显示
        MOV A,#00H
        MOV DPTR,#0FFE0H
        MOVX @DPTR,A            ;0809的0通道采样
        LCALL DIS	;SSEE
        MOVX A,@DPTR            ;取出采样值
        MOV R0,#79H
        LCALL PTDS              ;采样值送显示缓冲区
        SJMP LO18               ;循环


;===================== 硬件实验十  D/A转换实验 =========================
        ORG 05E0H
SE13:   MOV SP,#53H
        MOV 7EH,#00H
        MOV 7DH,#08H
        MOV 7CH,#03H
        MOV 7BH,#02H            ;显示缓冲区初值
LO20:   MOV R6,#00H
LO21:   MOV DPTR,#0FFE0H
        MOV A,R6
        MOVX @DPTR,A            ;送0832转换
        MOV R0,#79H
        LCALL PTDS
        MOV R2,#10H
L023:   LCALL DIS              ;显示
        DJNZ R2,L023
        INC R6                  ;加1
        CJNE R6,#0FFH,LO21      ;不到FF继续加
LO22:   MOV DPTR,#0FFE0H
        DEC R6
        MOV A,R6
        MOVX @DPTR,A            ;减1送0832转换
        MOV R0,#79H
        LCALL PTDS
        MOV R2,#10H
L024:   LCALL DIS              ;显示
        DJNZ R2,L024
        CJNE R6,#00H,LO22       ;不为0继续减
        SJMP LO20               ;循环



;==================== 软件实验一  清零程序 ==============================
        ORG 0640H
SE01:   MOV R0,#00H
        MOV DPTR,#2000H         ;(0000H)送DPTR
LOO1:   CLR A
        MOVX @DPTR,A            ;0送(DPTR)
        INC DPTR                ;DPTR+1
        INC R0                  ;字节数加1
        CJNE R0,#00H,LOO1       ;不到FF个字节再清
LOOP:   SJMP LOOP

;=================== 软件实验二  拆字程序 ===========================
        ORG 0660H
SE02:   MOV DPTR,#2000H
        MOVX A,@DPTR
        MOV B,A         ;(2000)→A→B
        SWAP A                  ;交换
        ANL A,#0FH              ;屏敝高位
        INC DPTR
        MOVX @DPTR,A            ;送2001H
        INC DPTR
        MOV A,B
        ANL A,#0FH              ;(2000)内容屏敝高位
        MOVX @DPTR,A            ;送2002H
        SJMP $

;=================== 软件实验三  拼字程序 ==============================
        ORG 0680H
SE03:   MOV DPTR,#2000H
        MOVX A,@DPTR
        ANL A,#0FH              ;(2000H)内容屏敝高位
        SWAP A                  ;交换
        MOV B,A         ;保存
        INC DPTR
        MOVX A,@DPTR            ;(2001H)内容送A
        ANL A,#0FH              ;屏敝高位
        ORL A,B                 ;或
        INC DPTR
        MOVX @DPTR,A            ;送2002H
        SJMP $

;=================== 软件实验九  脉冲计数(定时/计数器实验)===============
        ORG 06E0H
SE15:   MOV SP,#53H
        MOV TMOD,#05H
        MOV TH0,#00H
        MOV TL0,#00H            ;定时计数器初始化
        SETB TR0                ;开计数器
LO29:   MOV R2,TH0
        MOV R3,TL0              ;取出TH0.TL0内容
        LCALL ZOY0              ;二转十进制
        MOV R0,#79H
        MOV A,R6
        LCALL PTDS
        MOV A,R5
        LCALL PTDS
        MOV A,R4
        LCALL PTDS              ;送显示缓冲区
        LCALL SSEE              ;显示
        SJMP LO29               ;循环计数.显示
ZOY0:   CLR A
        MOV R4,A
        MOV R5,A
        MOV R6,A                ;0送R4 R5 R6
        MOV R7,#10H
LO30:   CLR C                   ;R2 R3左移.移出的
        MOV A,R3                ;最高位送CY
        RLC A
        MOV R3,A
        MOV A,R2
        RLC A
        MOV R2,A
        MOV A,R6
        ADDC A,R6               ;(R4 R5 R6)*2+CY送R4 R5 R6
        DA A                    ;十进制调整
        MOV R6,A
        MOV A,R5
        ADDC A,R5
        DA A
        MOV R5,A
        MOV A,R4
        ADDC A,R4
        DA A
        MOV R4,A
        DJNZ R7,LO30            ;循环16次
        RET

;------------------------------------------------------------------------
        ORG 0730H
SE16:   MOV SP,#53H
        MOV TMOD,#51H
        MOV TH0,#3CH
        MOV TL0,#0B7H
        MOV TL1,#00H
        MOV TH1,#00H            ;定时器.0计数器1初始化
        MOV 23H,#00H
        ORL IE,#82H
        MOV TCON,#50H           ;开定时中断
LO31:   MOV R2,40H
        MOV R3,41H              ;计数脉冲取出
        LCALL ZOY0              ;转换
        MOV R0,79H
        MOV A,R6
        LCALL PTDS
        MOV A,R5
        LCALL PTDS
        MOV A,R4
        LCALL PTDS              ;送显示缓冲区
        LCALL SSEE              ;显示
        SJMP LO31

;==================== 硬件实验六  8255 PA口控制PB口 =====================
        ORG 0770H
SE17:   MOV DPTR,#0FFDBH
        MOV A,#90H
        MOVX @DPTR,A            ;8255初始化
LO32:   MOV DPTR,#0FFD8H
        MOVX A,@DPTR            ;PA口状态取出
        INC DPTR
        MOVX @DPTR,A            ;送PB口
        SJMP LO32
        ORG 0790H
SE18:   MOV P1,#0FFH            ;送P1口
LO34:   MOV A,#0FEH             ;L1发光二极管点亮
LO33:   MOV P1,A
        LCALL SE19              ;延时
        RL A                    ;左移位
        SJMP LO33               ;循环
        ORG 07A0H
SE19:   MOV R6,#0A0H
LO36:   MOV R7,#0FFH
LO35:   DJNZ R7,LO35
        DJNZ R6,LO36            ;延时
        RET

;==================== 软件实验四  数据区传送子程序 =====================
        ORG 07B0H
SE22:   MOV DPL,R3
        MOV DPH,R2              ;建立源程序首址
        MOVX A,@DPTR            ;取数
        MOV DPL,R5
        MOV DPH,R4              ;目的地首址
        MOVX @DPTR,A            ;传送
        CJNE R3,#0FFH,LO42
        INC R2
LO42:   INC R3                  ;源地址加1
        CJNE R5,#0FFH,LO43
        INC R4
LO43:   INC R5                  ;目地址加1
        CJNE R7,#00H,LO44
        CJNE R6,#00H,LO45       ;字节数减1
        SJMP $
        NOP
LO44:   DEC R7
        SJMP SE22
LO45:   DEC R7
        DEC R6
        SJMP SE22               ;未完继续


;=================== 硬件实验三  P3.3口输入,P1口输出 =====================
        ORG 0810H
J100:   MOV A,#00H
J101:   JB P3.3,J101
        MOV R2,#20H
        LCALL DELY
        JB P3.3,J101            ;P3.3电平为低吗?
J102:   JNB P3.3,J102
        MOV R2,#20H
        LCALL DELY
        JNB P3.3,J102           ;P3.3电平高吗?
        INC A                   ;加1
        PUSH ACC
        CPL A                   ;取反
        MOV P1,A                ;驱动发光二极管
        POP ACC
        AJMP J101               ;循环
        
;=================== 软件实验七  无符号双字节快速乘法子程序 ================
        ORG 0970H
QKUL:   MOV A,R3
        MOV B,R7
        MUL AB                  ;R3*R7
        XCH A,R7                ;R7=(R3*R7)低字节
        MOV R5,B                ;R5=(R3*R7)高字节
        MOV B,R2
        MUL AB                  ;R2*R7
        ADD A,R5
        MOV R4,A
        CLR A
        ADDC A,B
        MOV R5,A                ;R5=(R2*R7)高字节
        MOV A,R6
        MOV B,R3
        MUL AB                  ;R3*R6
        ADD A,R4
        XCH A,R6
        XCH A,B
        ADDC A,R5
        MOV R5,A
        MOV PSW.5,C             ;存CY
        MOV A,R2
        MUL AB                  ;R2*R6
        ADD A,R5
        MOV R5,A
        CLR A
        MOV ACC.0,C
        MOV C,PSW.5             ;加上次加法的进位

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -