📄 zxce_1_cpu2.asm
字号:
;================以下关于X1226的子程序====================
;------------初始化X1226-------------
init1226_w:
nop
nop
nop
nop
nop
nop
nop
nop
lcall set_wdot
init1226_w_1:
nop
nop
nop
nop
nop
nop
nop
nop
nop
lcall set_wdot
lcall start
mov a,#11011110b
lcall wrbyte
lcall cack
jnb ack,err_init1226_w
mov a,#00h
lcall wrbyte
lcall cack
jnb ack,err_init1226_w
mov a,#3fh
lcall wrbyte
lcall cack
jnb ack,err_init1226_w
mov a,#02h
lcall wrbyte
lcall cack
jnb ack,err_init1226_w
lcall stop
nop
nop
nop
nop
nop
nop
nop
nop
lcall start
mov a,#11011110b
lcall wrbyte
lcall cack
jnb ack,err_init1226_w
mov a,#00h
lcall wrbyte
lcall cack
jnb ack,err_init1226_w
mov a,#3fh
lcall wrbyte
lcall cack
jnb ack,err_init1226_w
mov a,#06h
lcall wrbyte
lcall cack
jnb ack,err_init1226_w
lcall stop
lcall set_wdot
ret
err_init1226_w:
lcall stop
ljmp init1226_w_1
;-------------发I2C总线起始位-------------------
start:
setb isda
nop
nop
nop
nop
setb iscl
nop
nop
nop
nop
nop
nop
nop
clr isda
nop
nop
nop
nop
nop
nop
nop
clr iscl
nop
nop
nop
lcall set_wdot
ret
;-----------------发I2C总线停止位---------------------
stop:
clr isda
nop
nop
nop
nop
nop
nop
setb iscl
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
setb isda
nop
nop
nop
nop
nop
nop
nop
nop
nop
lcall set_wdot
ret
;---------------检查应答子程序----------------
cack:
setb isda
nop
nop
nop
nop
nop
nop
nop
setb iscl
clr ack
nop
nop
nop
nop
nop
nop
nop
mov c,isda
jc cend
setb ack
cend:
nop
nop
nop
nop
nop
nop
clr iscl
nop
nop
nop
nop
nop
nop
lcall set_wdot
ret
;--------------检查应答信号--------------------
mack:
clr isda
nop
nop
nop
nop
nop
nop
nop
setb iscl
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
clr iscl
nop
nop
nop
nop
nop
nop
nop
lcall set_wdot
ret
;--------------检查非应答信号----------------
mnack:
setb isda
nop
nop
nop
nop
nop
nop
nop
setb iscl
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
clr iscl
nop
nop
nop
nop
nop
nop
nop
lcall set_wdot
ret
;------将要发送的字节放入ACC中,每发送一个字节要调用一次send_cack--------
wrbyte:
nop
nop
nop
nop
mov r0,#08h
wlp:
rlc a
jc wr1
sjmp wr0
wlp1:
djnz r0,wlp
nop
nop
nop
nop
nop
ret
wr1:
setb isda
nop
nop
nop
nop
setb iscl
lcall set_wdot
nop
nop
nop
nop
nop
nop
nop
clr iscl
sjmp wlp1
wr0:
clr isda
nop
nop
nop
nop
setb iscl
lcall set_wdot
nop
nop
nop
nop
nop
nop
nop
clr iscl
sjmp wlp1
;------读出值在ACC中,每读取一个字节要发送一个应答/非应答信号-------
rdbyte:
nop
nop
nop
mov r0,#08h
rlp:
setb isda
nop
nop
nop
setb iscl
nop
nop
nop
nop
mov c,isda
mov a,r2
clr iscl
rlc a
mov r2,a
nop
nop
nop
nop
nop
djnz r0,rlp
lcall set_wdot
ret
;---------------write a byte to ee2rom--------------------
write_byte:
nop
nop
lcall set_wdot
write_byte1:
nop
lcall set_wdot
lcall start
mov a,sla
lcall wrbyte
lcall cack
jnb ack,err_write_byte
mov a,addrh
lcall wrbyte
lcall cack
jnb ack,err_write_byte
mov a,addrl
lcall wrbyte
lcall cack
jnb ack,err_write_byte
mov a,numbyte
lcall wrbyte
lcall cack
jnb ack,err_write_byte
lcall stop
lcall set_wdot
ret
err_write_byte:
lcall stop
ljmp write_byte1
;-----------read a byte from ee2rom---------------
read_byte:
lcall set_wdot
read_byte1:
nop
lcall set_wdot
lcall start
mov a,sla
lcall wrbyte
lcall cack
jnb ack,err_read_byte
mov a,addrh
lcall wrbyte
lcall cack
jnb ack,err_read_byte
mov a,addrl
lcall wrbyte
lcall cack
jnb ack,err_read_byte
lcall start
mov a,sla
inc a
lcall wrbyte
lcall cack
jnb ack,err_read_byte
lcall rdbyte
lcall mnack
lcall set_wdot
ret
err_read_byte:
lcall stop
ljmp read_byte1
;---------------向1226中写发送号码-----------------
w_ee_tx_num:
push dpl
push acc
push dph
push b
lcall set_wdot
mov dptr,#df_tx_num ;dptr
mov b,#ee_tx_num
clr a
movc a,@a+dptr
w_ee_dfnum1_1:
mov numbyte,a
mov sla,#10101110b
mov addrh,#00h
mov addrl,b
lcall init1226_w
lcall write_byte
inc b
inc dptr ;dptr+1
clr a
movc a,@a+dptr
cjne a,#0eeh,w_ee_dfnum1_1
pop b
pop acc
pop dph
pop dpl
ret
;---------------读发送号码----------------------
r_ee_tx_num:
push dpl
push dph
push acc
push 01h
lcall set_wdot
mov r1,#0bh
mov b,#ee_tx_num
mov dptr,#cen_t_num ;dptr
r_ee_dfnum1_1:
mov sla,#10101110b
mov addrh,#00h
mov addrl,b
lcall init1226_w
lcall read_byte
movx @dptr,a
inc dptr
inc b
djnz r1,r_ee_dfnum1_1
pop 01h
pop acc
pop dph
pop dpl
ret
;-------------向1226中写接收号码-----------------
w_ee_rx_num:
push dpl
push dph
push acc
push b
lcall set_wdot
mov dptr,#df_rx_num ;dptr
mov b,#ee_rx_num
clr a
movc a,@a+dptr
w_ee_dfnum2_1:
mov numbyte,a
mov sla,#10101110b
mov addrh,#00h
mov addrl,b
lcall init1226_w
lcall write_byte
inc b
inc dptr ;dptr+1
clr a
movc a,@a+dptr
cjne a,#0eeh,w_ee_dfnum2_1
pop b
pop acc
pop dph
pop dpl
ret
;------------------读接收号码-----------------------
r_ee_rx_num:
push dpl
push dph
push acc
push 01h
lcall set_wdot
mov r1,#0bh
mov b,#ee_rx_num
mov dptr,#cen_r_num ;dptr
r_ee_dfnum2_1:
mov sla,#10101110b
mov addrh,#00h
mov addrl,b
lcall init1226_w
lcall read_byte
movx @dptr,a
inc dptr
inc b
djnz r1,r_ee_dfnum2_1
pop 01h
pop acc
pop dph
pop dpl
ret
;--------------写报警阀值-----------------
w_ee_df_alm:
push dph
push dpl
push acc
push b
lcall set_wdot
mov dptr,#df_alm_data ;报警值首址
mov b,#ee_alm_num
clr a
movc a,@a+dptr
w_ee_df_alm_1:
mov numbyte,a
mov sla,#10101110b
mov addrh,#00h
mov addrl,b
lcall init1226_w
lcall write_byte
inc b
inc dptr
clr a
movc a,@a+dptr
cjne a,#0eeh,w_ee_df_alm_1
pop b
pop acc
pop dpl
pop dph
ret
;------------读报警阀值---------------
r_ee_df_alm:
push dph
push dpl
push acc
push 01h
lcall set_wdot
mov r1,#03h
mov dptr,#alm_buf ;报警阀值缓冲区
mov b,#ee_alm_num
r_ee_df_alm_1:
mov sla,#10101110b
mov addrh,#00h
mov addrl,b
lcall init1226_w
lcall read_byte
movx @dptr,a
inc b
inc dptr
djnz r1,r_ee_df_alm_1
pop 01h
pop acc
pop dpl
pop dph
ret
;--------写报警频率(次数)-----------
w_ee_df_pd:
push dph
push dpl
push acc
push b
lcall set_wdot
mov dptr,#df_alm_pdu
mov b,#ee_pd_num
clr a
movc a,@a+dptr
w_ee_df_pd_1:
mov numbyte,a
mov sla,#10101110b
mov addrh,#00h
mov addrl,b
lcall init1226_w
lcall write_byte
inc b
inc dptr
clr a
movc a,@a+dptr
cjne a,#0eeh,w_ee_df_pd_1
pop b
pop acc
pop dpl
pop dph
ret
;-------------读报警频率(次数)--------------
r_ee_df_pd:
push dph
push dpl
push acc
push b
push 01h
lcall set_wdot
mov r1,#01h
mov dptr,#pdu_buf
mov b,#ee_pd_num
r_ee_df_pd_1:
mov sla,#10101110b
mov addrh,#00h
mov addrl,b
lcall init1226_w
lcall read_byte
movx @dptr,a
inc b
inc dptr
djnz r1,r_ee_df_pd_1
pop 01h
pop b
pop acc
pop dpl
pop dph
ret
;-----------写报警时间间隔-------------
w_ee_df_tim:
push dph
push dpl
push acc
push b
lcall set_wdot
mov dptr,#df_alm_tim
mov b,#ee_tim_num
clr a
movc a,@a+dptr
w_ee_df_tim_1:
mov numbyte,a
mov sla,#10101110b
mov addrh,#00h
mov addrl,b
lcall init1226_w
lcall write_byte
inc b
inc dptr
clr a
movc a,@a+dptr
cjne a,#0eeh,w_ee_df_tim_1
pop b
pop acc
pop dpl
pop dph
ret
;-------------读报警时间间隔-------------
r_ee_df_tim:
push dph
push dpl
push acc
push b
push 01h
lcall set_wdot
mov r1,#01h
mov dptr,#tim_buf
mov b,#ee_tim_num
r_ee_df_tim_1:
mov sla,#10101110b
mov addrh,#00h
mov addrl,b
lcall init1226_w
lcall read_byte
movx @dptr,a
inc b
inc dptr
djnz r1,r_ee_df_tim_1
pop 01h
pop b
pop acc
pop dpl
pop
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -