X1226汇编程序

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

X1226汇编程序
今天才登录论坛看到你的帖子,迟复为歉!我是用MSP430单片机汇编语言编写的程序,见下面,不知能否对你有帮助。

如果你不熟悉该汇编语言,或许我程序中的注释对你能有所帮助。

我感到X1226系列芯片的编程要比其他时钟或EEPROM的复杂一些,除了要编好I2C的编程外,主要是它的STATUS REGISTER(SR)中的RWEL 和WEL两个位要用好。

另外还须注意写EEPROM后要延时一些时间,我是延时10mS。

建议你仔细阅读芯片的技术资料,最好是英文原文资料,吃透它的要求。

X1226系列芯片的优点是耗电低,如果不为了节能我是不会采用它的。

我习惯用汇编语言来编写单片机程序,从不用C语言或其他高级语言,除非写微机程序。

所以我也不能对你前面一个帖子的程序作出分析。

但愿以上能对你有一点帮助。

我的问题还没有解决,目前只好采取其他办法绕过它。

我可能不会经常登录这个论坛,如果有问题可能不能及时回复,见谅!
;------------------------------------------------------------------------------
;X1226 EEPROM write (写)
;[入口]:(X1226EEaddr1,X1226EEaddr0)= 欲写入的X1226 EEPROM 首址(word)
; (R13)=欲被写的数据区首址(word)(低位字节)
; R14=写入的字节数(word,用mov.w)
;[调用]:
;[使用]:R13,R14,[R5,R15]
;[出口]:
;------------------------------------------------------------------------------
X1226EEwr
call #RTC_WEL_set
call #RTC_Start ;generate I2C-bus start condition(产生I2C总线开始状态) mov.b #0aeh,R5 ;slave address,Write EEPROM
call #RTC_TX
mov.b &X1226EEaddr1,R5 ;word address1:
call #RTC_TX
mov.b &X1226EEaddr0,R5 ;word address0:next bytes are data
call #RTC_TX
X1226EEwrloop mov.b @R13+,R5
call #RTC_TX
dec R14
jnz X1226EEwrloop
call #RTC_Stop ;generate I2C-bus stop condition
call #D10ms ;delay 10 mS
ret
;------------------------------------------------------------------------------ ;X1226 EEPROM read
;[入口]:(X1226EEaddr1,X1226EEaddr0)= 欲读出的X1226 EEPROM 首址(word)
; (R13)=欲存放的数据区首址(word)(低位字节)
; R14=读出的字节数(word,用mov.w)
;[调用]:
;[使用]:R13,R14,[R5,R15]
;[出口]:读出的数据存放在以Data1为首字节(低位)的RAM区中
;------------------------------------------------------------------------------
X1226EErd
call #RTC_Start ;generate I2C-bus start condition
mov.b #0aeh,R5 ;slave address,Write EEPROM
call #RTC_TX
mov.b &X1226EEaddr1,R5 ;word address1:
call #RTC_TX
mov.b &X1226EEaddr0,R5 ;word address0:next bytes are data
call #RTC_TX
call #RTC_Start ;generate I2C-bus start condition
mov.b #0afh,R5 ;slave address,Read EEPROM
call #RTC_TX
X1226EErdloop dec R14
jz X1226EErdnoAck
call #RTC_Rx_Ack
mov.b R5,0(R13)
inc R13
jmp X1226EErdloop
X1226EErdnoAck call #RTC_Rx_notAck
mov.b R5,0(R13)
call #RTC_Stop ;generate I2C-bus stop condition
ret
;------------------------------------------------------------------------------
;设定RTC_X1226 WEL bit of Status Register子程序
;------------------------------------------------------------------------------
RTC_WEL_set
;Write a 02h to the Status Register to set the Write Enable Latch (WEL).
call #RTC_Start ;generate I2C-bus start condition
mov.b #0deh,R5 ;slave address,Write CCR
call #RTC_TX
mov.b #00h,R5 ;word address1: 0
call #RTC_TX
mov.b #3fh,R5 ;word address0: 3f, next bytes are data
call #RTC_TX
mov.b #02h,R5 ;Write a 02h to the Status Register to set the Write Enable Latch (WEL).
call #RTC_TX
call #RTC_Stop ;generate I2C-bus stop condition
ret
;------------------------------------------------------------------------------
;I2C(RTC_X1226)总线启动子程序
;SDA--\\__
;SCL----\\___
;------------------------------------------------------------------------------
RTC_Start
bic.b #RTCSCL,&RTC_POUT
bis.b #RTCSDA,&RTC_POUT
bis.b #RTCSDA+RTCSCL,&RTC_PDIR
bis.b #RTCSCL,&RTC_POUT
call #I2CDLY
bic.b #RTCSDA,&RTC_POUT
call #I2CDLY
bic.b #RTCSCL,&RTC_POUT
ret
;------------------------------------------------------------------------------ ;I2C(RTC_X1226)总线停止子程序
;SDA____/-- (--\\___ )
;SCL_/-------\\___
;------------------------------------------------------------------------------ RTC_Stop
bic.b #RTCSCL,&RTC_POUT ;SCL控制线低电平
bic.b #RTCSDA,&RTC_POUT ;SDA控制线低电平
bis.b #RTCSDA+RTCSCL,&RTC_PDIR
bis.b #RTCSCL,&RTC_POUT ;SCL控制线高电平
call #I2CDLY
bis.b #RTCSDA,&RTC_POUT ;SDA控制线高电平
call #I2CDLY
bic.b #RTCSCL,&RTC_POUT ;SCL控制线低电平
call #I2CDLY
bic.b #RTCSDA+RTCSCL,&RTC_PDIR
; bic.b #RTCSDA,&RTC_POUT ;SDA控制线低电平
ret
;------------------------------------------------------------------------------ ;向I2C(RTC_X1226)送一字节数据子程序
;[入口]:1)(R5)=欲写入的字节;2)I2C(RTC_X1226)总线已启动;3)SCL控制线低电平
;[调用]:I2CDLY
;[使用]:R5,R15
;[出口]:1)接收(越过)I2C Acknowledge;2)SDA控制线为输入状态;3)SCL控制线低电平;------------------------------------------------------------------------------ RTC_TX
bis.b #RTCSDA,&RTC_PDIR ;SDA控制线输出状态
mov.b #08,R15
RTC_Send call #I2CDLY
rla.b R5
jc RTC_Send1
bic.b #RTCSDA,&RTC_POUT ;Send 0
jmp RTC_Sx
RTC_Send1 bis.b #RTCSDA,&RTC_POUT ;Send 1
RTC_Sx call #I2CDLY
bis.b #RTCSCL,&RTC_POUT
call #I2CDLY
bic.b #RTCSCL,&RTC_POUT
dec.b R15
jnz RTC_Send
bic.b #RTCSDA,&RTC_PDIR ;I2C Acknowledge
call #I2CDLY
bis.b #RTCSCL,&RTC_POUT ;9th SCL
call #I2CDLY
bic.b #RTCSCL,&RTC_POUT
ret
;------------------------------------------------------------------------------ ;I2C延时子程序
;------------------------------------------------------------------------------ I2CDLY nop
nop
ret
;------------------------------------------------------------------------------ ;从I2C(RTC_X1226)接收一字节数据并给出Acknowledge子程序
;[入口]:1)I2C(RTC_X1226)总线已处于cpu接收状态;2)SCL控制线低电平
;[调用]:I2CDLY
;[使用]:R5,R15
;[出口]:1)(R5)=接收的一字节数据;2)SDA控制线为输入状态;3)SCL控制线低电平
;------------------------------------------------------------------------------ RTC_Rx_Ack
mov.b #08,R15
RTC_R call #I2CDLY
bis.b #RTCSCL,&RTC_POUT
call #I2CDLY
bit.b #RTCSDA,&RTC_PIN
jnz RTC_R1
clrc
rlc.b R5 ;Receive 0
jmp RTC_Rp
RTC_R1 setc
rlc.b R5 ;Receive 1
RTC_Rp bic.b #RTCSCL,&RTC_POUT
call #I2CDLY
dec.b R15
jnz RTC_R
call #I2CDLY
bic.b #RTCSDA,&RTC_POUT ;I2C Acknowledge
call #I2CDLY
bis.b #RTCSDA,&RTC_PDIR
call #I2CDLY
bis.b #RTCSCL,&RTC_POUT ;9th SCL
call #I2CDLY
bic.b #RTCSCL,&RTC_POUT
bic.b #RTCSDA,&RTC_PDIR
ret
;------------------------------------------------------------------------------ ;从I2C(RTC_X1226)接收一字节数据子程序,不给出Acknowledge
;[入口]:1)I2C(RTC_X1226)总线已处于cpu接收状态;2)SCL控制线低电平
;[调用]:I2CDLY
;[使用]:R5,R15
;[出口]:1)(R5)=接收的一字节数据;2)SDA控制线为输入状态;3)SCL控制线低电平
;------------------------------------------------------------------------------ RTC_Rx_notAck
mov.b #08,R15
RTC_Rno call #I2CDLY
bis.b #RTCSCL,&RTC_POUT
call #I2CDLY
bit.b #RTCSDA,&RTC_PIN
jnz RTC_R1no
clrc
rlc.b R5 ;Receive 0
jmp RTC_Rpno
RTC_R1no setc
rlc.b R5 ;Receive 1
RTC_Rpno bic.b #RTCSCL,&RTC_POUT
call #I2CDLY
dec.b R15
jnz RTC_Rno
call #I2CDLY
bis.b #RTCSDA,&RTC_POUT ;Not Acknowledge
call #I2CDLY
bis.b #RTCSDA,&RTC_PDIR
call #I2CDLY
bis.b #RTCSCL,&RTC_POUT ;9th SCL
call #I2CDLY
bic.b #RTCSCL,&RTC_POUT
bic.b #RTCSDA,&RTC_PDIR
ret
;------------------------------------------------------------------------------。

相关文档
最新文档