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

📄 freq.asm

📁 这是我们做课程设计的时候频率发生器的一些程序模块,希望对大家有用
💻 ASM
字号:
SUM     EQU    30H
ADDR    EQU    32H

ORG     0000H
JMP     START

ORG     0040H
START:  MOV   SP,#50H
        MOV P0,#0
        

MAIN:   CALL  INIT_51 
        JMP   MAIN

INIT_51:MOV    TMOD,#01010001B
        MOV  IE,#0
        MOV IP,#0
        MOV R2,#2
        MOV    TL1,#0
        MOV    TH1,#0
        SETB   TR1
        SETB   TR0
        
  LL0:  MOV    TL0,#LOW(65536-49994)
        MOV    TH0,#HIGH(65536-49994)
          JNB  TF0,$
          CLR   TF0
          DJNZ  R2,LL0
          CLR  TR1
          CALL CHECK_100MS
        
        RET
        
CHECK_100MS:MOV A,TH1
            JNZ  L0
            MOV A,TL1
            CLR C
            SUBB A,#100
            JC CHECK_100MS_1
  L0:          MOV A,TH1
            SUBB A,#27H
            JC CHECK_100MS_3
            JNZ  CHECK_100MS_2
            MOV A,TL1
            CLR  C
            SUBB A,#10H
            JC CHECK_100MS_3
            JMP CHECK_100MS_2
CHECK_100MS_1:
            CALL PROC_1S
            JMP  CHECK_100MS_RET
CHECK_100MS_2:
            CALL PROC_10MS
            JMP CHECK_100MS_RET
CHECK_100MS_3: CALL ASCTOBCD
            CLR P1.1
            SETB P1.0
            CLR P0.4
            SETB P0.5
            CALL DISP
CHECK_100MS_RET:RET


PROC_1S:    MOV  R2,#20
            MOV TL1,#0
            MOV TH1,#0
            SETB TR0
            SETB TR1
PROC_1S_1:  MOV    TL0,#LOW(65536-49994)
           MOV    TH0,#HIGH(65536-49994)
          JNB  TF0,$
          CLR   TF0
          NOP
          DJNZ  R2,PROC_1S_1
          CLR TR1
          MOV A,TL1
          CLR C
          SUBB A,#10
          JC PROC_1S_2
          CALL ASCTOBCD
          CLR P0.5
          CLR P0.4
          SETB P1.1
          CLR P1.0
          CALL DISP
          JMP PROC_1S_RET
PROC_1S_2:CALL PROC_10S
PROC_1S_RET:RET
         
PROC_10S:MOV R2,#200         
          MOV TL1,#0
            MOV TH1,#0
            SETB TR0
            SETB TR1
PROC_10S_1:  MOV    TL0,#LOW(65536-49994)
        MOV    TH0,#HIGH(65536-49994)
          JNB  TF0,$
          CLR   TF0
          NOP
          DJNZ  R2,PROC_10S_1
          CLR TR1          
          CALL ASCTOBCD
          CLR  P0.5
          SETB P0.4
          SETB P1.1
          CLR P1.0
          CALL DISP
          RET

 PROC_10MS:  MOV IE,#0
             MOV  IP,#0
             MOV TMOD,#51H
             MOV TL1,#0
             MOV TH1,#0            
             MOV    TL0,#LOW(65536-9997)
             MOV    TH0,#HIGH(65536-9997)
             SETB TR1
             SETB TR0
             JNB  TF0,$         
             CLR TR1          
             CALL ASCTOBCD
             CLR P0.5
             SETB P0.4
             SETB P1.0
             CLR P1.1
             CALL DISP
             CALL DELAY
        RET       
         
DELAY:  MOV   R4,#10
        SETB   TR0
   L3:  MOV   TL0,#LOW(65536-50000)
        MOV   TH0,#HIGH(65536-50000)
        JNB   TF0,$
        CLR   TF0
        DJNZ   R4,L3
        RET
        
         
         
 


