📄 iic_asm.asm
字号:
SCL bit P1.1 ;24c512时钟口线 //这是我的片选信号P23()
SDA bit P1.0 ;24c512数据口线 //这是我的片选信号P22()
WP bit P2.3 ;24c512数据口线 //这是我的片选信号P22()
index equ 60h
addrlo equ 61h
addrhi equ 62h
kount equ 63h ;24c512占用RAM 地址60---63h
EnableWrite equ 64h ;如果写入的地址小于150h,这时该值为aa-->enable ,else 不能写!
DDDDDCODE SEGMENT CODE UNIT ;程序段
;*********************************************************
;H_ADDR IN R7;L_ADDR IN R5; BYTE NUMBER IN R3
;*********************************************************
;24C512写程序
;要写的数据r3个防在RAM oxd0 开始;
;写入24C512的r7_r5开始的地址
PUBLIC _IIC_WRITE_ONEBYTE
RSEG DDDDDCODE
_IIC_WRITE_ONEBYTE: mov r0,#0d0h
mov r4,#0a6h
mov kount,r3
mov index,r0
mov addrlo,r5
mov addrhi,r7 ;0020,40,8
;---------------------------------------------
cjne r7,#000h,writeokA ;如果低位为0
mov r0,#064h
cjne @r0, #0aah ,endme
jmp writeok
;---------------------------------------------
writeokA:
cjne r7,#001h,writeok ;如果低位为1
cjne r5,#050h,writeokB ;如果高位为1
jmp writeok
writeokB: jnc writeok
mov r0,#064h
cjne @r0, #0aah ,endme
jmp writeok
writeok: mov r0,#0d0h
CLR WP
call write_block ////
SETB WP
endme:
mov r0,#000h
mov EnableWrite,r0
ret
;24C512读程序
;从24C512 的r7_r5地址读出r3个数据放在oxd0;
PUBLIC _IIC_READ_ONEBYTE ;入口地址
RSEG DDDDDCODE
_IIC_READ_ONEBYTE: mov r0,#0d0H
mov r4,#0a6h
mov addrlo,r5 ;0020 READ
mov addrhi,r7
mov kount,r3
mov index ,r0
call verify_block_fill
ret
;以下为读写模块;请不要改变
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -