dizichen.asm

来自「用周立功单片机做的电子称加密程序,主要用于单片机的二次加密.」· 汇编 代码 · 共 403 行

ASM
403
字号
;程序清单 LPC900 系列单片机源程序 qq: 29967689
;***************************************************************************
; 采用片内RC 振荡器,CPU 时钟CCLK=7.3728MHz
;***************************************************************************
;定义本程序所用到的LPC900 内部SFR 寄存器
  P0M1    EQU    84H    ;P0M1 和P0M2 是P0 口的模式寄存器
  P0M2    EQU    85H    ;它们共同决定P0 口的4 种工作模式:
  P1M1    EQU    91H    ;P0M1 和P0M2 是P0 口的模式寄存器
  P1M2    EQU    92H    ;它们共同决定P0 口的4 种工作模式:
  P3M1    EQU    0B1H    ;P0M1 和P0M2 是P0 口的模式寄存器
  P3M2    EQU    0B2H    ;它们共同决定P0 口的4 种工作模式:
                         ;准双向、推挽输出、高阻输入、开漏
  pin_LED BIT P1.2       ;定义LED 控制引脚
  pin_DAT BIT P0.5       ;定义数据收发脚
  pin_DET BIT P0.4       ;定义数据检测脚
  PSWAC   BIT PSW.6
  
  RVDTREF  EQU    0X20  
  INRTMP1  EQU    0X21
  TXBUF    EQU    0X22
  RTMP1    EQU    0X23
  RTMP2    EQU    0X24
  INRTMP2  EQU    0X25
  DATTIME  EQU    0X26
  DATABUF  EQU    0X27
  TFLAG1   EQU    0X28
  TXBITF   EQU    0X29
  TXFLAG   EQU    0X2A
  RVTIME   EQU    0X2B
  RVDAT1   EQU    0X2C
  RVDAT2   EQU    0X2D
  RVDAT3   EQU    0X2E
  RVDATA   EQU    0X2F
  ;位的定义  
  RVDTHLF    BIT   RVDTREF.0
  TXDATF     BIT   TFLAG1.1
  HAD_TXDF   BIT   TFLAG1.2
  END_TXDF   BIT   TFLAG1.3  
  ;PSWAC      BIT   TXBITF.4
  
  ORG     0000H          ;复位入口
  AJMP    RESET          ;跳到主程序
  ORG     000BH          ;定时器0中断入口
  AJMP    INTDET         ;跳到主程序
  
  
  ORG     0080H
;============FOR RESET THE MCU
RESET:
;============SET I/O PORT AND ORTHER CONDITION
         MOV     SP, #30H         
         ANL     TMOD, #0F0H
         ORL     TMOD, #01H           ;定时器T0 设置成定时器模式1
         MOV     P0M1, #00100000B     ;将P0.5 设置成输入口
         MOV     P0M2, #00000000B
         MOV     P1M1, #00000000B     ;将P1 设置成准双向输出方式。
         MOV     P1M2, #00000000B
         MOV     P3M1, #00000000B     ;将P3 设置成准双向输出方式。
         MOV     P3M2, #00000000B
         SETB    ET0
         MOV     TH0, #0FDH            ;(TH0,TL0)=65536-0.0002*PCLK  7.3728M
         MOV     TL0, #01FH            ;PCLK 是外围器件时钟,等于CPU 时钟CCLK 的一半
         SETB    TR0
         SETB    EA                   ;使能中断
         SETB    pin_DET
         SETB    pin_DAT
         SETB    P3.0
;*******************************************************
;*******************************************************
_main:
         MOV     A,#00H
         MOV     R7,#0FH
         MOV     R0,#20H
LOOP:
         MOV     @R0,A
         INC     R0
         DJNZ    R7,LOOP
_main_10:
         CLR     pin_LED ;点亮LED
         MOV     R7, #10 ;延时100ms
         ACALL   _Delay
         SETB    pin_LED ;熄灭LED
         MOV     R7, #10 ;延时900ms
         ACALL   _Delay
         SJMP    _main_10

;200uS进入一次中断
INTDET:
         PUSH    PSW
         PUSH    ACC
         MOV     TH0, #0FDH            ;(TH0,TL0)=65536-0.0002*PCLK  7.3728M
         MOV     TL0, #01FH            ;PCLK 是外围器件时钟,等于CPU 时钟CCLK 的一半
         CPL     P3.1
         JB      TXDATF,C_1TXDAT
         AJMP    C_1RVDAT

C_1INTR:
INTDET3:
         POP     ACC
         POP     PSW
         RETI
;==============FOR_TX_ROUT
C_1TXDAT:
         INC    RTMP1
         CLR    C
         MOV    A,#09H
         SUBB   A,RTMP1   ;10次就是2ms
         JNC    C_1INTR
         MOV    RTMP1,#00H
         MOV    A,TXBITF
         ADD    A,#10H
         MOV    TXBITF,A
         JNC    C_1INTR
         JNB    RVDTHLF,NEWDATA
         CLR    RVDTHLF
         CLR    pin_DAT
         JB     END_TXDF,C_1TXDT2
         JNB    HAD_TXDF,C_1TXDT3K
