📄 dt005.asm
字号:
mov a,zdata_h
xrl a,zdata_l
mov 36h,a
mov 37h,#0beh
mov a,#0b4h
MOV SBUF,A
ret
;-----------------------------
sent_B5: ;向PC发送B5 DF_write OK
mov s_point,#32h
mov s_nnn,#6
mov 37h,#0beh
mov a,#0b5h
MOV SBUF,A
ret
;================================================
;串口中断处理程序================================
INTI_SIO: PUSH PSW
PUSH A
SETB RS0 ;选寄存器组1
CLR RS1
JB TI,SEND_X
JB RI,REC
;接收中断-----------
REC: CLR RI
clr tr0
MOV TH0,#0cdH
MOV TL0,#01H ;T0定时5ms
MOV A,SBUF
MOV r0,r_point
mov @r0,a
inc r0
MOV r_point,r0
cjne r0,#38h,rec_next
clr lamp_Y
MOV r_point,#31h
lcall do_pc_cmd ;处理PC命令
ajmp SIO_END
rec_next: setb tr0
ajmp SIO_END
;发送中断-------发送后续字节-----------
SEND_X: CLR TI
mov a,s_nnn
jz sio_end
dec a
mov s_nnn,a
mov r0,s_point
mov a,@r0
inc r0
mov s_point,r0
mov sbuf,a
LJMP SIO_END
;结束串行中断-----------
SIO_END:
CLR RS0
CLR RS1
POP A
POP PSW
RETI
;-----------------------------------------------
init_t0:
clr tr0
MOV r_point,#31h
RETI
;ok====================================================================
;定时器初始化,中断控制;通讯初始化(SIO)
sysini: CLR EA ;关所有中断
MOV TMOD, #00100001B ;T1使用方式2自动重装载方式,T0使用方式1(16位定时器)
MOV SCON, #01010000B ;串口方式1,接收允许为1
MOV TCON, #00000101B ;外部中断INT0,INT1为下降沿触发
MOV IE, #00010010B ;开放串口中断(IE.4)
;禁止总体中断(IE.7),T1中断(IE.3),INT1中断(IE.2),T0中断(IE.1),和INT0中断(IE.0)
MOV IP,#00000000B ;串口和INT0中断设为同级中断
MOV TH0,#80H
MOV TL0,#01H ;T0定时32ms
MOV TH1,#0FDH ;T1 晶振11.0592, 9600 (bit/s) 的定时常数
MOV TL1,#0FDH
MOV PCON,#00H ;与波特率有关,SMOD=0
SETB TR1 ;T1 开始
CLR TR0 ;T0 开始
SETB EA ;开中断总控
RET
;--------------------------------------------
YS500MS: MOV R7,#250
YS001A: MOV R6,#200
nop
nop
nop
nop
DJNZ R7,YS002A
RET
YS002A: DJNZ R6,YS002A
AJMP YS001A
;------------------------------------
YS50MS: MOV R7,#250
YS001B: MOV R6,#100
DJNZ R7,YS002B
RET
YS002B: DJNZ R6,YS002B
AJMP YS001B
;-----------------------------------------------
write_2083_word: ; cmd(32h), msb(34h), lsb(35h)
call tstart
jc Tx49 ; abort if bus not available
MOV a, #ad_2083
clr acc.0 ; specify write operation
call tshout ; send device address
jc Tx48 ; abort if no acknowledge
mov a, 32h ; send cmd byte of address
call tshout ;
jc Tx48 ; abort if no acknowledge
mov a, 35h ; get data lsb
call tshout ; send data
jc Tx48 ; abort if no acknowledge
mov a, 34h ; get data msb
call tshout ; send data
jc Tx48 ; abort if no acknowledge
clr c ; clear error flag
Tx48:
call tstop
Tx49:
ret
;-----------------------------------------------
read_2083_word: ;读回数据word 在 zdata_h,zdata_l
push b
call tstart
jc Tx47 ; abort if bus not available
MOV a, #ad_2083 ; add 1307 fixed address
clr acc.0 ; specify write operation
call tshout ; send device address
jc Tx46 ; abort if no acknowledge
mov a, pc_cmd_code ; send 命令号
call tshout ;
jc Tx46 ; abort if no acknowledge
; Call Read word function.
call tstart
jc Tx46 ; abort if bus not available
MOV a, #ad_2083 ; add 1307 fixed address
setb acc.0 ; specify read operation
call tshout ; send device address
jc Tx46 ; abort if no acknowledge
call tshin ; receive data byte(L)
mov zdata_l,a
call tACK ; do acknowledge byte
call tshin ; receive data byte(H)
mov zdata_h,a
call tNAK ; do not acknowledge byte
clr c ; clear error flag
call tstop
jmp Tx47
Tx46: mov i2c_err_num,#46h
call tstop
jmp tx488
Tx47: mov i2c_err_num,#47h
tx488: pop b
ret
;-----------------------------------------
read_block_xx:
mov 41h,#0b3h
mov 42h,pc_cmd_code
mov a,pc_cmd_code
cpl a
mov 43h,a
push b
call tstart
jc Tx147 ; abort if bus not available
MOV a, #ad_2083 ; add 1307 fixed address
clr acc.0 ; specify write operation
call tshout ; send device address
jc Tx146 ; abort if no acknowledge
mov a, #20h ; send 命令号
call tshout ;
jc Tx146 ; abort if no acknowledge
; Call Read word function.
call tstart
jc Tx146 ; abort if bus not available
MOV a,#ad_2083 ; add 1307 fixed address
setb acc.0 ; specify read operation
call tshout ; send device address
jc Tx146 ; abort if no acknowledge
call tshin
mov 44h,a ; byte_lenth
mov block_xrl,a
call tACK
mov r0,byte_lenth
dec r0
mov r1,#45h
shin_next: call tshin
mov @r1,a ; D1 -- Dn
xrl a,block_xrl
mov block_xrl,a
call tACK
inc r1
djnz r0,shin_next
call tshin
mov @r1,a ; byte lenth
xrl a,block_xrl
mov block_xrl,a
call tNAK ; do not acknowledge byte
clr c ; clear error flag
call tstop
inc r1
mov @r1,block_xrl
inc r1
mov @r1,#0beh
clr c
jmp Tx147
Tx146:
call tstop
Tx147:
pop b
ret
;-----------------------------------------------
read_DF: ;PC发送读Data Flash,read_DF 串行命令格式
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -