;for water.colok of ningbo
FHZ EQU 20H
ADDR_H EQU 21H
ADDR_L EQU 22H
TEMP EQU 23H ; 作堆栈用
WR24_COUNT EQU 24H ; 写入存储器内容的字节数
RD24_COUNT EQU 25H ;读出存储器内容的字节数
RAM1 EQU 26H ;存放存储器写入/读出的数据
ZFSHU EQU 0050H ;演示幅数
BMP0 EQU 0700H ;演示起始幅地址,共计40幅
BMPGZH EQU 100H ;观众画的图
DAT BIT P1.7
STR BIT P3.3
CLK BIT P3.4
ORG 0000H
LJMP 0100H
ORG 0023H
LJMP SIO
ORG 0100H
START:
MOV TMOD,#21H ;T1--REFILL
MOV TH1,#0F4h ;22.1184,9600 BPS
MOV SCON,#050H ; MODE 3,SM2=0
MOV PCON,#80H ; BAUD DOUBLE
MOV IP,#10H ; SIO HIGHEST
MOV TH0,#0H
MOV TL0,#0H
SETB EA
SETB ES
SETB TR1 ;
SETB IT0 ;下降沿触发
SETB PS ;优先权
SETB EX0
MOV PSW,#0
MOV SP, #28H
MOV FHZ,#0E0H
CLR STR
;*****************************************
MOV R1,#0 ;每行38组数据
START1: MOV A,#0FFH
LCALL FS
INC R1
CJNE R1,#38,START1
SETB STR
NOP
NOP
NOP
CLR STR
LCALL YANSHI1
;**************开机初期,让水充满滴管
START31:SETB EA
SETB ES
SETB TR1 ;
SETB IT0 ;下降沿触发
SETB PS ;优先权
SETB EX0
MOV PSW,#0
MOV SP, #28H
;mov a,#022h
;mov r1,#00h
;MOV R0,#00H
;mov dptr,#00h
;fff:
;MOVX @DPTR,A
;inc dptr
;inc r1
;INC A
;cjne r1,#0ffh,fff
;MOV A,#00H
;MOV R1,#00H
;INC R0
;CJNE R0,#0FFH,FFF
;fff1:
;MOVX @DPTR,A
;inc dptr
;inc r1
;cjne r1,#0ffh,fff1;
;MOV R1,#00H
;MOV DPTR,#55H
;EEE:
;MOVX A,@DPTR
;INC DPTR
;INC R1
;CJNE R1,#0FFH,EEE
;NOP
START3: MOV A,FHZ
CJNE A,#0EEH,DISPA
LCALL DISPB ;FHZ=0EEH,说明有新内容,不再显示开机画面
AJMP START3
DISPA: MOV DPTR,#ZFSHU
MOVX A,@DPTR
MOV R3,A ;演示总幅数
MOV R4,#0 ;已经演示完的幅数
DISPA1: MOV A,R4
MOV B,R3
CJNE A,B,DISPA2
AJMP START3
DISPA2: MOV A,R4
MOV B,#6 ;每幅的大小按600H(38位*40行=5F0H)计算
MUL AB
MOV DPTR,#BMP0
MOV B,DPH
ADD A,B
MOV DPH,A ;每幅的高位地址
MOV R0,#0 ;共计40行
MOV R1,#0 ;每行38组数据
LCALL DISPC
INC R4
AJMP DISPA1
DISPAG: MOV R0,#0 ;共计40行
MOV R1,#0 ;每行38组数据
MOV DPTR,#BMPGZH
LCALL DISPC
AJMP START3
DISPB: MOV R2,#20 ;观众画的图循环次数
DISPB1: MOV R0,#0 ;共计40行
MOV R1,#0 ;每行38组数据
MOV DPTR,#BMPGZH
LCALL DISPC
DJNZ R2,DISPB1
MOV FHZ,#0E0H
RET
DISPC: MOVX A,@DPTR
LCALL FS
INC DPTR
INC R1
CJNE R1,#38,DISPC
SETB STR
NOP
NOP
NOP
CLR STR
LCALL YANSHI3 ;水滴生成时间
MOV R1,#0
INC R0
CJNE R0,#40,DISPC
RET
;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
JIESHU: MOV R1,#0 ;每行38组数据
JIESHU1: MOV A,#00H
LCALL FS
INC R1
CJNE R1,#38,JIESHU1
SETB STR
NOP
NOP
NOP
CLR STR
RET
;&&&&&&&&&&&&&终止水滴,结束上一幕
FS: MOV B,#08H
FS1: RLC A
MOV DAT,C
CLR CLK
NOP
SETB CLK
DJNZ B,FS1
RET
YANSHI1: MOV R7,#0FFH
MOV R6,#0FFH
MOV R5,#01Fh;03fH
YANSHI11:DEC R6
NOP
CJNE R6,#00H,YANSHI11
MOV R6,#0FFH
DEC R7
CJNE R7,#00H,YANSHI11
MOV R7,#0FFH
MOV R6,#0FFH
DEC R5
CJNE R5,#00H,YANSHI11
RET
YANSHI3: MOV R7,#0AH
MOV R6,#0FFH
YANSHI31:DEC R6
NOP
CJNE R6,#00H,YANSHI31
MOV R6,#0FFH
DEC R7
CJNE R7,#00H,YANSHI31
RET
SIO: PUSH B
PUSH DPL
PUSH DPH
PUSH PSW
PUSH ACC
JB RI,SIO1 ;
CLR TI ;
SIOQ: POP ACC
POP PSW
POP DPH
POP DPL
POP B
SETB EA
SETB ES
RETI ;DO NOTHING WITH TI
SIO21: AJMP SIO2
SIO1: CLR EA
CLR ES
MOV PSW,#1
LCALL RCV1
JC SIOQ
CJNE A,#'K',SIOQ
LCALL JIESHU ;
LCALL JIESHU ;
MOV A,#'O'
LCALL SND1
NOP
LCALL RCV1
JC SIOQ
CJNE A,#01H,SIO21
LCALL CCJSFS ;储存接收的总副数
MOV R4,#0
SIO10: MOV A,R4
MOV B,R3
CJNE A,B,SIO11
AJMP SIOJQ1
SIO11: MOV A,R4
MOV B,#6 ;每幅的大小按600H(38位*40行=5F0H)计算
MUL AB
MOV DPTR,#BMP0
MOV A,DPH
LCALL JISHOU
INC R4
AJMP SIO10
SIOJQ1: MOV DPTR,#START31
PUSH DPL
PUSH DPH
RETI
CCJSFS: MOV DPTR,#ZFSHU
LCALL RCV1
JC JISHOU11
MOV R3,A
MOVX @DPTR,A
RET
SIO2: CJNE A,#02H,JISHOU11 ;接收观众内容
MOV FHZ,#0EEH
MOV DPTR,#BMPGZH
LCALL JISHOU
AJMP SIOJQ1
JISHOU: MOV R0,#0 ;共计40行
JISHOU1: MOV A,R0
LCALL SND1
LCALL JISHOU7
INC R0
CJNE R0,#40,JISHOU1
RET
JISHOU11:AJMP SIOQ
JISHOUE: MOV A,R0
LCALL SND1
NOP
NOP
JISHOUE1:JBC RI,JISHOU7
AJMP JISHOUE1
JISHOU7: MOV R1,#55H ;每行38组数据
JISHOU71:LCALL RCV1 ;开始接收数据
JC JISHOUE ;发生异常时,请求上位机单行重发
MOVX @DPTR,A
INC DPTR
INC R1
CJNE R1,#7BH,JISHOU71
RET
RCV1: PUSH B ;RECEIVE A BYTE
MOV A,#00H ;
RV11: MOV B,#00H ;
RV12: JBC RI,RV13 ;
NOP
DJNZ B,RV12 ;
RV15: MOV B,#00H ;
RV16: JBC RI,RV13 ;
NOP
DJNZ B,RV16
DJNZ ACC,RV11 ;WAIT FOR 10ms
SETB C ;
SJMP RV14 ;
RV13: MOV A,SBUF ;IF ERROR THEN C=1
CLR C ;
RV14: POP B ;IF ERR C=1
RET ;END OF RCV1
SND1: MOV SBUF,A ;
JNB TI,$ ;
CLR TI ;
RET ;END OF SND1
YANSHI0: MOV R7,#03H
MOV R6,#0FFH
YANSHI01:DEC R6
NOP
CJNE R6,#00H,YANSHI01
MOV R6,#0FFH
DEC R7
CJNE R7,#00H,YANSHI01
RET
END