搜索
bottom↓
回复: 3

TWI作为从机发模式单片机复位

[复制链接]

出0入0汤圆

发表于 2007-10-19 20:30:24 | 显示全部楼层 |阅读模式
TWI双机通讯,主收从发,多个字节,两个M16没有问题,一个M16作主机,一个M88(或M8)作从机时,通讯没有问题.
可是FREESCAL单片机模拟主机接收时,数据也能正常接收到,但主机会不定时复位,两机共电源,但从机不复位.
急切请求各位大侠帮助?分析原因

出0入0汤圆

 楼主| 发表于 2007-10-19 21:16:56 | 显示全部楼层
复位时,复位脚与电源电平都没有任何变化,硬件EFT通过4500
下面是从机源程序
//TWI slave initialize
// bit rate:100
void twi_slave_init(uint8 add)
{
TWCR= 0x00; //disable twi
TWBR= 0x64; //set bit rate
TWSR= 0x00; //set prescale
TWAR= add; //set slave address 从机地址为 0x01
TWCR= (1<<TWEN)|(1<<TWEA)|(1<<TWIE); //enable twi
//TWEN必须置位以使能TWI接口。TWEA也要置位以使主机寻址到自己(从机地址或广播) 时返回确认信息ACK
}
#pragma interrupt_handler twi_isr:18
void twi_isr(void)
{
//twi event
switch (TWSR&0xF8)
{
//从发送*****************************

   case TW_ST_SLA_ACK:               // 0xA8: 自己的SLA+R 已经被接收,ACK 已返回
   case TW_ST_ARB_LOST_SLA_ACK:// 0xB0: SLA+R/W 作为主机的仲裁失败;自己的SLA+R 已经被接收,ACK 已返回
      // 被选中为从读出 (数据将从传回主机)
          TWDR=main_tmp;  //发送全局变量中值
          Twi_Ack();                
          break;   
  case TW_ST_DATA_ACK:            // 0xB8: TWDR 里数据已经发送,接收到ACK
      //发送数据位
         TWDR=main_tmp;
     break;   
   case TW_ST_DATA_NACK:            // 0xC0: TWDR 里数据已经发送接收到NOT ACK
   case TW_ST_LAST_DATA:            // 0xC8: TWDR 的一字节数据已经发送(TWAE = “0”);接收到ACK
      // 全部完成
      // 从方式开放
      Twi_NoAcK();
          twi_slave_init(0xa6);        //重新回到初始化状态,等待接收模式的到来
      break;
   case TW_NO_INFO:                 // 0xF8: 没有相关的状态信息;TWINT = “0”
      // 无操作
          break;
   case TW_BUS_ERROR:               // 0x00: 由于非法的START 或STOP 引起的总线错误
      // 内部硬件复位,释放总线
      TWCR=TWCR&TWCR_CMD_MASK|(1<<TWINT)|(1<<TWSTO)|(1<<TWEA);
     break;  
         default:
         break;
}
}
void main(void)
{
DDRC=0X00;
PORTC=0x03; //使能内部上拉电阻
DDRA=0xff;
twi_slave_init(0xa6); //初始化为从机,地址0xa6。
SEI();
while(1)
;
}

出0入0汤圆

 楼主| 发表于 2008-2-17 22:17:10 | 显示全部楼层
问题找到了,原来是主机进行除法运算没有做好才导致复位的

出0入0汤圆

发表于 2008-5-30 15:25:50 | 显示全部楼层
:-)记号在这里
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-7 00:23

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表