ASCTOBCD:   MOV   R4,TH1
            MOV   R5,TL1
            CALL  CLR_SUM
            MOV   A,R4
            SWAP  A
            MOV   DPTR,#TAB1
            CALL  BCDAD
            MOV   A,R4
            MOV   DPTR,#TAB2
            CALL  BCDAD
            MOV   A,R5
            SWAP  A
            MOV   DPTR,#TAB3
            CALL  BCDAD
            MOV   A,R5
            MOV   DPTR,#TAB4
            CALL  BCDAD
            RET

BCDAD:      ANL   A,#0FH
            CALL  READ_TAB
            CALL  BCD_ADD
            RET

CLR_SUM:    MOV   R0,#SUM
            MOV   R2,#2
            CLR   A
CLR_SUM_NEXT: MOV  @R0,A
              INC  R0
              DJNZ R2,CLR_SUM_NEXT
            RET

READ_TAB:   MOV    R1,#ADDR
            MOV    R2,#2
            MOV    B,#2
            MUL    AB
            MOV    B,A

READ_TAB_NEXT:
            MOV    A,B
            MOVC  A,@A+DPTR
            MOV    @R1,A
            INC    DPTR
            INC    R1
            DJNZ   R2,READ_TAB_NEXT
            RET

BCD_ADD:    MOV    R0,#SUM
            MOV    R1,#ADDR
            MOV    R2,#2
            CLR    C
BCD_ADD_NEXT:
            MOV    A,@R0
            ADDC   A,@R1
            DA     A
            MOV    @R0,A
            INC    R0
            INC    R1
            DJNZ   R2,BCD_ADD_NEXT
            RET

TAB1:       DB     00H,00H
            DB     96H,40H
            DB     92H,81H
TAB2:       DB     00H,00H
            DB     56H,02H
            DB     12H,05H
            DB     68H,07H
            DB     24H,10H
            DB     80H,12H
            DB     36H,15H
            DB     92H,17H
            DB     48H,20H
            DB     04H,23H
            DB     60H,25H
            DB     16H,28H
            DB     72H,30H
            DB     28H,33H
            DB     84H,35H
            DB     40H,38H

TAB3:       DB      00H,00H
            DB       16H,00H
            DB       32H,00H
            DB       48H,00H
            DB       64H,00H
            DB       80H,00H
            DB       96H,00H
            DB       12H,01H
            DB       28H,01H
            DB       44H,01H
            DB       60H,01H
            DB       76H,01H
            DB       92H,01H
            DB       08H,02H
            DB       24H,02H
            DB       40H,02H

TAB4:       DB       00H,00H
            DB       01H,00H
            DB       02H,00H
            DB       03H,00H
            DB       04H,00H
            DB       05H,00H
            DB       06H,00H
            DB       07H,00H
            DB       08H,00H
            DB       09H,00H
            DB       10H,00H
            DB       11H,00H
            DB       12H,00H
            DB       13H,00H
            DB       14H,00H
            DB       15H,00H

;DISP1:      MOV    R0,#SUM+1
 ;           MOV    A,@R0
  ;          ANL    A,#0F0H
   ;         JNZ    DISP1_NEXT
    ;        MOV    A,@R0
     ;       ORL    A,#0F0H
      ;      JMP    DISP1_NEXT1

;DISP1_NEXT:
;            MOV     A,@R0
;DISP1_NEXT1:
 ;           SETB    P0.7
  ;          MOV     P2,A
   ;         CLR     P0.7
    ;        DEC     R0
     ;       MOV     A,@R0
      ;      SETB    P0.6
       ;     MOV     P2,A
        ;    CLR     P0.6
         ;   SETB    P0.5
          ;  RET

DISP:      MOV    R0,#SUM+1
            MOV    A,@R0
            ANL    A,#0F0H
            JNZ    DISP_NEXT
            MOV    A,@R0
            ANL    A,#0FFH
            JNZ    DISP_NEXT1
            ORL    A,#0FFH
            JMP    DISP_NEXT2

DISP_NEXT:
            MOV     A,@R0
            JMP     DISP_NEXT2
DISP_NEXT1:MOV     A,@R0
            ORL     A,#0F0H
DISP_NEXT2:
            SETB    P0.7
            MOV     P2,A
            CLR     P0.7
            DEC     R0
            MOV     A,@R0
            SETB    P0.6
            MOV     P2,A
            CLR     P0.6
            RET

         END

⌨️ 快捷键说明

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