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 + -
显示快捷键?