新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 單片機串口通訊

        單片機串口通訊

        作者: 時間:2012-08-24 來源:網絡 收藏

        通信協議: 第1字節,MSB為1,為第1字節標志,第2字節,MSB為0,為非第一字節標志,其余類推……,最后一個字節為前幾個字節后7位的異或校驗和。

        本文引用地址:http://www.104case.com/article/170993.htm

        測試方法:可以將調試助手的發送框寫上 95 10 20 25,并選上16進制發送,接收框選上16進制顯示,如果每發送一次就接收到95 10 20 25,說明測試成功。

        //這是一個C51接收(中斷)和發送例程,可以用來測試51的中斷接收

        //和查詢發送,另外我覺得發送沒有必要用中斷,因為程序的開銷是一樣的

        #include reg51.h>

        #include string.h>

        #define INBUF_LEN 4 //數據長度

        unsigned char inbuf1[INBUF_LEN];

        unsigned char checksum,count3;

        bit read_flag= 0 ;

        void init_serialcomm( void )

        {

        SCON = 0x50 ; //SCON: serail mode 1, 8-bit UART, enable ucvr

        TMOD |= 0x20 ; //TMOD: timer 1, mode 2, 8-bit reload

        PCON |= 0x80 ; //SMOD=1;

        TH1 = 0xF4 ; //Baud:4800 fosc=11.0592MHz

        IE |= 0x90 ; //Enable Serial Interrupt

        TR1 = 1 ; // timer 1 run

        // TI=1;

        }

        //向發送一個字符

        void send_char_com( unsigned char ch)

        {

        SBUF=ch;

        while (TI== 0 );

        TI= 0 ;

        }

        //向串口發送一個字符串,strlen為該字符串長度

        void send_string_com( unsigned char *str, unsigned int strlen)

        {

        unsigned int k= 0 ;

        do

        {

        send_char_com(*(str + k));

        k++;

        } while (k strlen);

        }

        //串口接收中斷函數

        void serial () interrupt 4 using 3

        {

        if (RI)

        {

        unsigned char ch;

        RI = 0 ;

        ch=SBUF;

        if (ch> 127 )

        {

        count3= 0 ;

        inbuf1[count3]=ch;

        checksum= ch- 128 ;

        }

        else

        {

        count3++;

        inbuf1[count3]=ch;

        checksum ^= ch;

        if ( (count3==(INBUF_LEN- 1 )) (!checksum) )

        {

        read_flag= 1 ; //如果串口接收的數據達到INBUF_LEN個,且校驗沒錯,

        //就置位取數標志

        }

        }

        }

        }


        上一頁 1 2 3 下一頁

        關鍵詞: 通訊 串口 單片機

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 和田市| 海淀区| 谷城县| 阜康市| 台南县| 南靖县| 板桥市| 开封市| 卢龙县| 且末县| 上林县| 化州市| 新巴尔虎右旗| 新泰市| 融水| 望都县| 保定市| 方山县| 大田县| 遂宁市| 广宁县| 安乡县| 文登市| 七台河市| 克什克腾旗| 田林县| 东方市| 乌兰察布市| 饶阳县| 沧源| 屏东县| 峡江县| 墨玉县| 新野县| 绥中县| 邵阳县| 邯郸县| 远安县| 安康市| 石狮市| 蒲江县|