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

📄 键盘程序1.asm

📁 使用汇编语言的89C2051键盘输入程序源码
💻 ASM
📖 第 1 页 / 共 2 页
字号:
;=============================================================
;
;               用定时器0 计数P1.0 宽度    2002/08/10
;               在两次捕捉期间进行A/D转换,
;               用UART 发送16字节;收16字节,方式2
;               波特=12000000/12/32=31.25K(PCON.7=0)
;=============================================================
;
;20H:    EQU     00H
;21H:    EQU     20H
;22H:    EQU     1CH
;DATB1:  EQU     77H
;DATB2:  EQU     78H
                org     0000h
                ajmp    START0
                ORG     0013H
                AJMP    KEY_INT
                ORG     0023H
                AJMP    RS_INT
 ;              org     0033h
 ;              aJMP    ct0int
                ORG     0053H
                AJMP    ADINT
start0:         MOV     28H,#0FFH
START:
                SETB    EA
                SETB    EX1
                CALL    CLR_P4
                CALL    DS_1S
                CALL    P4_P
                CALL    DS_1S
                JNB     28H.7,LIBERTY
                JNB     28H.5,TURN
                JNB     28H.4,SPEED
                jnb     28h.6,start1
                AJMP    START
LIBERTY:
                CALL    LIBE_P
TURN:
                CALL    TURN_P
                
SPEED:
                CALL    SPEED_P
                AJMP    START                
LIBE_P:
                RET
TURN_P:
                RET
SPEED_P:
                MOV     P4,#6DH
                MOV     P1,#0F0H
                MOV     P1,#0F1H
                MOV     P1,#0F2H
                MOV     P1,#0F3H
                MOV     P1,#0F4H
                MOV     P1,#0F5H
                RET                
                
START1:         MOV     70H,#00                   ;
                MOV     71H,#0aah                 ;
                MOV     TMOD,#21H
                MOV     PWMP,#255
                MOV     TL1,#255
                MOV     TH1,#255
                SETB    TR1
                MOV     S0CON,#01010000B
                MOV     PCON,#80H
                MOV     SP,#60H
                SETB    EA                      ;开总体中断
                CLR     PSW.1                   ;清标志
                ;CLR     EX1


wait:
                jnb     p3.2,wait
                ACALL   WORD_3_6
                SETB    TR0
                CLR    126
WAIT1:
                ;jb      28h.6,start
                jb      p3.2,$
                CLR     TR0
                ;ACALL   WORD3_6
                MOV     30H,TH0
                MOV     31H,TL0
                ;acall   div2
                ACALL    PLAY
                ACALL   DIV_3_2
                acall   H_D
                mov      76h,2eh
                mov      77h,52h

                ACALL   AD_X8                   ;调八位A/D转换子程序
                ACALL   RS_SEND
                MOV     TH0,#0
                MOV     TL0,#0
                MOV     PWM0,7EH
                MOV     PWM1,7FH
SUBB_R7:
                ;mov     R6,#0FFH
                ;DJNZ    R6,$
                ;DJNZ    R7,SUBB_R7
                ;jb      p3.2,$
                ajmp    WAIT                    ;等待CT0I触发

AD_X8:                                          ;A/D转换子程序
             JB         126,NEXT1
             mov        R1,#78H                 ;设地址指针
             MOV        A,R1                    ;
             ANL        A,#0FH                  ;关高8位
             MOV        ADCON,A                 ;启动A/D
             ORL        IEN0,#0C0H              ;开总体中断和A/D中断
WAITAD:      CJNE       R1,#80H,WAITAD          ;8通道转换完毕?等待
             ANL        ADCON,#0EFH             ;清ADCI标志
             SETB       126
             CLR        125
NEXT1:       RET                                ;子程序返回

ADINT:                                          ;A/D中断子程序
             MOV        @R1,ADCH                ;转换值进RAM
             ANL        ADCON,#0EFH             ;清ADCI标志
             INC        R1                      ;地址指针加一
             mov        A,R1                    ;
             ANL        A,#0FH                  ;
             MOV        ADCON,A                 ;转换通道
             ORL        IEN0,#0C0H              ;开中断
             RETI                               ;中断返回

RS_SEND:
                ;JB      127,NEXT8
                MOV     R0,#70H
                MOV     R7,#16
LOOP_t:
                MOV     A,@R0
                ACALL   SP_OUT
                INC     R0
                DJNZ    R7,LOOP_t
                ;SETB    127
                clr     124
                ;setb    es
NEXT8:           RET
SP_OUT:
                MOV     S0BUF,A
                JNB     TI,$
                CLR     TI
                RETI

RS_IN:
                JB      124,FF_END
                MOV     R7,#16
                MOV     R0,#30H
NEXT_:          ACALL   SP_IN
                DJNZ    R7,NEXT_
                MOV     R7,#16
                MOV     R0,#30H
FF_END:         setb    124
                CLR     127
                RET
SP_IN:
                JNB     RI,$
                CLR     RI
                MOV     A,S0BUF
                MOV     @R0,A
                INC     R0
                RETI
RS_INt:
                PUSH    A
                PUSH    PSW
                PUSH    DPL
                PUSH    DPH
                mov     r0,#30h
inti_:
                JNB     RI,$
                CLR     RI
                MOV     A,S0BUF
                MOV     @R0,A
                INC     R0
                cjne    r0,#40h,INTI_
                clr     es
                POP     DPH
                POP     DPL
                POP     PSW
                POP     A
 end_:          RETI
;==================================================
;               三字节除二字节
;==================================================
DIV_3_2:
                 MOV    20H,#00H
                 MOV    21H,#80H
                 MOV    22H,#70H
                 MOV    R4,31H
                 MOV    R5,30H
                 MOV    R7,#18H
                 MOV    23H,#00H
                 MOV    24H,#00H
                 ACALL  CHU7
                 MOV    72H,28H
                 MOV    73H,27H
                 MOV    74H,26H
                 ;ACALL  WORD3_6
                 RET
CHU7:
                CLR     C
                MOV     A,20H
                RLC     A
                MOV     20H,A
                MOV     A,21H
                RLC     A
                MOV     21H,A
                MOV     A,22H
                RLC     A
                MOV     22H,A
                MOV     A,23H
                RLC     A
                MOV     23H,A
                MOV     A,24H
                RLC     A
                MOV     24H,A
                MOV     A,26H
                RLC     A
                MOV     26H,A
                MOV     A,27H
                RLC     A
                MOV     27H,A
                MOV     A,28H
                RLC     A
                MOV     28H,A
                CLR     C
                MOV     A,23H
                SUBB    A,R4
                MOV     R1,A
                MOV     A,24H
                SUBB    A,R5
                MOV     R2,A
                JC      LOOP_1
                INC     26H
                MOV     A,R1
                MOV     23H,A
                MOV     A,R2
                MOV     24H,A
LOOP_1:
                DJNZ    R7,CHU7
                RET
;
;======================================================
;          (53H52H51H50H)/(3BH3CH)=(51H50H)
;          (R3R2)=余数部分 ADD1=BIT 54H
;======================================================
;
DIV2:
        MOV     50H,#00H
        MOV     51H,#20H
        MOV     52H,#1CH
        MOV     53H,#00H
DVT2:
        MOV     R6,#00H
        MOV     R5,#00H
        MOV     R4,#00H
        MOV     R3,30H
        MOV     R2,31H
DVT20:  MOV     R7,#20H
        CLR     54H
        ACALL   RLN
DVL1:   CLR     C
        MOV     A,R4
        SUBB    A,R2
        MOV     R4,A
        MOV     A,R5
        SUBB    A,R3
        MOV     R5,A
        MOV     A,R6
        SUBB    A,#00H
        MOV     R6,A
        JC      DVL2
        SETB    54H
DVL3:   ACALL   RLN
        DJNZ    R7,DVL1

⌨️ 快捷键说明

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