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

📄 151.asm

📁 基于单片机的锁相频率合成器的设计:MC145151-2芯片
💻 ASM
字号:
ORG     0000H
        AJMP    START
        ORG     0030H
START:
        MOV     SP,     #60H      
        MOV     R4,     #08H      ;清除30H-37H的地址
        MOV     R0,     #30H
        LCALL   DISP              ;初始化全部显示零
CLEAR:  MOV     @R0,    #00H      
        INC     R0
        DJNZ    R4,     CLEAR     
L1:     MOV     R3,     #0F7H     ;扫描初值(P1.3=0)
        MOV     R1,     #00H      ;取码指针
L2:     MOV     A,      R3        ;开始扫描
        MOV     P1,     A         ;将扫描值输出至P1
        MOV     A,      P1        ;读入P1值,判断是否有键按下?
        MOV     R4,     A         ;存入R4,以判断是否放开
        SETB    C                 ;C=1
        MOV     R5,     #04H      ;扫描P1.4-P1.7
L3:     RLC     A                 ;将按键值左移一位
        JNC     KEYIN             ;判断C=0?有键按下则C=0,跳至KEYIN
        INC     R1                ;C=1则表示没键按下,将取码指针值加1
        DJNZ    R5,     L3        ;4列扫描完毕了?
        LCALL   DISP              ;调用显示子程序
        MOV     A,  R3            ;扫描值载入
        SETB    C                 ;C=1
        RRC     A                 ;扫描下一行(P1.3-P1.0)
        MOV     R3,     A         ;存回扫描寄存器
        JC      L2                ;C=1?是则P1.0尚未扫描到
        JMP     L1                ;C=0则4行已扫描完毕
KEYIN:  MOV     R7,     #60       ;消除抖动
D2:     MOV     R6,     #248
        DJNZ    R6,     $
        DJNZ    R7,     D2
D3:     MOV     A,      P1        ;读入P1值
        XRL     A,      R4        ;与上次读入值作比较
        JZ      D3                ;ACC=0则相等,表示按钮未放
        MOV     A,      R1        ;按钮已放开,取码指针载入累加器
        MOV     DPTR,   #TABLE     ;数据指针指到TABLE
        MOVC    A,      @A+DPTR    ;至TABLE取码
        CLR     C
        CJNE    A,      #0AH,   A0 
        LJMP    LEFT               ;确定送数
A0:     JC      QA
        CJNE    A,      #0BH,   B0
        LJMP    RIGHT              ;步进10K
B0:     CJNE    A,      #0CH,   C0
        LJMP    SS                 ;步退10K
DELAY:  MOV     R7,     #50        ;显示器扫描时间,延时1ms
D7:     MOV     R6,     #20
D1:     DJNZ    R6,     D1
        DJNZ    R7,     D7
        RET
;;;;;;;;;;;;;;;;;;扫描子程序;;;;;;;;;;;;;;;;;;;;;;
LL1:    MOV     R3,     #0F7H
        MOV     R1,     #00H
LL2:    MOV     A,      R3
        MOV     P1,     A
        MOV     A,      P1
        MOV     R4,     A
        SETB    C
        MOV     R5,     #04H
LL3:    RLC     A
        JNC     KEYINN
        INC     R1
        DJNZ    R5,     LL3
        CALL    DISP
        MOV     A,  R3
        SETB    C
        RRC     A
        MOV     R3,     A
        JC      LL2
        JMP     LL1
KEYINN: MOV     R7,     #60
DD2:    MOV     R6,     #248
        DJNZ    R6,     $
        DJNZ    R7,     DD2
DD3:    MOV     A,      P1
        XRL     A,      R4
        JZ      DD3
        MOV     A,      R1
        MOV     DPTR,   #TABLE
        MOVC    A,      @A+DPTR
        RET
    ;;;;;;;;;;组合;;;;;;;;;出口:高位3AH,低位38H;;;;;;;;;;;;;;;;;;;;;;;;;;
LEFT:   LCALL    ZUHE
        LCALL    START0
        LCALL    PIN
        LCALL    MAIN2
        LJMP     SHUCHU
ZUHE:   MOV      A,     36H      
        SWAP     A
        ORL      A,     37H
        MOV      38H,   A
        MOV      A,     34H
        SWAP     A
        ORL      A,     35H
        MOV      39H,   A
        MOV      3AH,   33H
        NOP
        NOP
        MOV     R1,     #50H
        MOV     R7,     #03H
        MOV     R0,     #3AH
        RET