C_1TXDT2:
         CLR    HAD_TXDF
         CLR    END_TXDF
         MOV    TXBITF, #0BFH
         SJMP   C_1INTR
C_1TXDT3K:
         CLR    C
         MOV    A, #00H
         SUBB   A,RTMP2
         MOV    RTMP2,A
         CLR    C
         MOV    A,#0C0H
         SUBB   A,RTMP2
         MOV    RTMP2,A
         CLR    C
         MOV    A, #00H
         SUBB   A,RTMP2
         MOV    RTMP2,A
         ANL    TXBITF, #0FH
         ORL    TXBITF,A
         SJMP   C_1INTR
NEWDATA:
         SETB   RVDTHLF
         SETB   pin_DAT
         MOV    A, #01H
         ADD    A,TXBITF
         MOV    TXBITF,A
         JB     PSWAC,C_1TXDT5
C_1TXDT3:
         ANL    TXBITF, #0FH
         MOV    A,TXBUF
         RLC    A
         MOV    TXBUF,A
         JC     C_1TXDTQ1
         MOV    A,#0E0H
         SJMP   C_1TXDTQ2
C_1TXDTQ1:
         MOV    A,#060H
C_1TXDTQ2:
         ORL    TXBITF,A
         MOV    RTMP2,A
         SJMP   C_1INTR
C_1TXDT5:
         MOV    A,TXFLAG
         ANL    A, #07H
         MOV    INRTMP1,A
         ADD    A,INRTMP1
         MOV    DPTR,#C_1TXDT5_TAB
         JMP    @A+DPTR
C_1TXDT5_TAB:
         SJMP    TXRT0         ;0
         SJMP    TXRT1         ;1
         SJMP    TXRT2         ;2
         SJMP    TXRT3         ;3
         AJMP    TXRT31        ;4
         
TXRT0:
         MOV    TXFLAG,#01H
         MOV    A,RVDATA
TXRT01:
         MOV    TXBUF,A
         MOV    A,#08H
TXRT02:
         MOV    TXBITF,A
         SJMP   C_1TXDT3
TXRT1:
         INC    TXFLAG
         MOV    A,RVDATA         
         ANL    A, #07H
         MOV    INRTMP1,A
         ADD    A,INRTMP1
         MOV    DPTR,#TXRT10_TAB
         JMP    @A+DPTR
TXRT10_TAB:
         SJMP    TXRT10_TAB0         ;0
         SJMP    TXRT10_TAB1         ;1
         SJMP    TXRT10_TAB2         ;2
         SJMP    TXRT10_TAB3         ;3
         SJMP    TXRT10_TAB4         ;4
         SJMP    TXRT10_TAB5         ;5
         SJMP    TXRT10_TAB6         ;6
         SJMP    TXRT10_TAB7         ;7
TXRT10_TAB0:
TXRT10_TAB6:
TXRT10_TAB7:
         MOV     A, #00H             ;0
         SJMP    TXRT01
TXRT10_TAB1:
         MOV     A, #3AH             ;1
         SJMP    TXRT01
TXRT10_TAB2:
         MOV     A, #7BH             ;2
         SJMP    TXRT01
TXRT10_TAB3:
         MOV     A, #0A6H            ;3
         SJMP    TXRT01
TXRT10_TAB4:
         MOV     A, #5BH             ;4
         SJMP    TXRT01
TXRT10_TAB5:
         MOV     A, #0CCH            ;5
         SJMP    TXRT01
TXRT2:
         INC    TXFLAG
         MOV    A,RVDATA
         ANL    A,#07H
         MOV    INRTMP1,A
         ADD    A,INRTMP1
         MOV    DPTR,#TXRT20_TAB
         JMP    @A+DPTR
TXRT20_TAB:
         SJMP    TXRT20_TAB0         ;0
         SJMP    TXRT20_TAB1         ;1
         SJMP    TXRT20_TAB2         ;2
         SJMP    TXRT20_TAB3         ;3
         SJMP    TXRT20_TAB4         ;4
         SJMP    TXRT20_TAB5         ;5
         SJMP    TXRT20_TAB6         ;6
         SJMP    TXRT20_TAB7         ;7
TXRT20_TAB0:
TXRT20_TAB6:
TXRT20_TAB7:
         MOV     A, #00H             ;0
         SJMP    TXRT01
TXRT20_TAB1:
         MOV     A, #46H             ;1
         SJMP    TXRT01
TXRT20_TAB2:
         MOV     A, #98H             ;2
         SJMP    TXRT01
TXRT20_TAB3:
         MOV     A, #0CCH            ;3
         SJMP    TXRT01
TXRT20_TAB4:
         MOV     A, #8BH             ;4
         SJMP    TXRT01
TXRT20_TAB5:
         MOV     A, #0AFH            ;5
         SJMP    TXRT01
         
TXRT3:
         INC    TXFLAG
         MOV    A,RVDATA
         ANL    A, #07H
         MOV    INRTMP1,A
         ADD    A,INRTMP1
         MOV    DPTR,#TXRT3_TAB
         JMP    @A+DPTR
