📄 combybin.asm
字号:
; ======================================================= ;
; READ OR WRITE 93C46 by PC WITH LCD DISPLAY 2000.12.7 ;
; ======================================================= ;
; The PCB: MLCD (UPS)
; USED RAM:
; 1DH - 1EH For 93c46
; 1FH Regi. num of buffer for 93c46
; 20H - 3FH Display buffer
; 40H - 5FH Buffer for 93c46
; 60H - 7FH SP
; ----------------------------------------------------------------------------------------------
; PORTS: P2.0 - P2.3 93C46
; P2.4 - P2.7 key rountine
; P3.2 E of LCD
; P3.3 RS of LCD
; P3.7 R/W of LCD
; ----------------------------------------------------------------------------------------------
; Define the CPU
$mod52
; ----------------------------------------------------------------------------------------------
; 16*2 LCD Definition
LCD_E BIT P3.2 ; Low for write in
LCD_RS BIT P3.3 ; data reg. / ctr reg. = 1 / 0
LCD_RW BIT P3.7 ; Read / Write = 1 / 0
; ----------------------------------------------------------------------------------------------
; Define ports
CLCD_KEY BIT P0.0 ; Clear the screen
SEND_KEY BIT P0.1
; ==================== Code segment ============================================================
ORG 0000H
AJMP INIT
ORG 0023H ; S-Port
AJMP SR
ORG 0030H
INIT: MOV SP,#60H ; 60H -- 7FH for SP
; Set interrupt
SETB EA
SETB ES
SETB PS
; Set UART
MOV SCON,#50H ; MOD1, REN=1, 1 + 8 + 1
MOV PCON,#0
MOV TMOD,#21H ; T1 & T2:Timer. T0:M1 ;T1:M2
MOV TL1,#0E8H ; B=1200,TL1=256-11059200/384/B=E8H
MOV TH1,#0E8H
SETB TR1
; Initialize LCD
ACALL ILCD ; Init. LCD mode
ACALL CREAT ; Display "CREAT...."
; ==============================================================================================
; MAIN & Key scan routine
; ==============================================================================================
MAIN:
KEY: JNB CLCD_KEY,CLR_LCD
JNB SEND_KEY,SEND
AJMP MAIN
; ----------------------------------------------------------------------------------------------
CLR_LCD: ACALL CLCD
AJMP MAIN
SEND: ACALL ST
JNB SEND_KEY,$
ACALL D20MS
AJMP MAIN
; ==============================================================================================
; COM routine with PC R0: pointe to received or transmited data
; ==============================================================================================
; Receive data routine
SR: PUSH ACC
PUSH PSW
PUSH DPH
PUSH DPL
SETB RS0
CLR ES
CLR RI
MOV A,SBUF
CJNE A,#52H,SR0 ; A <> "R", Jump to write RAM
; Send data to PC
ACALL ST ; Send to PC
AJMP SRE
SR0: MOV R0,#40H ; 40H - 4FH: input buffer
SR1: MOV R3,#21 ; Delay 500mS for wait for data in
SR2: MOV R4,#0
SR3: JBC RI,SR4
DJNZ R4,SR3
DJNZ R3,SR2
AJMP SR5
SR4: MOV A,SBUF
MOV @R0,A
INC R0
AJMP SR1
SR5: ACALL DCOM ; Data conveter
ACALL DSPLY ; Display received data
SRE: SETB ES
POP DPL
POP DPH
POP PSW
POP ACC
RETI
; * * *
; Send data to manager
ST: CLR ES
MOV R1,#40H ; Buffer pointer
MOV R2,#16 ; Send 16 bytes
STX: MOV SBUF,@R1
JNB TI,$
CLR TI
INC R1
DJNZ R2,STX
SETB ES
RET
; ==============================================================================================
; Display routine: Drive LCD mode 16*2 char.
; ==============================================================================================
; Init. LCD
ILCD: CLR LCD_E
CLR LCD_RS ; RS = 0 for Control Register
MOV DPTR,#INSTR
MOV R0,#0
ILCD1: MOV A,R0
MOVC A,@A+DPTR
ACALL WDAT
ACALL D1MS
INC R0
CJNE R0,#4,ILCD1
RET
INSTR: DB 38H,0EH,06H,02H ; 0CH -> 0EH for display cursor
; * * *
; Clear LCD screen
CLCD: MOV R0,#32
MOV R1,#20H
CLC1: MOV @R1,#20H
INC R1
DJNZ R0,CLC1
ACALL DSPLY
RET
; * * *
; Display data in disbuffer 20H - 3FH
DSPLY: MOV R0,#16 ; Write first line
MOV R1,#20H
SETB LCD_RS
DS1: MOV A,@R1
ACALL WDAT
INC R1
DJNZ R0,DS1
CLR LCD_RS ; Move cursor to head of second line
MOV A,#0C0H
ACALL WDAT
MOV R0,#16 ; Write second line
MOV R1,#30H
SETB LCD_RS
DS2: MOV A,@R1
ACALL WDAT
INC R1
DJNZ R0,DS2
CLR LCD_RS ; Move cursor to home
MOV A,#02H
ACALL WDAT
RET
WDAT: CLR LCD_RW ; Write a data in A to LCD
SETB LCD_E
ACALL D1MS
MOV P1,A
ACALL D1MS
CLR LCD_E
SETB LCD_RW
RET
; ----------------------------------------------------------------------------------------------
; Display CRAET & 755-3759085
; ----------------------------------------------------------------------------------------------
CREAT: MOV DPTR,#CREAD ; Display "CREAT ELE.DESIGN"
MOV R1,#20H
ACALL TAB32
ACALL DSPLY
RET
CREAD: DB 43H,52H,45H,41H,54H,20H,45H,4CH
DB 45H,2EH,44H,45H,53H,49H,47H,4EH
DB 54H,45H,4CH,3AH,20H,37H,35H,35H
DB 2DH,33H,37H,35H,39H,30H,38H,35H
TAB32: MOV R0,#0
TA321: MOV A,R0 ; Tabling for display
MOVC A,@A+DPTR
MOV @R1,A
INC R0
INC R1
CJNE R0,#32,TA321
RET
; ==============================================================================================
; General routine: Use R6,R7,R2
; ==============================================================================================
D1MS: MOV R7,#0F8H ; Delay 1ms sub
DJNZ R7,$
NOP
RET
D20MS: MOV R6,#20 ; Delay 20ms sub
D20M1: MOV R7,#0F8H
DJNZ R7,$
DJNZ R6,D20M1
RET
DHMS: MOV R6,#100 ; Delay 20ms sub
DHM1: MOV R7,#0F8H
DJNZ R7,$
DJNZ R6,DHM1
RET
D1S: MOV R5,#10
D11: ACALL DHMS
DJNZ R5,D11
RET
D3S: MOV R5,#30
D31: ACALL DHMS
DJNZ R5,D31
D32: RET
; ----------------------------------------------------------------------------------------------
; HEX - BCD - ASCII : 40H...4FH -> 20H,21H,.....3EH,3FH -> ASCII
DCOM: MOV R2,#16
MOV R1,#40H
MOV R0,#20H
DC1:
MOV A,@R1
PUSH ACC
SWAP A
ANL A,#0FH
MOV @R0,A
POP ACC
ANL A,#0FH
INC R0
MOV @R0,A
INC R0
INC R1
DJNZ R2,DC1
; BCD -> ASCII
MOV R2,#32
MOV R1,#20H
DC2: MOV A,@R1
MOV DPTR,#NUMB
MOVC A,@A+DPTR
MOV @R1,A
INC R1
DJNZ R2,DC2
RET
NUMB: DB 30H,31H,32H,33H,34H,35H,36H,37H
DB 38H,39H,41H,42H,43H,44H,45H,46H
; ==============================================================================================
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -