新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > AVR與RS232——一個簡單易懂的串口通訊例子程序

        AVR與RS232——一個簡單易懂的串口通訊例子程序

        作者: 時間:2016-11-26 來源:網絡 收藏
        只有基本的功能,用于串口操作的演示,如果需要結構化的程序,到http://www.avrvi.com/avr_examples/usart.html

        RS232電路圖



        本程序在本站的開發板上通過,絕對沒有問題,歡迎討論。
        測試效果,啟動時發送http://www.avrvi.com加回車換行,然后,收到什么,返回什么,如果給它發送一個小a,會多發回一個OK,如果發的是大A,則發回Hello字符串。

        串口程序測試


        // ICC-AVR application builder : 2007-5-20 17:21:25
        // Target : M16
        // Crystal: 7.3728Mhz
        // AVR mega16 串口測試
        // AVR與虛擬儀器http://www.avrvi.com古欣

        #include
        #include

        #define F_CPU 7372800
        const unsigned char buffer[]="http://www.avrvi.com";

        void USART_Init( unsigned int baud )
        {
        unsigned int tmp;

        tmp= F_CPU/baud/16-1;
        UBRRH = (unsigned char)(tmp>>8);
        UBRRL = (unsigned char)tmp;

        UCSRB = (1<
        UCSRC = (1<}


        // ICC 生成的初始化
        //UART0 initialize
        // desired baud rate: 9600
        // actual: baud rate:9600 (0.0%)
        // char size: 8 bit
        // parity: Disabled
        void uart0_init(void)
        {
        UCSRB = 0x00; //disable while setting baud rate
        UCSRA = 0x00;
        UCSRC = BIT(URSEL) | 0x06;
        UBRRL = 0x2F; //set baud rate lo
        UBRRH = 0x00; //set baud rate hi
        UCSRB = 0x18;
        }

        //下面兩個函數直接從數據手冊上拷貝過來的

        // 數據發送【發送5 到8 位數據位的幀】
        void USART_Transmit( unsigned char data )
        {

        while ( !( UCSRA & (1<;

        UDR = data;
        }


        // 數據接收【以5 到8 個數據位的方式接收數 據幀】
        unsigned char USART_Receive( void )
        {

        while ( !(UCSRA & (1<;

        return UDR;
        }

        //連續發送字符
        void USART_Transmit_2( void )
        {
        while ( !( UCSRA & (1<;
        UDR = H;
        while ( !( UCSRA & (1<;
        UDR = e;
        while ( !( UCSRA & (1<;
        UDR = l;
        while ( !( UCSRA & (1<;
        UDR = l;
        while ( !( UCSRA & (1<;
        UDR = o;
        }


        void main(void)
        {
        unsigned char n=0,tmp=0;

        USART_Init(9600); //波特率9600 初始化串口
        // uart0_init();

        for(i=0;n<20;n++) //發送數組里面的字符串,http://www.avrvi.com
        {
        USART_Transmit(buffer[n]);
        }

        USART_Transmit(0x0d); //發送一個回車
        USART_Transmit(0x0a); //發送一個換行

        while(1)
        {
        if(UCSRA&(1<{
        tmp=USART_Receive(); //接收數據
        USART_Transmit(tmp); //發送數據

        if(tmp==a) //對接收到的數據進行,如果是a,再發一個OK回來
        {
        USART_Transmit(O);
        USART_Transmit(K);
        }
        if(tmp==A) //對接收到的數據進行,如果是A,再發一個Hello回來
        {
        USART_Transmit_2();
        }
        }
        }
        }

        測試效果,啟動時發送http://www.avrvi.com加回車換行,然后,收到什么,返回什么,如果給它發送一個小a,會多發回一個OK,如果發的是大A,則發回Hello字符串。


        關鍵詞: AVRRS232串口通

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 临泉县| 唐海县| 太仓市| 浮梁县| 长兴县| 芦山县| 河津市| 海伦市| 西平县| 屏南县| 确山县| 当阳市| 新昌县| 怀安县| 绥阳县| 江口县| 将乐县| 新竹市| 乡城县| 江陵县| 平遥县| 贡觉县| 大安市| 通道| 平阴县| 清水县| 嘉兴市| 那坡县| 周口市| 黄龙县| 固阳县| 永福县| 治多县| 朔州市| 泗洪县| 弋阳县| 益阳市| 五莲县| 鹿邑县| 绩溪县| 讷河市|