您现在的位置: 主页 > MCU > 单片机技术应用 > EMC单片机的IIC程序软件包 -
本文所属标签:
为本文创立个标签吧:

EMC单片机的IIC程序软件包 -

来源: 网络用户发布,如有版权联系网管删除 2018-09-07 

[导读]
本程序已经稳定使用很长一段时间了,如果非要追根求源,应该追溹到1998年,由于本系统是基于IICEEPROM的,故对2401的读写采用了阻塞的方式,读不到数据或写不入数据就不退出。本程序是基于447的,也在1

本程序已经稳定使用很长一段时间了,如果非要追根求源,应该追溹到1998年,由于本系统是基于IICEEPROM的,故对2401的读写采用了阻塞的方式,读不到数据或写不入数据就不退出。

本文引用地址: http://www.21ic.com/app/mcu/201806/761635.htm


本程序是基于447的,也在163上运行过,不过IO的初始化操作需要作些修改,其他可以完全不用修改。

程序开头的几行ADD A,@0xFF是非常有用的,在以后的文章中会有描述。


程序如下:

;SYSTEM CLOCK 4MHz
;IO port define
SDA == 4
SCL == 3

MSDA == 0
MSCL == 1
MCS == 2
MRST == 5

;Register define
TREG == 0X10
TCNT == 0X11
GCNT == 0X12

IICADDR == 0X1E
IICBUF == 0X28
IICDAT0 == 0X28
IICDAT1 == 0X29
IICDAT2 == 0X2A
IICDAT3 == 0X2B
IICDAT4 == 0X2C
IICDAT5 == 0X2D
IICDAT6 == 0X2E
IICDAT7 == 0X2F

INCLUDE "EM78P447S.H"

ORG 0X000
ADD A,@0XFF
ADD A,@0XFF
ADD A,@0XFF
ADD A,@0XFF
ADD A,@0XFF

START:
DISI
SET P6 P7 PULL UP EN
CONTR
MOV TREG,A
BC TREG,7
MOV A,TREG
CONTW
SET SCL SDA OUTPUT HIGH
MOV A,@0XFF
MOV TREG,A
BC TREG,SCL SCL OUTPUT
BC TREG,SDA SDA OUTPUT
MOV A,TREG
IOW IOC6
BS R6,SCL SCL HIGH
BS R6,SDA SDA HIGH

;********************************************************************
;读入的测试程序,读取2401的0x00~0x07地址内容
READ_2401:
MOV A,@0X00
MOV IICADDR,A
CALL IIC_R8BYT
RET

;********************************************************************
;写入的测试程序,向2401的0x00~0x07地址写入0x00
WRITE_2401:
MOV A,@0X00
MOV IICADDR,A
CLR IICDAT
CLR IICDAT
CLR IICDAT
CLR IICDAT
CLR IICDAT
CLR IICDAT
CLR IICDAT
CLR IICDAT
CALL IIC_W8BYT
RET

;********************************************************************
;与MicroChip的2401接口程序
;********************************************************************
;IIC_W8BYT,向2401的指定地址写入8个字节数据
;地址由IICADDR指定,数据存在IICDAT0~IICDAT7
IIC_W8BYT:
CALL IIC_START
MOV A,@0XA0
CALL IIC_WBYT
CALL IIC_CACK
JBC R3,GP IF GP=1 OPTION AGAIN
JMP IIC_W8BYT
MOV A,IICADDR
CALL IIC_WBYT
CALL IIC_CACK
JBC R3,GP IF GP=1 OPTION AGAIN
JMP IIC_W8BYT
WRITE 8 BYTES TO 24C01
MOV A,@IICBUF
MOV R4,A
MOV A,@8
MOV GCNT,A
IIC_W8BYT1:
MOV A,R0
INC R4
CALL IIC_WBYT
CALL IIC_CACK
JBC R3,GP IF GP=1 OPTION AGAIN
JMP IIC_W8BYT
DJZ GCNT
JMP IIC_W8BYT1
CALL IIC_STOP
RET

;********************************************************************
;IIC_W1BYT,向2401的指定地址写入1个字节数据
;地址由IICADDR指定,数据存在IICDAT0
IIC_W1BYT:
CALL IIC_START
MOV A,@0XA0
CALL IIC_WBYT
CALL IIC_CACK
JBC R3,GP IF GP=1 OPTION AGAIN
JMP IIC_W1BYT
MOV A,IICADDR
CALL IIC_WBYT
CALL IIC_CACK
JBC R3,GP IF GP=1 OPTION AGAIN
JMP IIC_W1BYT
WRITE 1 BYTES TO 24C01
MOV A,@IICBUF
MOV A,IICDAT0
CALL IIC_WBYT
CALL IIC_CACK
JBC R3,GP IF GP=1 OPTION AGAIN
JMP IIC_W1BYT1
CALL IIC_STOP
RET



              查看评论 回复



嵌入式交流网主页 > MCU > 单片机技术应用 > EMC单片机的IIC程序软件包 -
 

"EMC单片机的IIC程序软件包 -"的相关文章

网站地图

围观()