这两天要测试一块液晶,但液晶的程序也不知道是对的还是错的,所以就想用PSoc来测,根据前面的测试PSoc4自带的IIC模块来写驱动的话,事半功倍的!由于PCF8563的程序相对简单一点,所以就用这个来测试了。话不多说,先上程序:
/* ======================================== * * Copyright YOUR COMPANY, THE YEAR * All Rights Reserved * UNPUBLISHED, LICENSED SOFTWARE. * * CONFIDENTIAL AND PROPRIETARY INFORMATION * WHICH IS THE PROPERTY OF your company. * * 说明:该程序用于测试PSoc4的IIC模块工作情况 * 使用一块PCF8563实时时钟模块与PSoc4的IIC接 * 口相连进行IIC通信(未使用PCF8563中断功能), * 具体引脚定义如下(可以在PSoc4_UART.cydwr文 * 件中查看),在测试时使用评估板自带的USB-RS2 * 32模块与电脑连接: * P12.6 ---- P4.1 (UART) * P12.7 ---- P4.0 (UART) * P0.4 ---- SCL(PCF8563) * P0.5 ---- SDA(PCF8563) * 2014-02-24 下午14:30 * Veiko * ======================================== */ #include /* PCB8563定义 */ #define Spcf8563 0x51 /* PCF8563从机地址,应用于PSoc4时要右移一位除去读写识别位 */ #define ContReg 0x00 //控制-状态寄存器1 #define SecdReg 0x02 //秒寄存器 #define MinuReg 0x03 //分钟寄存器 #define HourReg 0x04 //小时寄存器 #define YedaReg 0x05 //日寄存器 #define WemoReg 0x06 //星期寄存器 #define MoCeReg 0x07 //月-世纪寄存器 #define YearReg 0x08 //年寄存器 #define MiAlReg 0x09 //分钟报警寄存器 #define BehoReg 0x0c //星期报警寄存器 #define BemiReg 0x0b //日报警寄存器 /* 变量定义 */ unsigned char Sec = 0; /* 用于存储秒数据 */ unsigned char Sec_Tmp = 0; /* 用于对比秒数据是否发生改变 */ unsigned char UARTSendChar = 0; /* 用于串口发送秒数据 */ /* 函数声明 */ void PCF8563_WriteReg(unsigned char SubAddr,unsigned char Data); void PCF8563_Init(void); unsigned char PCF8563Read(unsigned char SubAddr); int main() { /* Place your initialization/startup code here (e.g. MyInst_Start()) */ UART_Start(); /* 串口初始化 */ IIC_M_Start(); /* IIC初始化 */ CyGlobalIntEnable; /* 使能全局中断 */ //UART_SCB_IRQ_Start(); /* 打开串口中断 */ PCF8563_Init(); //-----初始化PCF8563芯片 /* CyGlobalIntEnable; */ /* Uncomment this line to enable global interrupts. */ for(;;) { Sec = PCF8563Read(SecdReg); if(Sec_Tmp != Sec) { UARTSendChar = ((Sec>>4)&0x0f)+0x30; UART_UartPutChar(UARTSendChar); UARTSendChar = (Sec&0x0f)+0x30; UART_UartPutChar(UARTSendChar); UART_UartPutChar('\r'); UART_UartPutChar('\n'); Sec_Tmp = Sec; } } } void PCF8563_WriteReg(unsigned char SubAddr,unsigned char Data) { IIC_M_I2CMasterSendStart(0x51,0); //-- 发送起始信号,从机地址写信号 IIC_M_I2CMasterWriteByte(SubAddr); //-- 发送寄存器地址(子地址) IIC_M_I2CMasterWriteByte(Data); //-- 发送数据 IIC_M_I2CMasterSendStop(); //-- 发送停止信号 } void PCF8563_Init(void) { PCF8563_WriteReg(SecdReg,0x00); PCF8563_WriteReg(HourReg,0x00); PCF8563_WriteReg(MinuReg,0x00); PCF8563_WriteReg(YedaReg,0x01); PCF8563_WriteReg(MoCeReg,0x01); PCF8563_WriteReg(YearReg,0x09); } unsigned char PCF8563Read(unsigned char SubAddr) { unsigned char DataRec = 0; IIC_M_I2CMasterSendStart(0x51,0); //-- 发送起始信号,从机地址写信号 IIC_M_I2CMasterWriteByte(SubAddr); //-- 发送寄存器地址(子地址) IIC_M_I2CMasterSendRestart(0x51,1); //-- 发送起始信号,从机地址读信号 DataRec = IIC_M_I2CMasterReadByte(1); //-- 读取一个字节并在结束通信前发送NACK应答位 IIC_M_I2CMasterSendStop(); //-- 发送停止信号 return DataRec; } /* [] END OF FILE */
前面几个笔记说过的东西,这里就不再说了,顺便把工程上传一个,希望对你有帮助:
——回复可见内容——
电脑回显效果: