新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 51單片機的串口收發通信C語言程序

        51單片機的串口收發通信C語言程序

        作者: 時間:2016-11-28 來源:網絡 收藏
        #include
        #include
        #include
        #define uchar unsigned char
        #define uint unsigned int
        #define ulong unsigned long
        #define ushort unsigned short
        #define MAX_DATA_LENGTH 32
        typedef struct//定義數據發送包
        {
        uchar head;//包頭
        uchar length;//數據長度
        uchar cmd;//命令
        uchar sData[6];//數據
        uchar crc;//校驗
        uchar end;//包尾
        } Packet,*PT;
        typedef struct//定義接收緩沖區
        {
        uchar iCnt;
        uchar sData[MAX_DATA_LENGTH];
        } RecvBuf,*RB;
        void SendD(PT addrBuf,uint cnt);//定義發送函數
        void Sleep(uint ms);//定義延時子程序
        void init();//C51初始化程序
        bit Judge(RB addrBuf);
        void Crc(PT addrBuf);
        Packet pT;
        RecvBuf rB;
        void main()
        {
        memset(&pT,0x00,MAX_DATA_LENGTH+5);
        memset(&rB,0x00,MAX_DATA_LENGTH+1);
        pT.head=0x02;
        pT.length=0x0b;
        pT.cmd=0x44;
        pT.end=0x03;
        sprintf(pT.sData,"%s","080327");
        pT.crc=0x056;
        init();
        while(1)
        {
        Sleep(10000);
        }
        }
        void serial(void) interrupt 4//定義串行口中斷處理子程序
        {
        ES=0;
        while(RI)
        {
        rB.sData[rB.iCnt]=SBUF;
        rB.iCnt++;
        RI=0;
        }
        if(Judge(&rB))
        {
        memset(&rB,0x00,MAX_DATA_LENGTH+1);
        SendD((uchar*)&pT,pT.length);
        }
        ES=1;
        }
        bit Judge(RB addrBuf)
        {
        if(addrBuf->sData[0]==0x02&&addrBuf->sData[addrBuf->sData[1]-1]==0x03)
        return 1;
        else
        return 0;
        }
        void init()//完成51初始化工作
        {
        TMOD=0x20;//初始化51
        TH1=0xfd;
        TL1=0x0Fd;
        TR1=1;
        SCON=0x50;
        PCON=0x00;
        EA=1;
        ES=1;
        }
        void SendD(uchar *addrBuf,uchar cnt)
        {
        int i=0;
        T0=0;
        while(++i<=cnt)
        {
        SBUF=addrBuf[i-1];
        while(!TI);
        TI=0;
        }
        }
        void Sleep(uint ms)//定義延時子程序
        {
        int i,j;
        for(i=0;i
        for(j=0;j<10;j++);
        }



        評論


        技術專區

        關閉
        主站蜘蛛池模板: 曲阜市| 汽车| 抚远县| 会东县| 宁陵县| 闽侯县| 苗栗县| 岢岚县| 淮阳县| 湖口县| 江门市| 遂溪县| 宜君县| 道真| 漠河县| 建湖县| 平阳县| 双江| 新宾| 辛集市| 景宁| 通海县| 驻马店市| 宁津县| 正蓝旗| 大埔区| 临邑县| 台东县| 蚌埠市| 高雄县| 齐齐哈尔市| 泸西县| 怀安县| 上思县| 青海省| 柘荣县| 枝江市| 广东省| 江安县| 册亨县| 张家川|