?? ds12887.asm
字號:
BIT_CNT DATA 30H
DELAY1 DATA 31H
DECIMAL DATA 32H
REC_BUF DATA 20H
SEND_BUF DATA 21H
CS BIT P1.0
CLK BIT P1.1
DIO BIT P1.2
KEY BIT P3.2
ORG 00H
AJMP RESET
ORG 0003H
AJMP MAIN_LP
ORG 0013H
LJMP READDS
ORG 80H
RESET:
SETB CS
SETB KEY
SETB DIO
MOV IE, #85H
MOV IP,#00000001B
CLR IT0
CLR IT1
MOV DELAY1,#25 ;延時25MS
RST_DELAY1:
DJNZ DELAY1,RST_DELAY1
MOV SEND_BUF,#10100100B ;初始化命令
LCALL SEND
SETB CS
INIT: SJMP $
START: MOV DPTR,#0AH
MOV A,#00100000B ;設置寄存器A
MOVX @DPTR,A
INC DPTR
MOV A,#10000110B ;設置寄存器B
MOVX @DPTR,A
MOV DPTR,#00H ;設置秒
MOV A,#00H
MOVX @DPTR,A
INC DPTR ;設置秒報警
MOVX @DPTR,A
INC DPTR
MOV A,#14 ;設置分
MOVX @DPTR,A
INC DPTR
MOV A,#00H ;設置分報警
MOVX @DPTR,A
INC DPTR
MOV A,#12 ;設置時
MOVX @DPTR,A
INC DPTR
MOV A,#00H ;設置時報警
MOVX @DPTR,A
INC DPTR
MOV A,#02 ;設置星期
MOVX @DPTR,A
INC DPTR
MOV A,#12 ;設置日
MOVX @DPTR,A
INC DPTR
MOV A,#04 ;設置年
MOVX @DPTR,A
MOV A,#00010110B
MOV DPTR,#0BH
MOVX @DPTR,A
RET
READDS: MOV DPTR, #00H
MOVX A, @DPTR
MOV B,#10 ;10 進制轉換
DIV AB
MOV DECIMAL,A
MOV SEND_BUF,#10000001B
LCALL SEND
MOV SEND_BUF,DECIMAL
LCALL SEND
SETB CS
MOV SEND_BUF,#10000000B
LCALL SEND
MOV SEND_BUF,B
LCALL SEND
SETB CS
MOV DPTR,#02
MOVX A,@DPTR
MOV B,#10 ;10 進制轉換
DIV AB
MOV DECIMAL,A
MOV SEND_BUF,#10000011B
LCALL SEND
MOV SEND_BUF,DECIMAL
LCALL SEND
SETB CS
MOV SEND_BUF,#10000010B
LCALL SEND
MOV SEND_BUF,B
LCALL SEND
SETB CS
MOV DPTR,#04
MOVX A,@DPTR
MOV B,#10 ;10 進制轉換
DIV AB
MOV DECIMAL,A
MOV SEND_BUF,#10000101B
LCALL SEND
MOV SEND_BUF,DECIMAL
LCALL SEND
SETB CS
MOV SEND_BUF,#10000100B
LCALL SEND
MOV SEND_BUF,B
LCALL SEND
SETB CS
MOV DPTR,#0CH
MOVX A,@DPTR
L1: JNB P3.3,L1
RETI
MAIN_LP:
MOV SEND_BUF,#00010101B ;有鍵按下,發送讀鍵盤命令
LCALL SEND
LCALL RECEIVE ;讀鍵盤
SETB CS
MOV B,#10 ;10 進制轉換
MOV A,REC_BUF
DIV AB
MOV DECIMAL,A
MOV SEND_BUF,#10100001B ;左移2 次.
LCALL SEND
SETB CS
MOV SEND_BUF,#10100001B
LCALL SEND
SETB CS
MOV SEND_BUF,#10000001B ;下載數據且譯碼.
LCALL SEND
MOV SEND_BUF,DECIMAL ;發送10 位數到zlg7289A 顯示
LCALL SEND
SETB CS
MOV SEND_BUF,#10000000B ;下栽數據且譯碼.
LCALL SEND
MOV SEND_BUF,B ;發送個位數據到zlg7289A
LCALL SEND
SETB CS
; MOV SEND_BUF,#10001000B ;設定剛發送數據顯示為閃爍
; LCALL SEND
; MOV SEND_BUF,#11111100B
; LCALL SEND
; SETB CS
MAIN_LP2:
JNB KEY,MAIN_LP2 ;等待鍵松開.
MOV A,REC_BUF
CJNE A,#23,L2
LCALL START
L2: RETI
;-----------------------------------------
;發送一字節到zlg7289A,高位在前
;-----------------------------------------
SEND:
MOV BIT_CNT,#8 ;設發送位數為8 位.
CLR CS
LCALL LONG_DELAY ;延時50 微秒.
SEND_LP:
MOV A,SEND_BUF
RLC A
MOV SEND_BUF,A
MOV DIO,C
NOP
NOP
SETB CLK
LCALL SHORT_DELAY ;延時10 微秒.
CLR CLK
LCALL SHORT_DELAY ;延時10 微秒.
DJNZ BIT_CNT,SEND_LP
CLR DIO
RET
;-------------------------------------
;由zlg7289A 接收一字節數據,高位在前
;-------------------------------------
RECEIVE:
MOV BIT_CNT,#8 ;定義接收8 位.
SETB DIO
LCALL LONG_DELAY ;延時50 微秒.
RECEIVE_LP:
SETB CLK
LCALL SHORT_DELAY ;延時10 微秒.
MOV C,DIO ;接收數據送REC_BUF 低位.
MOV A,REC_BUF
RLC A
MOV REC_BUF,A
CLR CLK
LCALL SHORT_DELAY ;延時10 微秒.
DJNZ BIT_CNT,RECEIVE_LP
CLR DIO
RET
LONG_DELAY:
MOV DELAY1,#25
DJNZ DELAY1,$
RET
SHORT_DELAY:
MOV DELAY1,#4
DJNZ DELAY1,$
RET
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -