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

📄 1234.asm

📁 简单的实验班自检程序。方便初学者对各种功能进行学习、参考
💻 ASM
字号:

EEPROM_SDA    BIT   P1.0
EEPROM_SCL    BIT   P1.2
WP            BIT   P1.1
AD_CL_PIN     BIT   P1.2
AD_DA_PIN     BIT   P1.3
AD_CS_PIN     BIT   P1.4
LED_DIGIT_1   BIT   P2.0
LED_DIGIT_2   BIT   P2.1
LED_DIGIT_3   BIT   P2.2
LED_DIGIT_4   BIT   P2.3
LED_BUS_PIN   BIT   P2.4
BELL_PIN      BIT   P2.5
SW_A          BIT   P3.3
SW_B          BIT   P3.2
ADD_24       EQU       9H
EEPROM_DAT   EQU       0AH
ADC_VAL      EQU       0BH
LED_VAL      EQU       24H
SW_BZ        BIT        0H
CODE_1       EQU       60H
CODE_2       EQU       61H
CODE_3       EQU       62H
CODE_4       EQU       63H
ADC_CHANG_CODE  EQU    64H
          ORG 00H
        JMP RESET

         ORG 50H
reset: mov sp,#70h
       MOV P2,#0
       MOV LED_VAL,#0FFH
       CLR  SW_BZ          ;开关按下标志     0:NO     1:YES
       MOV ADC_CHANG_CODE,#10
       CALL DELAY_5ms
       CALL LED_DIGIT_SHOW
       MOV ADD_24,#10H
       CALL  RD_DATA
       CJNE A,#100,RESET_1
       MOV ADD_24,#5H
       CALL RD_DATA
       MOV LED_VAL,A
       JMP  MAIN
RESET_1:  CALL WRITE1


MAIN:  CALL SW_CHECK
       CALL SW_PRO
       CALL ADC_PRO
       CALL LED_SHOW

       ;CALL READ1
       JMP MAIN

LED_SHOW: MOV CODE_1,#0
          MOV A,ADC_VAL
          MOV B,#100
          DIV AB
          MOV CODE_2,A
          MOV A,B
          MOV B,#10
          DIV AB
          MOV CODE_3,A
          MOV CODE_4,B
          MOV R2,#4
LED_SHOW1: SETB P2.0
           MOV A,CODE_1
           CALL LED_SHOW_LOOP
;**************************************
           SETB P2.1
           MOV A,CODE_2
           CALL LED_SHOW_LOOP
;**************************************
           SETB P2.2
           MOV A,CODE_3
           CALL LED_SHOW_LOOP
;**************************************
           SETB P2.3
           MOV A,CODE_4
           CALL  LED_SHOW_LOOP
           RET

LED_SHOW_LOOP: MOV DPTR,#DIGIT_TABLE
           MOVC A,@A+DPTR
           MOV P0,A
           CALL DELAY_5ms
           ANL P2,#11110000B
           RET

SW_PRO:
          ANL  P2,#00110000B
          SETB LED_BUS_PIN
          MOV  P0,LED_VAL
          CALL DELAY_5ms
          CLR   LED_BUS_PIN
          JNB  SW_BZ,SW_PRO_END
          MOV  EEPROM_DAT, LED_VAL
          MOV  ADD_24,#5H
          CALL WR_DATA
          RET
SW_PRO_END:  RET
SW_CHECK:  MOV  P3,#00001111B
           MOV R3,#100
SW_CHECK_1:JNB  SW_A,SW_A_PRO
           JNB  SW_B,SW_B_PRO
           DJNZ R3,SW_CHECK_1
           CLR SW_BZ
           CLR  BELL_PIN
SW_END:    RET
;查第一排开关
SW_A_PRO:  JB SW_BZ,SW_END
           MOV R3,#200
           MOV R2,#4
           DJNZ R3,$
           SETB SW_BZ
           SETB BELL_PIN
SW_A_PRO_1: MOV DPTR,#SW_TABLE
SW_A_LOOP:  CLR A
            MOVC A,@A+DPTR
            MOV P3,A
            JNB SW_A,SW_A_VAL      ;已查出按下的按钮
            INC DPTR               ;
            DJNZ R2,SW_A_LOOP
            RET
SW_A_VAL:   MOV A,R2
            CJNE A,#1, SW_A_VAL_1
            CPL   LED_VAL.0
            RET
SW_A_VAL_1:  CJNE A,#2, SW_A_VAL_2
            CPL   LED_VAL.1
            RET
SW_A_VAL_2:  CJNE A,#3, SW_A_VAL_3
            CPL   LED_VAL.2
            RET
SW_A_VAL_3:  CJNE A,#4, SW_A_VAL_4
            CPL   LED_VAL.3
            RET
SW_A_VAL_4: RET
;查第二排开关
SW_B_PRO:  JB SW_BZ,SW_END
           MOV R3,#200
           MOV R2,#4
           DJNZ R3,$
           SETB SW_BZ
           SETB BELL_PIN
SW_B_PRO_1: MOV DPTR,#SW_TABLE
SW_B_LOOP:  CLR A
            MOVC A,@A+DPTR
            MOV P3,A
            JNB SW_B,SW_B_VAL      ;已查出按下的按钮
            INC DPTR               ;
            DJNZ R2,SW_B_LOOP
            RET
SW_B_VAL:   MOV A,R2
            CJNE A,#1, SW_B_VAL_1
            CPL   LED_VAL.4
            RET
SW_B_VAL_1:  CJNE A,#2, SW_B_VAL_2
            CPL   LED_VAL.5
            RET
SW_B_VAL_2:  CJNE A,#3, SW_B_VAL_3
            CPL   LED_VAL.6
            RET
