📄 2cbus.asm
字号:
ansower_ck_bit bit 00h
sda bit p1.6
scl bit p1.7
led_run bit p1.0
led_right bit p1.1
led_wrong bit p1.2
data_txd equ 30h
data_rxd equ 40h
sla_addr equ 50h
suba_addr equ 51h
number_byte equ 52h
ORG 0000H
LJMP start
ORG 0003H
reti
ORG 000BH
reti
ORG 0023H
reti
ORG 0030H
start: mov sp,#60h
;mov data_txd,#03h
sjmp main
main: nop
nop
mov 50h,#0a0h
mov 51h,#30h
mov 30h,#00h
mov 31h,#01h
mov 32h,#02h
mov 33h,#03h
mov 34h,#04h
mov 35h,#05h
mov 36h,#06h
mov 37h,#07h
mov 38h,#08h
mov 39h,#09h
mov 3ah,#0ah
mov 3bh,#0bh
mov 3ch,#0ch
mov 3dh,#0dh
mov 3eh,#0eh
mov 3fh,#0fh
mov number_byte,#16
acall write_in_byte
acall d1s
mov 50h,#0a0h
mov 51h,#50h
mov 30h,#10h
mov 31h,#11h
mov 32h,#12h
mov 33h,#13h
mov 34h,#14h
mov 35h,#15h
mov 36h,#16h
mov 37h,#17h
mov 38h,#18h
mov 39h,#19h
mov 3ah,#1ah
mov 3bh,#1bh
mov 3ch,#1ch
mov 3dh,#1dh
mov 3eh,#1eh
mov 3fh,#1fh
mov number_byte,#16
acall write_in_byte
acall d1s
full:
mov 50h,#0a0h
mov 51h,#50h
mov number_byte,#16
acall read_in_byte
acall d1s
mov a,41h
cjne a,#01h,wrong_0
cpl led_right
sjmp full
wrong_0: cpl led_wrong
ajmp main
;----------------------------
start_iic: setb sda
nop
setb scl
nop
nop
nop
nop
nop
clr sda
nop
nop
nop
nop
clr scl
nop
ret
;------------------------------
stop_iic: clr sda
nop
nop
setb scl
nop
nop
nop
nop
nop
setb sda
nop
nop
nop
nop
nop
ret
;-----------------------------
re_ck_iic: clr sda
nop
nop
setb scl
nop
nop
nop
nop
nop
clr scl
nop
nop
ret
;------------------------------
no_re_ck_iic: setb sda
nop
nop
setb scl
nop
nop
nop
nop
nop
clr scl
nop
nop
ret
;---------------------------------
test_re_bit_iic:setb sda
nop
nop
setb scl
clr ansower_ck_bit
nop
nop
mov c,sda
jc cend
setb ansower_ck_bit
cend: nop
clr scl
nop
ret
;---------------------------------------
;in:acc
;---------------------------------------
wr_byte_iic: mov r0,#08h
wr_0: rlc a ;入口参数
jc wr_bit_1
sjmp wr_bit_0
wlp1: djnz r0,wr_0
nop
ret
wr_bit_1: setb sda
nop
setb scl
nop
nop
nop
nop
nop
clr scl
sjmp wlp1
wr_bit_0: clr sda
nop
setb scl
nop
nop
nop
nop
nop
clr scl
sjmp wlp1
;----------------------------------------
;out:acc
;----------------------------------------
re_byte_iic: mov r0,#08h
setb sda
clr a
re_byte_1: mov c,sda
rlc a ;出口参数
setb scl
nop
nop
nop
clr scl
nop
nop
nop
djnz r0,re_byte_1
ret
;--------------------------------------
;number_byte,sla_addr,suba_addr
;data_txd,
;
;---------------------------------------
write_in_byte: mov r3,number_byte
acall start_iic
mov a,sla_addr
acall wr_byte_iic
acall test_re_bit_iic
jnb ansower_ck_bit,no_re_out
mov a,suba_addr
acall wr_byte_iic
acall test_re_bit_iic
mov r1,#data_txd ;30h
wr_data: mov a,@r1
acall wr_byte_iic
acall test_re_bit_iic
jnb ansower_ck_bit,write_in_byte
inc r1
djnz r3,wr_data
no_re_out: acall stop_iic
ret
;-------------------------------------
;number_byte,sla_addr,suba_addr
;data_rxd,
;-------------------------------------
read_in_byte:
mov r3,number_byte
acall start_iic
mov a,sla_addr
acall wr_byte_iic
acall test_re_bit_iic
jnb ansower_ck_bit,read_no_out
mov a,suba_addr
acall wr_byte_iic
acall test_re_bit_iic
acall start_iic
mov a,sla_addr
inc a
acall wr_byte_iic
acall test_re_bit_iic
jnb ansower_ck_bit,read_in_byte
mov r1,#data_rxd ;40h
re_1: acall re_byte_iic
mov @r1,a
djnz r3,sack
acall no_re_ck_iic
read_no_out: acall stop_iic
ret
sack: acall re_ck_iic
inc r1
sjmp re_1
d1s: push 06h
nop
mov r6,#200
nop
d1s_s: nop
lcall d1ms
lcall d1ms
lcall d1ms
lcall d1ms
lcall d1ms
nop
djnz r6,d1s_s
pop 06h
ret
dms: push 06h
nop
mov r6,#50
nop
dms_s: nop
lcall d1ms
lcall d1ms
lcall d1ms
lcall d1ms
nop
djnz r6,dms_s
pop 06h
ret
d10ms: push 07h
mov r7,#2
nop
d10: nop
nop
lcall d1ms
djnz r7,d10
pop 07h
ret
d1ms: nop
mov r5,#0ffh
nop
d1ms_1: nop
nop
nop
nop
nop
nop
djnz r5,d1ms_1
ret
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -