大致说说吧,我现在主机软件模拟iic,从机是硬件iic中断
我实现的是主机发命令给从机,从机接收到命令后吧数据发给主机,
而且主机必须让从机休眠,休眠后,必须唤醒。
但是现在通讯都无法正常,
调试了半天,才发现I2C_SR1=0x10
停止位都监测到了,为什么前面地址匹配和数据缓冲非空没有检测到。好奇怪,下断点试了好几遍,现在吧代码贴出来,反正我是服了stm8,好多东西没有avr灵活,我调avr都已经跳成功了,但是stm8不知道怎么回事,好像很高贵的样子。调试了半天,烦了
此帖出自
小平头技术问答
- /* MAIN.C file
- *
- * Copyright (c) 2002-2005 STMicroelectronics
- */
- #include "208io.h"
- #include "iic.h"
- #include "type.h"
-
- #define N 8
- u8 buf[N];
- main()
- {
-
- IIC_Init();
- while (1)
- {
- AT24CXX_WriteOneByte(0x01);
- delay_ms(100);
- buf[0]=AT24CXX_ReadOneByte();
- delay_ms(10);
- AT24CXX_WriteOneByte(0x02);
- delay_ms(10);
- buf[1]=AT24CXX_ReadOneByte();
- delay_ms(100);
- }
- }
复制代码
- u8 AT24CXX_ReadOneByte(void)
- {
- u8 temp=0;
- IIC_Start();
- IIC_Send_Byte(0XAB); //进入接收模式
- IIC_Wait_Ack();
- temp=IIC_Read_Byte(0);
- IIC_Stop();//产生一个停止条件
- return temp;
- }
-
-
- void AT24CXX_WriteOneByte(u8 cmd)
- {
- IIC_Start();
- IIC_Send_Byte(0XAA); //发送写命令
- IIC_Wait_Ack();
- IIC_Send_Byte(cmd); //发送字节
- IIC_Wait_Ack();
- IIC_Stop();//产生一个停止条件
- delay_ms(10);
- }
复制代码/* MAIN.C file
*
* Copyright (c) 2002-2005 STMicroelectronics
*/
#include "208io.h"
#include "iic.h"
#include "type.h"
#define N 8
u8 buf[N];
main()
{
IIC_Init();
while (1)
{
AT24CXX_WriteOneByte(0x01);
delay_ms(100);
buf[0]=AT24CXX_ReadOneByte();
delay_ms(10);
AT24CXX_WriteOneByte(0x02);
delay_ms(10);
buf[1]=AT24CXX_ReadOneByte();
delay_ms(100);
}
}
一周热门 更多>