SW_B_VAL_3:  CJNE A,#4, SW_B_VAL_4
            CPL   LED_VAL.7
            RET
SW_B_VAL_4: RET


;按钮开关数值查表
SW_TABLE: DB  01111111B, 10111111B, 11011111B,11101111B


LED_DIGIT_SHOW:  SETB LED_DIGIT_4
                 CALL SHOW_SUB
                 SETB LED_DIGIT_3
                 CALL SHOW_SUB
                 SETB LED_DIGIT_2
                 CALL SHOW_SUB
                 SETB LED_DIGIT_1
                 CALL SHOW_SUB
                 RET
SHOW_SUB:        MOV DPTR,#DIGIT_TABLE
                 MOV R3,#11
SHOW_LOOP:      CLR A
                MOVC A,@A+DPTR
                MOV P0,A
                INC DPTR
                CALL DELAY200MS
                CALL DELAY200MS
                DJNZ R3,SHOW_LOOP
                ANL P2,#11110000B
                RET
;数字查表         0           1            2        3         4         5
DIGIT_TABLE: DB 11000000B, 11111001B,10100100B,10110000B,10011001B, 10010010B
;                 6            7          8         9        10
             DB 10000010B, 11111000B,10000000B,10010000B,01111111B
;ADC值处理
ADC_PRO:  DEC ADC_CHANG_CODE
          MOV A,ADC_CHANG_CODE
         CJNE A,#0,ADC_PRO_END
         MOV ADC_CHANG_CODE,#10
ADC_PRO_1: CALL ADC
         CALL ADC
         MOV ADC_VAL,A
ADC_PRO_END:   RET
WRITE1: MOV R2,#255
        MOV R1,#0
        MOV EEPROM_DAT,#100
WRITE_24: MOV ADD_24,R1
          CALL WR_DATA
          CALL DELAY_500uS
          INC R1
          DJNZ R2, WRITE_24
          RET
;****************************
;24LC02 EEPROM
;写入数据
WR_DATA: LCALL ST24       ;启动
         MOV A, #0A0H     ;写入控制码
         LCALL WBYTE
         MOV A,ADD_24     ;写入需读数的地址
         LCALL WBYTE
         MOV A,EEPROM_DAT ;写入该地址中的数据
         LCALL WBYTE
         LCALL STOP24     ;停止
         CALL DELAY_500uS
         RET

RD_DATA: LCALL ST24       ;
         MOV A,#0A0H
         LCALL WBYTE
         MOV A,ADD_24
         NOP
         LCALL WBYTE
         NOP
         LCALL ST24
         MOV A,#0A1H   ; 读控制码  10100001B
         LCALL WBYTE
         NOP
         LCALL RBYTE
         NOP
         LCALL STOP24
         RET
;*****写入************
WBYTE:   MOV R3,#8
WBY24:   CLR EEPROM_SCL
         NOP
         RLC A
         MOV EEPROM_SDA,C
         NOP
         SETB EEPROM_SCL
         NOP
         DJNZ R3,WBY24
         CLR EEPROM_SCL
         NOP
         SETB EEPROM_SCL
         NOP
         NOP
         JB EEPROM_SDA,$
         CLR EEPROM_SCL
         NOP
         RET
;*******读出数据**********
RBYTE:   MOV R3,#8
RBY24:    CLR EEPROM_SCL
         NOP
         NOP
         NOP
         NOP
         NOP
         NOP
         SETB EEPROM_SCL
         NOP
         MOV C,EEPROM_SDA
         RLC A
         DJNZ R3,RBY24
         CLR EEPROM_SCL
         NOP
         SETB EEPROM_SDA
         NOP
         SETB EEPROM_SCL
         NOP
         RET
;******启动************************
ST24:    CLR WP
         NOP
         NOP
         CLR EEPROM_SCL
         NOP
         NOP
         SETB EEPROM_SDA
         NOP
         NOP
         SETB EEPROM_SCL
         NOP
         NOP
         CLR EEPROM_SDA
         NOP
         NOP
         CLR EEPROM_SCL
         RET
;******停止***************************
STOP24:  CLR EEPROM_SCL
         NOP
         NOP
         CLR EEPROM_SDA
         NOP
         NOP
         SETB EEPROM_SCL
         NOP
         NOP
         SETB EEPROM_SDA
         NOP
         NOP
         CLR EEPROM_SCL
         SETB WP
         RET
;****取出模拟输入值
;adc tlc549
ADC: CLR A
     CLR C
     CLR AD_CS_PIN
     NOP
     NOP
     NOP
     ;MOV R7,#50
     ;DJNZ R7,$
     MOV R7,#8             ;8BIT
AD_LOOP:
     SETB AD_CL_PIN
     NOP
     NOP
     MOV C,AD_DA_PIN
     CLR AD_CL_PIN
     RLC A
     DJNZ R7,AD_LOOP
     SETB AD_CS_PIN
     RET
;********延时200MS********
delay200ms:   mov r5,#248
delay200ms_1: mov r6,#15
delay200ms_2: mov r7,#15
              djnz r7,$
              djnz r6,delay200ms_2
              djnz r5,delay200ms_1
              ret
;*******延时5ms*************************
DELAY_5ms:  MOV R6,#10
DELAY_5ms_1:  MOV R7,#248
         DJNZ R7,$
         DJNZ R6,DELAY_5ms_1
         RET
;延时0.5ms
delay_500us:  mov r5,#5; 15
delay_500us_1:  mov r6,#248
         djnz r6,$
         djnz r5, delay_500us_1
          ret
         END

⌨️ 快捷键说明

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