📄 wm-01tc源程序.txt
字号:
;2003.07.08,use 89c52
UART_RX_BIT BIT P2.5 ; 接收卡号,接模块TTL232 发送端
ICNUM_IN BIT P3.2 ; 读卡中断,接int0
TimeCount1 EQU 30H ;120US
TimeCount2 EQU 31H ;60US
;TimeCount3 EQU 32H ;60US
UARTData EQU 33H ;卡号缓冲
CardDataCount EQU 34H ;卡号长度8字节
UARTBitCount EQU 35H ;IC卡字节长度为8
DataBuff1 EQU 0F8H ;卡号存放F5H-FFH
;======================================
ORG 0000H
LJMP START
ORG 0003H
LJMP ICREAD
;=======================================
ORG 0100H
;--------------------------------------------------------------------
; 开始正常运行
;--------------------------------------------------------------------
START: NOP
;--------------------------------------------------------------------
;ic读卡中断子程序
;--------------------------------------------------------------------
ICREAD:
ICREAD01: LCALL WATCHDOG
PUSH Acc
PUSH B
PUSH PSW
PUSH DPH
PUSH DPL
;CLR RS1 ;第二区
;SETB RS0
;--------------------------------------------------------------------
YANSHI: JB ICNUM_IN,ICREADRET ;p3.2高电平返回
JB UART_RX_BIT,YANSHI
;--------------------------------------------------------------------
; ReadCard
LCALL ReadCard
ICREADRET: POP DPL
POP DPH
POP PSW
POP B
POP Acc
RETI
;====================================================================
;--------------------------------------------------------------------
; % SUBROUTINE for SoftUART
;--------------------------------------------------------------------
ReadCard:
CLR P1.5 ;读卡过程LED显示
JB UART_RX_BIT,$
MOV CardDataCount,#8
MOV R1,#DataBuff1
ReadCardLoop2:
LCALL SoftUART_GetByte
MOV @R1,UARTData
INC R1
DJNZ CardDataCount,ReadCardLoop2
SETB P1.5;读卡完毕关闭LED显示
NOP
NOP
YYRETT: RET
;--------------------------------------------------------------------
; FUNCTION: Init_SoftUART
; INPUT:
; OUTPUT:
;--------------------------------------------------------------------
Init_SoftUART:
SETB UART_RX_BIT
RET
;--------------------------------------------------------------------
; FUNCTION: SoftUART_GetByte
; INPUT:
; OUTPUT: UARTData
; USE: A,C
;--------------------------------------------------------------------
SoftUART_GetByte:
; Wait for START bit
; 增加超时处理: 未连接/未上电/通讯错误等
YYIC: NOP
;LCALL WATCHDOG
YYRETT1:JB UART_RX_BIT,YYIC
LCALL Delay_120us_NOP
LCALL Delay_60us_NOP
; Get DATA bit
MOV UARTBitCount,#08H
SoftUART_GetByteLoop:
MOV C,UART_RX_BIT
RRC A
LCALL Delay_120us_NOP
DJNZ UARTBitCount,SoftUART_GetByteLoop
MOV UARTData,A
ICERR: RET
;-------------------------------------------------------------------
; FUNCTION: Delay_120us_NOP
; INPUT:
; OUTPUT:
;--------------------------------------------------------------------
Delay_120us_NOP:
MOV TimeCount1,#28
Delay_120usLoop:
NOP
DJNZ TimeCount1,Delay_120usLoop
RET
;--------------------------------------------------------------------
; FUNCTION: Delay_60us_NOP
; INPUT:
; OUTPUT:
Delay_60us_NOP:
MOV TimeCount2,#14
Delay_60usLoop:
NOP
DJNZ TimeCount2,Delay_60usLoop
RET
;--------------------------------------------------------------------
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -