新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 51串口 單片機上接收數據程序

        51串口 單片機上接收數據程序

        作者: 時間:2016-11-17 來源:網絡 收藏
        #include

        #include

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

        #define uchar unsigned char
        #define uint unsigned int

        //sbit BEEP = P1; // P1接8個LED
        unsigned char Receive(void)
        {
        unsigned char dat;
        while(RI==0) //只要接收中斷標志位RI沒有被置“1” 當接收完畢時,中斷標志RI被置1
        ; //等待,直至接收完畢(RI=1)
        RI=0; //為了接收下一幀數據,需將RI清0
        dat=SBUF; //將接收緩沖器中的數據存于dat
        return dat;
        }

        void main (void)
        {
        int i =0;
        SCON = 0x50; //REN=1允許串行接受狀態,串口工作模式2
        TMOD|= 0x20; //定時器1工作方式2
        // PCON|= 0x80; //波特率提高一倍
        //TH1 = 0xFD; //baud*2 /* reload value 19200、數據位8、停止位1。效驗位無(11.0592)
        TH1 = 0xFD;// //baud /* 波特率9600、數據位8、停止位1。效驗位無 (11.0592M)
        TL1 = 0xFD;
        TR1 = 1; //開啟定時器1
        //ES = 1; //開串口中斷 是否開串口中斷和開總中斷不影響。
        //EA = 1; // 開總中斷
        // IE = 0x0;
        REN=1; //允許接收
        while(1)
        {
        P1=Receive(); //將接收到的數據送P2口顯示
        }

        }

        c51串口接收并發送數據程序
        2007年11月02日 下午 10:00


        #include
        #defineBUFFERLEGTH 10
        //-----------------------------------------------------------------
        void UART_init();//串口初始化函數
        void COM_send(void);//串口發送函數
        char str[20]="hellorn";

        //-------------------------------------------------------------------
        void main(void)
        {
        unsigned char i;
        UART_init();//初始化串口
        for(i = 0;i < 10 ;i++)
        {
        COM_send();//首先發送一次數據作為測試用

        };

        while(1);
        }


        //-------------------------------------------------------------
        //--------------------------------------------------------------------------------------------------
        // 函數名稱: UART_init()串口初始化函數
        // 函數功能: 在系統時鐘為11.059MHZ時,設定串口波特率為9600bit/s
        //串口接收中斷允許,發送中斷禁止
        //--------------------------------------------------------------------------------------------------
        void UART_init()
        {
        //初始化串行口和波特率發生器
        SCON =0x50;//選擇串口工作方式1,打開接收允許
        TMOD =0x20;//定時器1工作在方式2,定時器0工作在方式1
        TH1 =0xfA;//實現波特率9600(系統時鐘11.0592MHZ)
        PCON = 0x80;
        TR1 =1;//啟動定時器T1
        ET1 =0;
        ES=1;//允許串行口中斷
        PS=1;//設計串行口中斷優先級
        EA =1;//單片機中斷允許
        }
        //------------------------------------------------------------
        void COM_send(void)
        {
        unsigned char point = 0;
        for(point=0;point< 20;point++)//連續發送二十位數據//把緩存區的數據都發送到串口
        {
        SBUF=str[point];
        while(!TI);
        TI=0;
        }
        }
        //--------------------------------------------------------------
        //--------------------------------------------------------------------------------------------------
        // 函數名稱: com_interrup()串口接收中斷處理函數
        // 函數功能: 接收包括起始位S在內的十位數據到數據緩沖區
        //--------------------------------------------------------------------------------------------------
        void com_interrupt(void) interrupt 4 using 3
        {
        unsigned char RECEIVR_buffer;
        if(RI)//處理接收中斷
        {
        RI=0;//清除中斷標志位
        RECEIVR_buffer=SBUF;//接收串口數據

        if (RECEIVR_buffer == s)
        {
        SCON =0x40;//接收不允許
        COM_send();//發送數據
        SCON =0x50;//接收允許
        }
        }




        評論


        技術專區

        關閉
        主站蜘蛛池模板: 湄潭县| 安阳市| 南和县| 全州县| 曲麻莱县| 广州市| 青河县| 怀宁县| 株洲市| 蒙自县| 靖州| 宝鸡市| 隆尧县| 屯留县| 鄂伦春自治旗| 六盘水市| 安多县| 息烽县| 大邑县| 富源县| 衡阳县| 林西县| 乐至县| 青阳县| 彩票| 汉寿县| 喀喇沁旗| 合山市| 云和县| 平塘县| 苗栗县| 东辽县| 梅州市| 和静县| 洮南市| 准格尔旗| 集安市| 农安县| 枣强县| 乌兰浩特市| 宁乡县|