📄 4924_wr_an.asm
字号:
; file name: 4924_WR.asm
; 作 者: 盛扬半导体(上海)有限公司软件部
; 目 的: 用HT49系列单片机控制24系列eeprom
; 注 意: 在mask_option中,PA0~PA3须选择NMOS有上拉电阻
include ht49r30a-1.inc
;----------------------------
;equ定义区间
scl equ pa.3 ;时钟信号引脚定义
sda equ pa.1 ;串行数据引脚定义
read_out equ [70h] ;写暂存器
write_in equ [71h] ;读暂存器
word_address equ [72h]
data_8 equ [73h]
;----------------------------
;----------------------------
;宏定义
;延迟宏,延迟100微秒
d_1 macro
local label
mov a,64h
mov delay,a
label:
sdz delay
jmp label
endm
;---------------------------
;---------------------------
;数据区
e2prom .section 'data'
delay db ?
;----------------------------
;----------------------------
;代码段
eepromc .section 'code'
org 00h
jmp start
start:
mov a,055h ;设写入值为055H
mov write_in,a
mov a,14h ;写入14H为要操作的eeprom的地址
mov word_address,a
random_write_cycle:
set sda
d_1
set scl
d_1
clr sda ;起始信号
clr scl
set sda ;1
d_1
set scl
d_1
clr scl
clr sda ;0
set scl
d_1
clr scl
set sda ;1
d_1
set scl
d_1
clr scl
clr sda ;0
set scl
d_1
clr scl
clr sda ;a2,a1,a0=0
set scl
d_1
clr scl
set scl
d_1
clr scl
set scl
d_1
clr scl
clr sda ;0 write mode
set scl
d_1
clr scl
set sda ;1 for ack, 设为输入口,接收应答信号
d_1
set scl ;read_modify_write
d_1
skch:
sz sda ;应答信号
jmp skch
clr scl
mov a,08h
mov data_8,a ;一个字节八位
write_address_in:
clr sda
sz word_address.7
set sda
d_1
set scl
d_1
clr scl
rl word_address
sdz data_8
jmp write_address_in
set sda
d_1
set scl
d_1
wdow:
sz sda
jmp wdow
clr scl
mov a,08h
mov data_8,a
write_data_in:
clr sda
sz write_in.7
set sda
d_1
set scl
d_1
clr scl
rl write_in
sdz data_8
jmp write_data_in
clr sda
set scl
d_1
clr scl
set scl
d_1
set sda ;停止信号
d_1
clr scl
;-----------读
read_random_1:
set sda
d_1
set scl
d_1
clr sda ;开始信号
clr scl
set sda ;1
d_1
set scl
d_1
clr scl
clr sda ;0
set scl
d_1
clr scl
set sda ;1
d_1
set scl
d_1
clr scl
clr sda ;0
set scl
d_1
clr scl
clr sda ;a2,a1,a0=0,0,0
set scl
d_1
clr scl
set scl
d_1
clr scl
set scl
d_1
clr scl
clr sda ;0 write mode
set scl
d_1
clr scl
set sda ;for ack
d_1
set scl
d_1
flel:
sz sda
jmp read_random_1
clr scl
mov a,08h
mov data_8,a
read_address_in:
clr sda
sz word_address.7
set sda
d_1
set scl
d_1
clr scl
rl word_address
sdz data_8
jmp read_address_in
set sda ;for ack
d_1
set scl
d_1
skco:
sz sda
jmp skco
clr scl
restart:
set sda
d_1
set scl
d_1
clr sda ;起始信号
clr scl
set sda ;1
d_1
set scl
d_1
clr scl
clr sda ;0
set scl
d_1
clr scl
set sda ;1
d_1
set scl
d_1
clr scl
clr sda ;0
set scl
d_1
clr scl
clr sda ;a2,a1,a0=0
set scl
d_1
clr scl
set scl
d_1
clr scl
set scl
d_1
clr scl
set sda ;1 read mode
d_1
set scl
d_1
clr scl
set sda ;for ack
d_1
set scl
d_1
ewfp:
sz sda
jmp ewfp
mov a,08h
mov data_8,a
flow_out:
clr scl
set sda ;设定为输入口
d_1
clr read_out.7
sz sda
set read_out.7
d_1
set scl
d_1
rl read_out
sdz data_8
jmp flow_out
clr scl
clr sda
set scl
d_1
set sda ;停止信号
d_1
mov a,055h ;将读出数据与55H比较
xor a,read_out
snz z
jmp fail_out
jmp ok_end
fail_out:
jmp $ ;操作失败
ok_end:
jmp $ ;操作成功
;HT49R30A-1通过
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -