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

📄 单片机最小系统.asm

📁 一个MCS51单片机的最小系统的源代码,可以实现51最小系统的大部分功能
💻 ASM
字号:
KEYIN:  JNB SSET,KEYIN1  ;判断SET键是否按下
        ACALL DELAY1    ;延时去抖动
        JNB SSET,KEYIN1   
        JB  SSET,$ ;判断SET键是否松开
        INC  FLASH		   ;SET键按下调整闪烁标志位
        MOV R7,FLASH
        CJNE R7,#17,KEYIN1;判断FLASH是否已经移出16位
        MOV  FLASH,#0H
KEYIN1: MOV TEMP1,R0
        JNB SSUB,KEYIN2;判断减键是否按下
        ACALL DELAY1;延时去抖动
        JNB SSUB,KEYIN2 
        JB  SSUB,$ ;判断减键是否松开
        MOV A,FLASH
        ADD A,#60H
        MOV R0,A
        DEC @R0;减键按下修改数据缓冲区对应位的值
        CJNE @R0,#0FFH,KEYIN2
        MOV @R0,#0BH
KEYIN2: JNB AADD,KEYIN3;判断加键是否按下
        ACALL DELAY1;延时去抖动
        JNB AADD,KEYIN3
        JB  AADD,$ ;判断加键是否松开
        MOV A,FLASH
        ADD A,#60H
        MOV R0,A
        INC @R0; 加键按下修改数据缓冲区对应位的值
        CJNE @R0,#0CH,KEYIN3
        MOV @R0,#0
KEYIN3: MOV R0,TEMP1
        RET

显示子程序:

DISP:   MOV   A,@R0
        ACALL TAB;查表取得由第一片74LS573送出的段代码的值
        ACALL SEGU9;调用第一片74LS573数据锁存子程序
        MOV   A,@R1
        ACALL TAB1;查表取得由第二片74LS573送出的段代码的值
        ACALL SEGU10;调用第二片74LS573数据锁存子程序
        INC R0;调整显缓指针
        INC R1;调整显缓指针
        ACALL SENDBIT;调用位选子程序点亮16位7段LED中的两位
        ACALL DELAY;延时
        CJNE R0,#58H,DISP;判断是否已完成16位显示
        MOV R0,#50H;显缓指针付初值
        MOV R1,#58H;显缓指针付初值
        RET
主程序:
FLAG      EQU 20H
FG1       BIT FLAG.0
FG2       BIT FLAG.1
DATABUF1  EQU 60H
DATABUF2  EQU 61H
DATABUF3  EQU 62H
DATABUF4  EQU 63H
DATABUF5  EQU 64H
DATABUF6  EQU 65H
DATABUF7  EQU 66H
DATABUF8  EQU 67H
DATABUF9  EQU 68H
DATABUF10 EQU 69H
DATABUF11 EQU 6AH
DATABUF12 EQU 6BH
DATABUF13 EQU 6CH
DATABUF14 EQU 6DH
DATABUF15 EQU 6EH
DATABUF16 EQU 6FH
FLASH     EQU 70H ;
TEMP0     EQU 71H
TEMP1     EQU 72H
TEMP2     EQU 73H
TEMP3     EQU 74H
TEMP4     EQU 75H
SSET      BIT P3.0; SET键
AADD      BIT P1.7; 加键
SSUB      BIT P1.6; 减键

ORG   0000H
     AJMP  MAIN
ORG   0030H

MAIN:   CLR C
        SETB FG1
        MOV R0,#50H
        MOV R1,#58H
        MOV TEMP0,#0
        MOV TEMP2,#40
        MOV FLASH,#16
        MOV DATABUF1,#2
        MOV DATABUF2,#0
        MOV DATABUF3,#0
        MOV DATABUF4,#5
        MOV DATABUF5,#0BH
        MOV DATABUF6,#0
        MOV DATABUF7,#3
        MOV DATABUF8,#0BH
        MOV DATABUF9,#0
        MOV DATABUF10,#9
        MOV DATABUF11,#0BH
        MOV DATABUF12,#0
        MOV DATABUF13,#2
        MOV DATABUF14,#0BH
        MOV DATABUF15,#5
        MOV DATABUF16,#0
MAIN1:  ACALL KEYIN
        ACALL GETDATA
        MOV   A,FLASH
        CJNE  A,#16,MAIN4
        AJMP  MAIN3
MAIN4:  DJNZ  TEMP2,MAIN2
        MOV   TEMP2,#60
        CPL   FG1
MAIN2:  JB    FG1,MAIN3
        MOV   A,FLASH
        ADD   A,#50H
        MOV   R0,A
        MOV   @R0,#0AH
        MOV   R0,#50H
MAIN3:  ACALL DISP
        AJMP  MAIN1

GETDATA:MOV   TEMP3,R0
        MOV   TEMP4,R1
        MOV   R0,#50H  ;//显缓
        MOV   R1,#60H
NEXT:   MOV   A,@R1
        MOV   @R0,A
        INC   R0
        INC   R1
        CJNE  R0,#60H,NEXT
        MOV   R0,TEMP3
        MOV   R1,TEMP4
        RET

DISP:   MOV   A,@R0
        ACALL TAB
        ACALL SEGU9
        MOV   A,@R1
        ACALL TAB1
        ACALL SEGU10
        INC R0
        INC R1
        ACALL SENDBIT
        ACALL DELAY
        CJNE R0,#58H,DISP
        MOV R0,#50H
        MOV R1,#58H
        RET

KEYIN:  JNB SSET,KEYIN1
        ACALL DELAY1
        JNB SSET,KEYIN1
        JB  SSET,$
        INC FLASH
        MOV R7,FLASH
        CJNE R7,#17,KEYIN1
        MOV  FLASH,#0H
KEYIN1: MOV TEMP1,R0
        JNB SSUB,KEYIN2
        ACALL DELAY1
        JNB SSUB,KEYIN2
        JB  SSUB,$
        MOV A,FLASH
        ADD A,#60H
        MOV R0,A
        DEC @R0
        CJNE @R0,#0FFH,KEYIN2
        MOV @R0,#0BH
KEYIN2: JNB AADD,KEYIN3
        ACALL DELAY1
        JNB AADD,KEYIN3
        JB  AADD,$
        MOV A,FLASH
        ADD A,#60H
        MOV R0,A
        INC @R0
        CJNE @R0,#0CH,KEYIN3
        MOV @R0,#0
KEYIN3: MOV R0,TEMP1
        RET

SENDBIT:MOV A,P1
        ANL A,#0F0H
        ORL A,TEMP0
        INC TEMP0
        MOV P1,A
        MOV R2,TEMP0
        CJNE R2,#8H,SENDBIT1
        MOV  TEMP0,#0
SENDBIT1:RET

SEGU9:  CLR P1.4
        CLR P1.5
        MOV P2,A
        SETB P1.4
        MOV P1,#0AH
        RET

SEGU10: CLR P1.4
        CLR P1.5
        MOV P2,A
        SETB P1.5
        MOV P1,#0AH
        RET

TAB:    ADD A,#1
        MOVC A,@A+PC
        RET
        DB 0C0H,0F9H,0A4H
        DB 0B0H,99H,92H
        DB 82H,0F8H,80H
        DB 90H,0FFH,0BFH

TAB1:   ADD A,#1
        MOVC A,@A+PC
        RET
        DB 03H,09FH,25H
        DB 0DH,99H,49H
        DB 41H,1FH,01H
        DB 09H,0FFH,0FDH

DELAY1: MOV R7,#200
TM2:    MOV R6,#100
TM1:    DJNZ R6,TM1
        DJNZ R7,TM2
        RET

DELAY:  MOV R7,#4
TMM2:   MOV R6,#50
TMM1:   DJNZ R6,TM1
        DJNZ R7,TM2
        RET
        END

⌨️ 快捷键说明

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