;;;;;;;;;;;;;;;;;;;;;;;BCD码转换;;;;;;;;;;;;;;;
;;;;;入口:3AH,39H,38H;;;出口:50H,51H,52H;;;;;;;;;;;;;
START0: PUSH    PSW
        PUSH    ACC
        PUSH    B
        NOP
        NOP
        MOV     A,      R1
        MOV     R6,     A
        MOV     A,      R7
        MOV     R3,     A
        CLR     A
LOOP10: MOV     @R1,    A
        INC     R1
        DJNZ    R3,     LOOP10
        MOV     A,      R7
        MOV     R3,     A
LOOP11: ACALL   SC11
        MOV     A,      @R0
        ANL     A,      #0F0H
        SWAP    A
        ACALL   SC12
        ACALL   SC11
        MOV     A,      @R0
        ANL     A,      #0FH
        ACALL   SC12
        DEC     R0
        DJNZ    R3,     LOOP11
        POP     B
        POP     ACC
        POP     PSW
        RET
SC11:   MOV     A,      R7
        MOV     R4,     A
        MOV     A,      R6
        MOV     R1,     A
        CLR     C
        MOV     R2,     #00H
LOOP14: MOV     A,      @R1
        MOV     B,      #0AH
        PUSH    PSW
        MUL     AB
        POP     PSW
        ADDC    A,      R2
        MOV     @R1,    A
        MOV     R2,     B
        INC     R1
        DJNZ    R4,     LOOP14
        RET
SC12:   MOV     R5,     A
        MOV     A,      R6
        MOV     R1,     A
        MOV     A,      R7
        MOV     R4,     A
        MOV     A,      R5
        ADD     A,      @R1
        MOV     @R1,    A
        INC     R1
        DEC     R4
        JNZ     LOOP15
        AJMP    LOOP16
LOOP15: MOV     A,      @R1
        ADDC    A,      #00H
        MOV     @R1,    A
        INC     R1
        DJNZ    R4,     LOOP15
LOOP16: RET
;;;;;;;;;;;;;;;除5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;入口:高位51H送R7,低位50H送R6
;;;;;;;;;;;;;;;;;;;出口:一样;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
MAIN2:                               ;除于5,计算分频比
        MOV     R7,     51H
        MOV     R6,     50H
        MOV     R5,     #5
START1: CLR     A
        MOV     R2,     A
        MOV     R1,     #16
DIV1:   CLR     C
        MOV     A,      R6
        RLC     A
        MOV     R6,     A
        MOV     A,      R7
        RLC     A
        MOV     R7,     A
        MOV     A,      R2
        RLC     A
        MOV     R2,     A
TIAO1:  MOV     A,      R2
        SUBB    A,      R5
        JC      NEXT
        MOV     R2,     A
        INC     R6
NEXT:   DJNZ    R1,     DIV1
        MOV     A,      R2
        JB      ACC.7,  ROUND
        RLC     A
        SUBB    A,      R5
        JC      DONE
ROUND:  MOV     A,      R6
        ADD     A,      #1
        MOV     R6,     A
        MOV     A,      R7
        ADDC    A,      #0
        MOV     R7,     A
DONE:   MOV     OVER,   #0
        MOV     50H,    R6
        MOV     51H,    R7
        RET
OVER:   MOV     OVER,   #0FFH
        MOV     50H,    R6
        MOV     51H,    R7
        RET
