;*************************************************
;----------------------------------------------------------
; 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
;**********************************************
本文关键字:程序 合泰单片机,单片机-工控设备 - 合泰单片机
上一篇:KEY_按键示例程序