TXRT3_TAB:
         SJMP    TXRT31
         SJMP    TXRT30
         SJMP    TXRT30
         SJMP    TXRT30
         SJMP    TXRT31
         SJMP    TXRT31
;============FOR TX DATA OVER TO RETURN
TXRT30:
         SETB   END_TXDF
         MOV    A,#0AFH         ;FOR "1" = 6 CLOCKS
         MOV    TXBITF,A
         AJMP   C_1INTR
TXRT31:
         SETB   pin_DAT
TXRTR:
         CLR    TXDATF          ;RESET TX THE DATA FLAG
         MOV    TXFLAG,#00H
         SETB   RVDTHLF
         SETB   pin_DAT
         MOV     P0M1, #00100000B     ;将P0.5 设置成输入口。
         MOV     P0M2, #00000000B
         AJMP   C_1INTR
;============FOR RV THE DATA
C_1INTRT:
         JNB    HAD_TXDF,C_1INTR_CP;C_1INTR
         SETB   TXDATF
         ANL    TXBITF, #0FH
         ORL    TXBITF, #0B0H
         MOV     P0M1, #00100000B     ;将P0.5 设置成输出口
         MOV     P0M2, #00100000B
         SETB   pin_DAT
         SETB   RVDTHLF
         MOV    RVDATA,RVDAT1
         MOV    RTMP1, #00H
         AJMP   C_1INTR
C_1RVDAT:
         MOV     A,RVDTREF
         ADD     A, #08H
         MOV     RVDTREF,A
         JC      DATEROR
         JNB     pin_DAT,C_1RVDT1
         JB      RVDTHLF,C_1INTR_CP;C_1INTR
         SETB    RVDTHLF
         SJMP    C_1RVDT2
C_1INTR_CP:
         AJMP    C_1INTR

C_1RVDT1:
         JNB     RVDTHLF,C_1INTR_CP;C_1INTR
         CLR     RVDTHLF
C_1RVDT2:
         MOV    INRTMP1,RVDTREF
         ANL    RVDTREF, #01H   ;RESET RVDTREF_HIGH BITS   
         JB     RVDTHLF,C_1INTRT
         CLR    C
         MOV    A,INRTMP1
         RRC    A
         RRC    A
         RRC    A         
         ANL    A, #1FH
         MOV    INRTMP1,A
         ADD    A,INRTMP1
         MOV    DPTR,#JPDT
         JMP    @A+DPTR
JPDT:
         SJMP    DATEROR         ;0
         SJMP    DATEROR         ;1
         SJMP    DATEROR         ;2
         SJMP    DATEROR         ;3
         SJMP    C_1RVDT3        ;4
         SJMP    C_1RVDT3        ;5
         SJMP    C_1RVDT3        ;6
         SJMP    C_1RVDT3        ;7
         SJMP    DATEROR         ;8
         SJMP    DATEROR         ;9
         SJMP    DATEROR         ;A
         SJMP    DATEROR         ;B
         SJMP    DATEROR         ;C
         SJMP    DATEROR         ;D
         SJMP    DATEROR         ;E
         SJMP    C_1RVDT4        ;F
         SJMP    C_1RVDT4        ;10
         SJMP    C_1RVDT4        ;11
         SJMP    C_1RVDT4        ;12
         SJMP    C_1RVDT4        ;13
         SJMP    C_1RVDT4        ;14
         SJMP    C_1RVDT4        ;15
         SJMP    C_1RVDT4        ;16
         SJMP    C_1RVDT4        ;17
         SJMP    DATEROR         ;18
         SJMP    DATEROR         ;19
         SJMP    DATEROR         ;1A
         SJMP    DATEROR         ;1B
         SJMP    DATEROR         ;1C
         SJMP    DATEROR         ;1D
         SJMP    DATEROR         ;1E
         SJMP    DATEROR         ;1F

;===========FOR DETECT THE DATA IS OVER
DATEROR:
         ANL    RVDTREF, #01H   ;RESET RVDTREF_HIGH BITS
         MOV    RVDAT2, #00H
         MOV    RVTIME, #00H
         AJMP   C_1INTR

C_1RVDT3:
         CLR    C
         SJMP   C_1RVDT5
C_1RVDT4:
         SETB   C
C_1RVDT5:         
         MOV    A,RVDAT3
         RLC    A
         MOV    RVDAT3,A
         MOV    A,RVDAT2
         RLC    A
         MOV    RVDAT2,A
         MOV    A,RVDAT1
         RLC    A
         MOV    RVDAT1,A
         INC    RVTIME
         MOV    A,#018H
         CJNE   A,RVTIME,C_1INTR_C;C_1INTR
         SETB   HAD_TXDF
         CLR    P3.0
C_1INTR_C:
         AJMP   C_1INTR
_Delay:  
         MOV     R6, #0FEH
_Delay_10:
         DJNZ    R6, _Delay_10
_Delay_20:
         DJNZ    R7, _Delay
         RET
         
         END

⌨️ 快捷键说明

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