在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,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>

            新聞中心

            EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > ATmega128(與PC機(jī)通信)

            ATmega128(與PC機(jī)通信)

            作者: 時間:2016-11-10 來源:網(wǎng)絡(luò) 收藏
            atmega128的USART串口發(fā)送與接收數(shù)據(jù)示例程序,采用串口1,發(fā)送和接收都是中斷的方式

            //先發(fā)送200個FF,然后單片機(jī)處于接收狀態(tài),接收數(shù)據(jù)顯示在數(shù)碼管上,電腦發(fā)送的數(shù)據(jù)格式如09,16進(jìn)制形式
            //編譯環(huán)境 AVR Studio 4.17/AVR GCC
            //系統(tǒng)時鐘11.0592MHZ,設(shè)置熔絲位為外部高頻石英晶體振蕩,啟動時間4.1ms

            本文引用地址:http://www.biyoush.com/article/201611/317441.htm

            //***********************************************************************
            //包含文件
            //***********************************************************************

            #include
            #include
            #define F_CPU11.0590200// 單片機(jī)主頻為11.0592MHz,用于延時子程序
            #include
            #include
            #include
            #include //中斷信號頭文件

            //***********************************************************************
            //定義變量區(qū)
            //***********************************************************************

            #define Data_IO PORTA //數(shù)碼管數(shù)據(jù)口
            #define Data_DDR DDRA //數(shù)碼管數(shù)據(jù)口方向寄存器
            #define D_LE0 PORTD &= ~(1 << PD4) //數(shù)碼管段控制位為0,鎖存端口數(shù)據(jù)
            #define D_LE1 PORTD |= (1 << PD4) //數(shù)碼管段控制位為1,鎖存器輸出與端口一致
            #define W_LE0 PORTD &= ~(1 << PD5) //數(shù)碼管位控制位為0
            #define W_LE1 PORTD |= (1 << PD5) //數(shù)碼管位控制位為1


            #define delay_us(x) _delay_us(x) //AVR GCC延時函數(shù) x(us)
            #define delay_ms(x) _delay_ms(x) //AVR GCC延時函數(shù) x(ms)


            #define uchar unsigned char
            #define uint unsigned int
            #define ulong unsigned long

            #define baud 9600 //設(shè)置波特率的大小
            #define baud_setting (uint)((ulong)F_CPU/(16*(ulong)baud)-1) //波特率計算公式
            #define baud_h (uchar)(baud_setting>>8) //提取高位
            #define baud_l (uchar)(baud_setting) //低位


            uint tx_count=200,tx_flag=0xff;
            static uchar A1,A2,A3;
            uchar usart_tx_data;
            uchar usart_rx_data;

            //***********************************************************************
            //共陰數(shù)碼管顯示的斷碼表0~F
            //***********************************************************************

            uchar table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};

            //***********************************************************************
            //IO端口初始化
            //***********************************************************************

            void system_init()
            {
            Data_IO=0xFF; //數(shù)據(jù)口為輸出
            Data_DDR=0xFF;

            PORTD=0xFF; //74HC573的控制口,設(shè)置為輸出
            DDRD=0xFF;
            }

            //*************************************************************************
            //74HC573控制數(shù)碼管動態(tài)掃描顯示函數(shù),顯示采集到的溫度
            //*************************************************************************

            void Display_Uart(uint data_b,uint data_s,uint data_g)
            {
            uchar i,j;
            system_init();
            j=0x01; //此數(shù)據(jù)用來控制位選
            for(i=0;i<5;i++) //用后3位數(shù)碼管來顯示
            {
            D_LE1;
            W_LE1;
            Data_IO=~j;
            W_LE0;
            j=(j<<1);
            Data_IO=0x00;
            D_LE0;
            delay_ms(1);
            }
            D_LE1;
            W_LE1;
            Data_IO=~j;
            W_LE0;
            j=(j<<1);
            Data_IO=table[A1];
            D_LE0;
            delay_ms(1);

            D_LE1;
            W_LE1;
            Data_IO=~j;
            W_LE0;
            j=(j<<1);
            Data_IO=table[A2];
            D_LE0;
            delay_ms(1);

            D_LE1;
            W_LE1;
            Data_IO=~j;
            W_LE0;
            j=(j<<1);
            Data_IO=table[A3];
            D_LE0;
            delay_ms(1);

            }


            void usart_init()
            {
            UCSR1A=0x00; //單倍速模式
            UCSR1B=0xF8; //接收中斷和發(fā)送中斷允許
            UCSR1C=(1<|(1<|(1<|(1< UBRR1H=baud_h; //寫波特率的值
            UBRR1L=baud_l;
            }
            |(1<|(1<|(1<

            //*************************************************************************
            //數(shù)據(jù)處理函數(shù)
            //*************************************************************************
            void data_do(uchar temp_d)
            {
            uchar A2t;
            A1=temp_d/100; //分出百,十,和個位
            A2t=temp_d%100;
            A2=A2t/10;
            A3=A2t%10;
            }

            //*************************************************************************
            //串口相關(guān)中斷服務(wù)子程序
            //*************************************************************************
            //數(shù)據(jù)發(fā)送結(jié)束中斷向量
            SIGNAL(SIG_USART1_TRANS) //中斷服務(wù)程序
            {
            delay_ms(10); //相關(guān)操作
            }

            //數(shù)據(jù)接收結(jié)束中斷向量
            SIGNAL(SIG_USART1_RECV) //中斷服務(wù)程序
            {
            usart_rx_data=UDR1; //將接收到的數(shù)據(jù)取出
            data_do(usart_rx_data); //數(shù)據(jù)處理,得到個位十位百位

            }
            //數(shù)據(jù)寄存器空中斷向量
            SIGNAL(SIG_USART1_DATA) //中斷服務(wù)程序
            {

            UDR1=usart_tx_data; //發(fā)送數(shù)據(jù)到數(shù)據(jù)寄存器
            tx_count--;
            if(tx_count==0x00)
            {
            tx_flag=0x01;
            UCSR1B=0xF0; //禁止發(fā)送
            }
            }


            //*************************************************************************
            //主程序
            //*************************************************************************
            void main()
            {
            system_init(); //系統(tǒng)初始化
            usart_init(); //usart串口初始化配置
            usart_tx_data=0xff;
            SREG|=0x80; //開啟全局中斷
            while(1)
            {
            SREG=0x00; //關(guān)中斷,PD口做IO口用,才能正常顯示數(shù)碼管
            Display_Uart(A1,A2,A3); //顯示接收到的數(shù)據(jù)
            SREG|=0x80; //開中斷,用于下次接收中斷
            }
            }



            關(guān)鍵詞: ATmega128PC機(jī)通

            評論


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

            關(guān)閉