串并转换.asm

来自「用汇编写的串并转换程序」· 汇编 代码 · 共 92 行

ASM
92
字号
;***********************************************************
;*****  This demonstration is a program                *****
;*****   for Electronic Clock with adjuctment function *****
;***********************************************************



       ORG  0000h
        LJMP INIT

        ORG 0030H
    INIT:CLR  EA
         MOV A,#10H
         MOV 79H,A
         MOV 7AH,A
         MOV 7BH,A
         MOV 7CH,A
         MOV 7DH,A
         MOV 7EH,A
         MOV  30H,#00H
   ;********************************************************
   ;*****   This following is main program module        ***
   ;*****   there are three tasks in it. one is Key_scan ***
   ;*****   one is display. one is Port 1 initialization ***
   ;********************************************************
          MAIN:LCALL  SP8_SUB
               LCALL  HALFHEX
               INC 30H
               MOV  R7,#0FFH
          LOOP88:LCALL DISP_SUB
               DJNZ R7,LOOP88
               AJMP   MAIN
     ;****************************************************
     ;*****   SERIEAL DATA TO 74LS164                *****
     ;****************************************************

     SP8_SUB:SETB P1.1
             MOV  A,30H
             MOV R7,#08H
      LOOP77:RRC A
             MOV P1.0, C
             SETB P1.1
             CLR P1.1
             NOP
             NOP
             SETB P1.1
             DJNZ R7,LOOP77
             RET
             
       HALFHEX:MOV  A,30H
               ANL A,#0FH
               MOV 7DH,A
               MOV A,30H
               ANL A,#0F0H
               SWAP A
               MOV 7EH,A
               RET
      ;***********************************************
      ;***   This following is display subroutine.  ***
      ;***   #0FF21H is LDD digital control address ***
      ;***   #0FF22H is LDD 7-Segment address       ***
      ;***********************************************
      DISP_SUB:MOV  R1,   #7EH        ; First LDD BCD value address
               MOV  R2,   #00100000B  ; Frist LDD latch control bit
	           MOV  R3,   #00H
         DISP1:MOV  DPTR,  #0FFddH
	           MOV  A,    R2
	           MOVX  @DPTR,   A     ; Control latch implement
	           MOV   DPTR,   #4000H  ; 7_segment_code table first address
	           MOV  A,  @R1
	           MOVC  A, @A+DPTR
               MOV   DPTR,  #0FFdcH
               MOVX  @DPTR,  A
         DISP2:DJNZ  R3,  DISP2   ; Delay  512US
               DEC  R1            ; Second LDD BCD bit is 7DH
               CLR  C
               MOV  A,  R2
               RRC  A             ;Move  '1'  to next latch control bit
               MOV  R2,  A
               JNZ  DISP1         ; R2 isnot moved to "00000000" disp1
               RET
      ;***************************************************************
      ;*****   This following is a table for BCD to 7_segment_code  **
      ;*****   You have to notice the starting address is 1000h     **
      ;***************************************************************
                   ORG 4000H
DB 0C0H, 0F9H, 0A4H, 0B0H, 99H, 92H, 82H, 0F8H, 80H, 90H  ; 0123456789
DB 88H,83H,0C6H,0A1H,86H,8EH,0FFH ;ABCDEF
                    END
        DP   G F  E D C B A
        1    0 0  0 1 1 1 0

⌨️ 快捷键说明

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