<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          TWI ATMEGA16L 叢機(jī)模式

          作者: 時(shí)間:2016-11-13 來(lái)源:網(wǎng)絡(luò) 收藏
          #include "main.h"

          #define SLAVE_ADDRESS0x05

          本文引用地址:http://www.ex-cimer.com/article/201611/316563.htm

          #define SCL 0
          #define SDA 1
          #define TWI_PORT PORTC
          #define TWI_DIR DDRC

          //SLAVE RECEIVE MODE
          #define SR_SLA_ACK 0X60//從機(jī)接收地址響應(yīng)
          #define SR_SLA_FAIL 0X68//作為主機(jī)仲裁失敗,自己的ALT+W被接收
          #define SR_GCA_ACK 0X70//從機(jī)接收廣播響應(yīng)
          #define SR_GCA_FAIL 0X78//作為主機(jī)仲裁失敗,接收到廣播地址
          #define SR_DATA_ACK 0X80//從機(jī)接收數(shù)據(jù)響應(yīng)
          #define SR_DATA_NACK 0X88//從機(jī)接收數(shù)據(jù)非應(yīng)答
          #define SR_GCA_DATA_ACK 0X90//從機(jī)接收廣播數(shù)據(jù)應(yīng)答
          #define SR_GCA_DATA_NACK 0X98//從機(jī)接收廣播數(shù)據(jù)非應(yīng)答
          #define SR_STOP_RESTART 0xA0//從機(jī)工作時(shí)收到STOP或RESTART
          //SLAVE SEND MODE
          #define ST_SLA_ACK 0XA8//從機(jī)發(fā)送地址應(yīng)答
          #define ST_SLA_FAIL 0XB0//作為主機(jī)仲裁失敗,自己的ALT+R被接收
          #define ST_DATA_ACK 0XB8//從機(jī)發(fā)送數(shù)據(jù)應(yīng)答
          #define ST_DATA_NACK 0XC0//從機(jī)發(fā)送數(shù)據(jù)非應(yīng)答
          #define ST_BYTE_ACK 0XC8//數(shù)據(jù)已發(fā)送,接收到ACK

          #define ILLEGAL 0x00

          #define TWI_ACK() (TWCR = (1<#define TWI_NOACK() (TWCR = (1<#define TWI_RESUME() (TWCR = (1<

          //全局變量
          //volatile unsigned char transmit_ready = 0;
          volatile unsigned char receive_ready = 0;
          //局部變量
          static unsigned char transmit_leng = 0;
          static unsigned char receive_leng = 0;

          static struct SR sr_temp;

          void IIC_Init(void)
          {
          PORTC |= (1<DDRC &= ~((1<
          TWCR = 0x00;

          TWAR = (SLAVE_ADDRESS<<1)|(0x00);
          TWDR = 0x00;
          TWCR = (1<
          st.start = 0x5A;

          transmit_leng = sizeof(st);
          receive_leng = sizeof(sr);
          }

          #pragma interrupt_handler TWI_ISR:18
          void TWI_ISR(void)
          {
          static unsigned char transmit_cnt = 0;
          static unsigned char receive_cnt = 0;

          unsigned char *p_st = (unsigned char *)&st;
          unsigned char *p_sr = (unsigned char *)&sr_temp;
          static unsigned char check = 0; //校驗(yàn)和

          SREG &= ~0x80;

          if (sleep_mode == POWER_DOWN)
          {
          sys_reset_flag = 1;
          }

          switch(TWSR&0xf8)
          {
          case SR_SLA_ACK:
          case 68:
          receive_cnt = 0;
          TWI_ACK();
          break;
          case SR_DATA_ACK:
          if (receive_cnt < (receive_leng-1))
          {
          *(p_sr+receive_cnt) = TWDR;
          }
          else if (receive_cnt == (receive_leng-1))
          {
          *(p_sr+receive_cnt) = TWDR;
          receive_ready = 1;
          }
          receive_cnt++;
          TWI_ACK();
          break;
          case SR_STOP_RESTART: // 0xA0:從機(jī)工作時(shí)收到STOP或RESTART
          TWI_ACK();
          break;

          case ST_SLA_ACK: // 0XA8:從機(jī)發(fā)送地址應(yīng)答
          transmit_cnt = 0;
          TWDR = *(p_st+transmit_cnt);
          check = *(p_st+transmit_cnt);
          transmit_cnt++;
          TWI_ACK();
          break;
          case ST_DATA_ACK: // 0XB8:從機(jī)發(fā)送數(shù)據(jù)應(yīng)答
          if (transmit_cnt < (transmit_leng-1))
          {
          TWDR = *(p_st+transmit_cnt);
          check += *(p_st+transmit_cnt);
          }
          else if (transmit_cnt == (transmit_leng-1))
          {
          TWDR = check; //發(fā)送校驗(yàn)和
          }
          transmit_cnt++;
          TWI_ACK();
          break;
          case ST_DATA_NACK:
          //transmit_ready = 1;
          TWI_ACK();
          break;
          case ILLEGAL:
          case 0xF8:
          TWI_RESUME();
          break;
          }
          SREG |= 0x80;
          }



          關(guān)鍵詞: TWIATMEGA16L叢機(jī)模

          評(píng)論


          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();