;;;;;;;;;;;;;;;;;;;;;;;显示;;;;;;;;;;;;;;;;;;;;;;;;;;;
DISP:   MOV     A,      37H
        ADD     A,      #70H                ;D8数据值加上74138扫描值
        MOV     P0,     A                   ;显示D8
        CALL    DELAY                       ;扫描延时
        MOV     A,      36H
        ADD     A,      #60H                ;D7数据值加上74138扫描值
        MOV     P0,     A                   ;显示D7
        CALL    DELAY                       ;扫描延时
        MOV     A,      35H
        ADD     A,      #50H                ;D6数据值加上74138扫描值
        MOV     P0,     A                   ;显示D6
        CALL    DELAY                       ;扫描延时
        MOV     A,      34H
        ADD     A,      #40H                ;D5数据值加上74138扫描值
        MOV     P0,     A                   ;显示D5
        CALL    DELAY                       ;扫描延时
        MOV     A,      33H
        ADD     A,      #30H                ;D4数据值加上74138扫描值
        MOV     P0,     A                   ;显示D4
        CALL    DELAY                       ;扫描延时
        MOV     A,      32H
        ADD     A,      #20H                ;D3数据值加上74138扫描值
        MOV     P0,     A                   ;显示D3
        CALL    DELAY                       ;扫描延时
        MOV     A,      31H
        ADD     A,      #10H                ;D2数据值加上74138扫描值
        MOV     P0,     A                   ;显示D2
        CALL    DELAY                       ;扫描延时
        MOV     A,      30H
        ADD     A,      #00H                ;D1数据值加上74138扫描值
        MOV     P0,     A                   ;显示D1
        CALL    DELAY                       ;扫描延时
        RET
;;;;;;;;;;;;;;;;;;;;;;;加10K;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
RIGHT:  LCALL   ZHISHU            ;置数 为加法服务
        LCALL   BCDADD
        LCALL   CHAI
        LCALL   LEFT
ZHISHU: MOV     R0,     #38H
        MOV     R1,     #40H
        MOV     40H,    #00H
        MOV     41H,    #01H
        MOV     42H,    #00H
        MOV     R7,     #03H
        RET
BCDADD: CLR      C
ADDL:   MOV      A,     @R0
        ADDC     A,     @R1
        DA       A
        MOV      @R0,   A
        INC      R0
        INC      R1
        DJNZ     R7,    ADDL
        CLR      A
        MOV      ACC.0, C
        MOV      @R0,   A
        RET
;;;;;;;;;;;;;;;;;;;拆送到37H.....33H显示;;;;;;;;;;;;;;;;;;;;;;;;;;;
CHAI:   MOV     A,      38H
        ANL     A,      #0FH
        MOV     37H,    A
        MOV     A,      38H
        SWAP    A
        ANL     A,      #0FH
        MOV     36H,    A
        MOV     A,      39H
        ANL     A,      #0FH
        MOV     35H,    A
        MOV     A,      39H
        SWAP    A
        ANL     A,      #0FH
        MOV     34H,    A
        MOV     33H,    3AH
        LCALL   DISP
        RET
SHUCHU: LCALL   CUAN                    ;送到P2、P3口
        LCALL   DISP
        LJMP    L1
;;;;;;;;;;;;;数的交换;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
QQ:     XCH     A,      37H             ;现按键值存入(37H)
        XCH     A,      36H             ;旧(37H)值存入(36H)
        XCH     A,      35H             ;旧(36H)值存入(35H)
        XCH     A,      34H             ;旧(35H)值存入(34H)
        XCH     A,      33H             ;旧(34H)值存入(33H)
        XCH     A,      32H             ;旧(33H)值存入(32H)
        XCH     A,      31H             ;旧(32H)值存入(31H)
        XCH     A,      30H             ;旧(31H)值存入(30H)
        ACALL   DISP                    ;调用子程序
        RET
    ;;;;;;;;;;;;;;;;;;;;减10K;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
SS:     LCALL   ZHISHU
        LCALL   BCDSUB
        LCALL   CHAI
        LCALL   DISP
        LJMP    LEFT
BCDSUB: MOV      R3,    #00H
        CLR      07H
        CLR      C
SUBCD1: MOV      A,     #9AH
        SUBB    A,      @R1
        ADD     A,      @R0
        DA      A
        MOV     @R0,    A
        INC     R0
        INC     R1
        INC     R3
        CPL     C
        DJNZ    R7,     SUBCD1
        JNC     SUBCD2
        SETB    07H
SUBCD2: RET
UU:     MOV     48H,    #20H
TP:     ACALL   DISP
        ACALL   TZ
        DJNZ    48H,    TP
        RET
YS:     MOV     45H,    #02FH
M7:     MOV     46H,    #02FH
M1:     NOP
        DJNZ    46H,    M1
        DJNZ    45H,    M7
        RET
;---------------
CUAN:    MOV    P2,     51H                 ;送数
         MOV    P3,     50H
         RET
TABLE: DB 0CH,08H,04H,00H
       DB 0DH,09H,05H,01H
       DB 0EH,0AH,06H,02H
       DB 0FH,0BH,07H,03H
END

⌨️ 快捷键说明

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