;;***********************************
;;
;;程序功能:写字节数据,将要保存的数字写人到epprom中以防掉电丢失
;;调用子程序:start_i2c,stop_i2c,wrbyte,cack_i2c,
;;输入参数:epp_save
;;输出参数:epp_out***********************************************
;;
;;定义局部变量
.data
i2i_buf_data ds 1
temp ds 1
flag3 ds 1
f_f0 equ flag3.0
;;--------------------------------------
.const
sda equ fp51 ;;数据线
sdam equ fp51m
scl equ fp50 ;;时钟线
sclm equ fp50m
;;---------------------------------------
.code ;;程序入口
;;---------------------------------------
i2i_24c02:
bts1 f_start_write ;;
jmp i2i_24c02_90
bclr f_start_write
b0bset sdam
b0bset sclm
call delay_5us
;;-------------------------------------
write_24c02:
call start_i2i ;;启动起始信号
mov a,#10100000b
call write_8bit ;;写芯片代码
call check_ack ;;读应答信号
bts0 f_f0 ;;是否有应答信号
jmp i2i_24c02_90
;;------------------------------------
mov a,#00 ;;写起始数据
call write_8bit
call check_ack
bts0 f_f0
jmp i2i_24c02_90
;;-------------------------------------
mov a,wk00 ;;数据1
call write_8bit
call check_ack
bts0 f_f0
jmp i2i_24c02_90
;;-----------------------------
mov a,wk01 ;;数据2
call write_8bit
call check_ack
bts0 f_f0
jmp i2i_24c02_90
;;----------------------------
mov a,wk02 ;;数据3
call write_8bit
call check_ack
bts0 f_f0
jmp i2i_24c02_90
;;----------------------------
mov a,wk03 ;;数据4
call write_8bit
call check_ack
bts0 f_f0
jmp i2i_24c02_90
;;-----------------------------
mov a,b_key_mode ;;数据5
call write_8bit
call check_ack
bts0 f_f0
jmp i2i_24c02_90
call stop_i2i ;;停止发送
i2i_24c02_90:
ret
;;---------------------------------------
;;-------------------------------
;;以下为各个子模块程序
;;
;;
;;*******************************
delay_5us:
jmp $+1
jmp $+1
jmp $+1
jmp $+1
jmp $+1
jmp $+1
jmp $+1
jmp $+1
jmp $+1
jmp $+1
ret
;;-------------------------------
;;--------------------------------
;;发起起始位
;;********************************
start_i2i:
bset sda
bset scl
call delay_5us
bclr sda
call delay_5us
bclr scl
call delay_5us
ret
;;--------------------------------
;;----------------------------------
;;发送停止信号条件
;;*******************************
stop_i2i:
bclr sda
bset scl
call delay_5us
bset sda
call delay_5us
bclr scl
ret
;;--------------------------------
ack_i2i:
bclr sda
bset scl
call delay_5us
bclr scl
ret
;;----------------------------------
;;-------------------------------
;;检查应答信号子程序,没有应答信号f_f0=1
;;-------------------------------;;
check_ack:
bclr sdam
bset sda
bset scl
call delay_5us
bclr f_f0
bts0 sda
jmp check_ask10
call delay_5us
bclr scl
jmp check_ask20
check_ask10:
call delay_5us
bset f_f0 ;;无应答信号
b0bclr scl
check_ask20:
bset sdam
nop
bset sda
ret
;;---------------------------------
ask:
call delay_5us
bclr sda
call delay_5us
bset scl
call delay_5us
bclr scl
call delay_5us
ret
;;
;;功能:发无确认信号
;;
;;---------------------------------
noask:
bset sda
bset scl
call delay_5us
bclr scl
ret
;;----------------------------------
;;功能:写一个字节数据
;;input:i2i_buf_data,temp
;;**********************************
write_8bit:
mov i2i_buf_data,a
clr temp
;;-------------------------------
write_8bit10:
rlcm i2i_buf_data
bts1 fc
jmp write_8bit20
bset sda
bset scl
call delay_5us
bclr scl
jmp write_8bit30
write_8bit20:
bclr sda
bset scl
call delay_5us
bclr scl
write_8bit30:
incms temp
cjb_ temp,#8,write_8bit10
clr temp
ret
;--------------------------------
;;功能:读一个数据i2i_buf_data放到的数据
;;
;;*********************************
read_8bit:
clr i2i_buf_data ;;
clr temp ;;
read_8bit10:
bclr sdam
call delay_5us
bset scl
call delay_5us
b0bclr fc
bts0 sda
bset fc
rlcm i2i_buf_data
bclr scl
bset sdam
incms temp
cjb_ temp,#8,read_8bit10
clr temp
ret
;;
;;----------------------------------;;
;;功能
;;开机时读取eeprom的值共4组数据
;;***********************************
read_24c02:
call start_i2i
mov a,#10100000b
call write_8bit
call check_ack
bts0 f_f0
ret
mov a,#00
call write_8bit
call check_ack
bts0 f_f0
ret
;;-----------------------------
read_ok:
call start_i2i
mov a,#10100001b
call write_8bit
call check_ack
bts0 f_f0
ret
;;--------------------------------
;;------------------------------
read_24c02_10:
call read_8bit ;;读数据1
call ask
mov_ i2i_data1,i2i_buf_data
;;--------------------------------
call read_8bit
call ask ;;读数据2
mov_ i2i_data2,i2i_buf_data
;;--------------------------------
call read_8bit
call ask ;;读数据3
mov_ i2i_data3,i2i_buf_data
;;--------------------------------
call read_8bit ;;数据4
call ask
mov_ i2i_data5,i2i_buf_data
;;-------------------------------
call read_8bit
call ask ;;读数据5
mov_ i2i_data4,i2i_buf_data
;;----------------------------------------------
call stop_i2i
ret |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?注册
x
|