搜索
bottom↓
回复: 2

还是avr双机通讯的例子

[复制链接]

出0入0汤圆

发表于 2014-6-13 15:02:11 | 显示全部楼层 |阅读模式
       上次我贴出代码,但是我们经理程序太乱,太复杂!

所以这次想能不能有一个更好的方法实现双击通讯!

贴出上次的代码!

阿莫论坛20周年了!感谢大家的支持与爱护!!

你熬了10碗粥,别人一桶水倒进去,淘走90碗,剩下10碗给你,你看似没亏,其实你那10碗已经没有之前的裹腹了,人家的一桶水换90碗,继续卖。说白了,通货膨胀就是,你的钱是挣来的,他的钱是印来的,掺和在一起,你的钱就贬值了。

出0入0汤圆

 楼主| 发表于 2014-6-13 15:08:21 | 显示全部楼层

  1. //中断处理机制,iic产生寻址中断,在接受地址后产生握手,然后收到主机发的命令,然后把数据发给主机!
  2. #pragma interrupt_handler iic_irq:25
  3. void  iic_irq(void)
  4. {
  5.     switch(STATUS)//状态采集
  6.     {
  7.                                                     //从机接受
  8.     case SR_SLA_ACK:                                                //从机地址写完成
  9.     case SR_ARB_LOST_SLA_ACK:                                //仲裁失败
  10.     case SR_GC_ACK:                                                        //收到主机广播并且ack返回
  11.         ACK();                                                         //接受到地址并且ack返回给主机
  12.         break;
  13.     case SR_SLA_DATA_ACK:                                          //接受到数据并且ack返回
  14.     case SR_GC_DATA_ACK:                                          //广播形式接受到数据
  15.         temp1=TWDR;                                                   //产生general call地址匹配
  16.         ACK();                                                                 //接受到地址并且ack返回给主机
  17.         break;
  18.     case SR_SLA_DATA_NACK:
  19.     case SR_GC_DATA_NACK:                                           //不读取主机数据就发nack
  20.         temp1=TWDR;
  21.         NACK();                                                            //发送nack给主机                                           ;
  22.         break;
  23.     case SR_STOP_REST:
  24.         ACK();
  25.         break;
  26.                                     //从机发送
  27.     case ST_SLA_ACK:                                                   // 0xA8: 自己的SLA+R 已经被接收,ACK 已返回
  28.     case ST_ARB_LOST_SLA_ACK:// 0xB0: SLA+R/W 作为主机的仲裁失败;自己的SLA+R 已经被接收,ACK 已返回
  29.         switch(temp1)
  30.         {   
  31.             case 0x07:
  32.             TWDR=(u8)((buf[3]&0xff00)>>8);
  33.                 ACK();
  34.             break;
  35.             case 0x08:
  36.             TWDR=(u8)(buf[3]&0x00ff);
  37.                 ACK();
  38.             break;
  39.         
  40.             default:break;
  41.         }
  42.                 break;
  43.     case ST_DATA_ACK:                                                             // 0xB8: TWDR 里数据已经发送,接收到ACK
  44.     break;
  45.     case ST_DATA_NACK:                                                                                                   // 0xC0: TWDR 里数据已经发送接收到NOT ACK
  46.         NACK();
  47.     case ST_LAST_DATA:                                                             // 0xC8: TWDR 的一字节数据已经发送(TWAE = “0”);接收到ACK
  48.         NACK();
  49.         twi_init();                                                                                                                  //重新回到初始化状态,等待接收模式的到来
  50.         break;
  51.     case NO_INFO:                                                                                                           // 0xF8: 没有相关的状态信息;TWINT = “0”
  52.     break;
  53.     case BUS_ERROR:                                                                                                    // 0x00: 由于非法的START 或STOP 引起的总线错误
  54.         TWCR=TWCR&TWCR_CMD_MASK|(1<<TWINT)|(1<<TWSTO)|(1<<TWEA);
  55.         default:break;
  56.     }
  57. }
复制代码

出0入0汤圆

 楼主| 发表于 2014-6-13 15:59:33 | 显示全部楼层
主要是我的中断里面执行了太多事情。耽误太多时间了,所以我想知道有什么办法让接受,命令到发送数据,时间稍微减少点,避免我的程序太复杂了!
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-10-3 12:31

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

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