HT48HT46 MCU 用软件执行I2C 总线的控制功能的方法.docx
- 文档编号:23772880
- 上传时间:2023-05-20
- 格式:DOCX
- 页数:16
- 大小:16.93KB
HT48HT46 MCU 用软件执行I2C 总线的控制功能的方法.docx
《HT48HT46 MCU 用软件执行I2C 总线的控制功能的方法.docx》由会员分享,可在线阅读,更多相关《HT48HT46 MCU 用软件执行I2C 总线的控制功能的方法.docx(16页珍藏版)》请在冰豆网上搜索。
HT48HT46MCU用软件执行I2C总线的控制功能的方法
HT48&HT46MCU用软件执行I2C总线的控制功能的方法
HT48&HT46MCU用软件执行I2C总线的控制功能的方法
文件编码:
HA0005s
简介:
I2C总线包括了两条串行总线(时钟线SCL和数据线SDA),通过这两条总线能实现多个芯片之间
的通信。
在互相连接的芯片中,至少有一个芯片作为总线控制器,而其它芯片则作为从控制器。
在
本应用说明中,介绍了用Holtek的八位RISC结构的单片机作为单总线控制器的软件实现的方法。
在本文的示例中,采用了一片EEPROM(型号HT24LC02,2Kbit)作为从控制器参与测试。
电路说明:
HT24LC02的A0、A1、A2、VSS、WP引脚接地,VCC接+5V,SCL接PA3,SDA接PA2
使用说明:
例程中先向eeprom中写数据,写完后,再将eeprom中内容读出来,并将读出数据进行比较,
若数据不相等程序跳到fail_out中;若相等,最后程序跳到ok_end中。
本说明中提供了一个源文件OP_HT24.ASM和一个包含文件HT24.ASM。
在应用时,要将
OP_HT24.ASM文件添加到用户的project中,并修改HT24.INC文件中的变量设置,以建立SCL/SDA
引脚来与用户的应用电路相匹配。
实例:
;====================================================================
;文件名:
op_ht24.asm
;日期:
2003/11/18
;MCU:
HT48R30A-1
;EEPROM:
HT24LC02
;Fsys:
1MHz
;====================================================================
includeht24.asm
data.section'data'
countdb?
faildb?
successdb?
;====================================================================
main.sectionat0'code'
clrcount
clrfail
clrsuccess
clrpac
clrpa
write_cycle:
HT48&HT46MCU用软件执行I2C总线的控制功能的方法
mova,0a0h;10100000
movdeviceaddr,a
mova,count
movdataaddr,a
movdata2,a
callht24_byte_write
callwrite_delay;延时forwrite
sizcount;256x8=2K
jmpwrite_cycle
read_cycle:
mova,0a0h;10100000
movdeviceaddr,a
mova,count
movdataaddr,a
callht24_byte_read
mova,data2
xora,count
szacc
jmpfail_out
sizcount
jmpread_cycle
ok_end:
setsuccess
jmp$
fail_out:
setfail
jmp$
在这个程序中,执行了两个文件HT24.INC(附件1)和HT24.ASM(附件2)。
附件1:
HT24.INC
;====================================================================
;文件名:
HT24.INC
;日期:
2003/11/18
;====================================================================
;====================================================================
;可根据你的电路,修改引脚sda/sdac/scl/sclc的定义
;====================================================================
HT48&HT46MCU用软件执行I2C总线的控制功能的方法
#defineport[12H]
#defineportc[13H]
sdaequport.2;数据线
sdacequportc.2;数据控制
sclequport.3;时钟线
sclcequportc.3;时钟控制
;====================================================================
;以下部分不可修改
;====================================================================
ifndefht24_asm
externdeviceaddr:
byte;器件地址及操作码
externdataaddr:
byte;页内地址
externdata2:
byte;写入及读出的byte数据
externarray:
byte;写入及读出的page数据
externnum:
byte;page的大小
externht24_byte_write:
near;byte写
externht24_byte_read:
near;byte读
externht24_page_write:
near;page写
externht24_page_read:
near;page读
externwrite_delay:
near;约5MS的延时
endif
;====================================================================
;文件HT24.INC结束
;====================================================================
附件2:
HT24.ASM
;====================================================================
;文件名:
ht24.asm
;日期:
2003/11/18
;ROM使用情况:
94H
;RAM使用情况:
16H
;====================================================================
#defineht24_asm
includeht24.inc
includeht48r30a-1.inc
;宣告提供给外部程序使用的变量名称
publicdeviceaddr
publicdataaddr
publicdata2
publicarray
publicnum
;宣告提供给外部程序使用的子程序名称
HT48&HT46MCU用软件执行I2C总线的控制功能的方法
publicht24_byte_write
publicht24_byte_read
publicht24_page_write
publicht24_page_read
publicwrite_delay
;====================================================================
;数据段
ht24data.section'data'
deviceaddrdb?
dataaddrdb?
data2db?
arraydb16dup(?
)
numdb?
data1db?
;临时寄存器
movbdb?
;8bit计数
;====================================================================
;程序段
ht48iiccode.section'code'
;====================================================================
;描述:
读取EEPROM中一个BYTE的数据
;入口参数:
deviceaddr:
byte
;dataaddr:
byte
;出口参数:
data2:
byte
;STACK使用:
1
;====================================================================
ht24_byte_readproc
callstart;送开始信号
mova,deviceaddr;送deviceaddress&writeop-code
movdata1,a
callbyte_write
mova,dataaddr;送dataaddress
movdata1,a
callbyte_write
callstart
mova,deviceaddr
incacc;送deviceaddress&readop-code
movdata1,a
callbyte_write
mova,offsetdata2
movmp0,a
callbyte_read;读取指定地址处的data
callstop;送停止信号
ret
HT48&HT46MCU用软件执行I2C总线的控制功能的方法
ht24_byte_readendp
;====================================================================
;描述:
向EEPROM中写入一个BYTE数据
;入口参数:
deviceaddr:
byte
;dataaddr:
byte
;data2:
byte
;出口参数:
无
;STACK使用:
1
;====================================================================
ht24_byte_writeproc
callstart;送开始信号
mova,deviceaddr;送deviceaddress&writeop-code
movdata1,a
callbyte_write
mova,dataaddr;送dataaddress
movdata1,a
callbyte_write
mova,data2;送数据
movdata1,a
callbyte_write
callstop;送停止信号
ret
ht24_byte_writeendp
;====================================================================
;描述:
读取EEPROM中的一个PAGE的数据
;入口参数:
deviceaddr:
byte
;dataaddr:
byte
;出口参数:
array:
16bytes
;STACK使用:
1
;====================================================================
ht24_page_readproc
callstart;调用开始信号
mova,deviceaddr
movdata1,a;页地址判断,送页地址及操作码
callbyte_write
mova,dataaddr
movdata1,a;送页内地址
callbyte_write
callstart
mova,deviceaddr
incacc
movdata1,a;页地址判断,送页地址及操作码
callbyte_write
HT48&HT46MCU用软件执行I2C总线的控制功能的方法
mova,offsetarray;将从EEPROM中读出来的数据存放到ARRAY数组中。
movmp0,a
more:
callbyte_read;调用读BYTE子程序
sdznum
jmpcmack
jmpretu
cmack:
callmack
incmp0
jmpmore
retu:
callstop;送停止信号
ret
ht24_page_readendp
;====================================================================
;描述:
向EEPROM中写入一个PAGE的数据
;入口参数:
deviceaddr:
byte
;dataaddr:
byte
;array:
16bytes
;出口参数:
无
;STACK使用:
1
;====================================================================
ht24_page_writeproc
callstart;送开始信号
mova,deviceaddr
movdata1,a;送页地址和写操作命令
callbyte_write
mova,dataaddr
movdata1,a;送页内地址
callbyte_write
mova,offsetarray;将存放在ARRAY数组中数据写入EEPROM。
movmp0,a
amore:
mova,r0;送数据至EEPROM
movdata1,a
callbyte_write
nop
sdznum
jmpamore
callstop;送停止信号
ret
ht24_page_writeendp
HT48&HT46MCU用软件执行I2C总线的控制功能的方法
;====================================================================
;描述:
写入数据后的延时,延时时间约为5MS(Fsys=4MHz)
;入口参数:
无
;出口参数:
无
;STACK使用:
无
;====================================================================
write_delayproc
setdata1
mova,06h
movmovb,a
lpy1:
sdzdata1
jmplpy1
sdzmovb
jmplpy1
ret
write_delayendp
;====================================================================
;送信号0到EEPROM
;====================================================================
mackproc
clrsdac
clrsda
nop
setscl
nop
nop
clrscl
nop
setsda
ret
mackendp
;====================================================================
;开始信号部分的子程序
;====================================================================
startproc
clrsclc
clrsdac
setscl
nop
setsda
nop
clrsda
HT48&HT46MCU用软件执行I2C总线的控制功能的方法
nop
clrscl
ret
startendp
;====================================================================
;结束信号部分的子程序
;====================================================================
stopproc
clrsdac
clrsda
nop
setscl
nop
setsda
nop
clrsda
clrscl
ret
stopendp
;====================================================================
;单字节写部分的子程序
;====================================================================
byte_writeproc
mova,08h;串行输入八个bit的数据
movmovb,a
loop:
clrsdac
clrscl;写数据时,scl为high
rldata1
mova,data1
snzacc.0;数据串行输入
jmploop_1
setsda
jmploop_2
loop_1:
clrsda
loop_2:
nop
setscl
nop
nop
sdzmovb
jmploop
HT48&HT46MCU用软件执行I2C总线的控制功能的方法
clrscl
setsdac
nop
setscl;读数据时,scl为low
rep:
szsda;检查EEPROM有没有送应答信号
jmprep
clrscl
ret
byte_writeendp
;====================================================================
;单字节读部分的子程序
;====================================================================
byte_readproc
mova,08h;串行输出八个bit的数据
movmovb,a
setsdac
nop
loops:
setscl;读数据时,scl为low
rlr0
snzsda;数据串行输出
jmploops_1
setr0.0
jmploops_2
loops_1:
clrr0.0
loops_2:
clrscl
nop
sdzmovb
jmploops
ret
byte_readendp
;====================================================================
;程序结束
;====================================================================
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- HT48 HT46 MCU 用软件执行I2C 总线的控制功能的方法 软件 执行 I2C 总线 控制 功能 方法