在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<menu id="6qfwx"><li id="6qfwx"></li></menu>
    1. <menu id="6qfwx"><dl id="6qfwx"></dl></menu>

      <label id="6qfwx"><ol id="6qfwx"></ol></label><menu id="6qfwx"></menu><object id="6qfwx"><strike id="6qfwx"><noscript id="6qfwx"></noscript></strike></object>
        1. <center id="6qfwx"><dl id="6qfwx"></dl></center>

            新聞中心

            TWI ATMEGA16L 叢機(jī)模式

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

            #define SLAVE_ADDRESS0x05

            本文引用地址:http://www.biyoush.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)閉