我算是服了stm8硬件iic了

2019-03-23 17:30发布

大致说说吧,我现在主机软件模拟iic,从机是硬件iic中断

我实现的是主机发命令给从机,从机接收到命令后吧数据发给主机,
而且主机必须让从机休眠,休眠后,必须唤醒。

但是现在通讯都无法正常,

调试了半天,才发现I2C_SR1=0x10

停止位都监测到了,为什么前面地址匹配和数据缓冲非空没有检测到。好奇怪,下断点试了好几遍,现在吧代码贴出来,反正我是服了stm8,好多东西没有avr灵活,我调avr都已经跳成功了,但是stm8不知道怎么回事,好像很高贵的样子。调试了半天,烦了 此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
16条回答
yangganglone
2019-03-24 04:45

  1. u8 AT24CXX_ReadOneByte(void)
  2. {                                  
  3.                 u8 temp=0;                                                                                                                                                                  
  4.                 IIC_Start();                     
  5.                 IIC_Send_Byte(0XAB);           //进入接收模式                          
  6.                 IIC_Wait_Ack();         
  7.     temp=IIC_Read_Byte(0);                  
  8.     IIC_Stop();//产生一个停止条件            
  9.                 return temp;
  10. }
  11.   
  12.        
  13. void AT24CXX_WriteOneByte(u8 cmd)
  14. {                                                                                                                                                                                          
  15.     IIC_Start();  
  16.                 IIC_Send_Byte(0XAA);            //发送写命令
  17.                 IIC_Wait_Ack();                                                                       
  18.                 IIC_Send_Byte(cmd);     //发送字节                                                          
  19.                 IIC_Wait_Ack();                                
  20.     IIC_Stop();//产生一个停止条件
  21.                 delay_ms(10);         
  22. }
复制代码


/* 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);       
                }

}

一周热门 更多>