您当前的位置:五五电子网电子知识单片机-工控设备合泰单片机I2C_示例程序 正文
I2C_示例程序

I2C_示例程序

点击数:7405 次   录入时间:03-04 11:52:16   整理:http://www.55dianzi.com   合泰单片机
; LOAD_ADDR_8
;-------
LOAD_ADDR_8 macro SLAVE_ADDRESS
clr _10BitAddr
MOV A,(SLAVE_ADDRESS and 0ffh)
MOV SlaveAddr,A
endm
;-------------------
; I2C_TEST_DEVICE
;-------
I2C_TEST_DEVICE macro
call IsSlaveActive
endm
;-------------------
; RELEASE_BUS
;-------
RELEASE_BUS macro
set SDA ; set to hi-impedence
set SCL
endm
;-------------------
; I2C_WRITE_SUB
;-------
I2C_WRITE_SUB macro _BYTES_, _SourcePointer_, _SubAddress_
MOV A,_SubAddress_
MOV TempStore,A
MOV A,_BYTES_ ; loop data
MOV tempCount,A
MOV A,_SourcePointer_
MOV _MP,A
call _i2c_block_write
endm
;-------------------
; I2C_READ
;-------
I2C_READ macro _BYTES_, _DestPointer_
MOV A,_BYTES_-1
MOV tempCount,A
MOV A,_DestPointer_
MOV _MP,A
call _i2c_block_read
endm
;-------------------
; I2C_READ_SUB
;-------
I2C_READ_SUB macro _BYTES_, _DestPointer_, _SubAddress_
clr _Slave_RW
call TxmtStartBit
call Txmt_Slave_Addr
MOV A,_SubAddress_
MOV DataByte,A
call SendData
I2C_READ _BYTES_, _DestPointer_
endm

;*************************************************

;----------------------------------------------------------
; File Name: TEST.ASM
; Author: Andy Yu
; Date: July 22, 1998
; Purpose: test i2c routines
;----------------------------------------------------------
include i2c.inc
include ht48c50.inc

MySlaveAddr EQU 0a2h

tdata .section 'data'
PagEDAta db 8 dup(?)
Addr db ?
Add1 db ?
PageCount db ?
Temp db ?
Count db ?

main .section at 0 'code'
jmp start
;
start:
call InitI2CBusMaster
;
LOAD_ADDR_8  MySlaveAddr
;
I2C_TEST_DEVICE
snz _SlaveActive
jmp Error
;
; write HT24c01 with their address
;
clr Addr
MOV A,16 ; for PageCount = 16 downto 1
MOV PageCount,A
PageWriteLp:
call FillPageData ; Fill PageData with address
I2C_WRITE_SUB 8, offset PageData, Addr
snz _Txmt_Success
jmp Error
AckPoll:
I2C_TEST_DEVICE
snz _SlaveActive
jmp AckPoll
MOV A,8
addm A,Addr ; Addr += 8
sdz PageCount
jmp PageWriteLp
;
; read back check
;
clr Addr
MOV A,16; for PageCount = 16 downto 1
MOV PageCount,A
PageReadLp:
I2C_READ_SUB 8, offset PageData, Addr
snz _Rcv_Success
jmp Error
MOV a,0a0h
MOV add1,a
call CheckPageData
snz ACC.0
jmp Error
MOV a,8
addm A,add1 ; Add1 += 8
sdz PageCount
jmp PageReadLp
;
jmp $; success
Error:
jmp $ ; fail
FillPageData proc
; PageData=Add,Add+1,...,Add+7
MOV A,offset PageData ; MP0 = offset PageData
MOV MP0,A
MOV A,0a0h ; Temp = Addr
MOV Temp,A
MOV A,8
MOV Count,A ; for Count = 8 downto 1
FillLp:
MOV A,Temp
MOV R0,A
MOV PAC,A
inc Temp
inc MP0
sdz Count
jmp FillLp ; end for
ret
FillPageData endp
CheckPageData proc
; PageData must be Addr,Addr+1,...,Addr+7
MOV A,offset PageData ; MP0 = offset PageData
MOV MP0,A
MOV A,add1 ; Temp = Addr
MOV Temp,A
MOV A,8
MOV Count,A ; for Count = 16 downto 1
CheckLp:
MOV A,R0
XOR A,Temp
snz Z
ret A,0
inc Temp
inc mp0
sdz count
jmp checkLp
ret A,1
CheckPageData endp
;**********************************************



上一页  [1] [2] 


本文关键字:程序  合泰单片机单片机-工控设备 - 合泰单片机