久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 2435|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

最簡(jiǎn)單片機(jī)串口幀指令接收程序

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:301968 發(fā)表于 2021-12-28 17:45 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
本程序主要用作串口接收幀指令而產(chǎn)生的相應(yīng)動(dòng)作,本程序完全自已編寫使用。比較可靠

bit    Uart1_RX_OK_Flag=0;                                       //串口1接收數(shù)據(jù)正確標(biāo)志
bit    Uart1_flagTxd = 0;                                           //單字節(jié)發(fā)送完成標(biāo)志,用來替代 TXD 中斷標(biāo)志位
u16  xdata Uart1_cntRxd = 0;                                  //接收字節(jié)計(jì)數(shù)器
u8    xdata Uart1_Rxd_buff[200]={0};                   //串口1接收緩沖區(qū)串口數(shù)據(jù),接收中斷中使用
u8    Uart1_flagFrame_50ms = 0;                          //串口1幀接收完成標(biāo)志,即接收到一幀新數(shù)據(jù) 串口1幀標(biāo)志時(shí)間為50MS,超過50MS為1幀完
bit   Uart1_flag_en = 0;
                                         //串口1指令使能標(biāo)志
void Uart1_Init()                //115200bps@24MHz
{
        SCON = 0x50;                //8位數(shù)據(jù),可變波特率
        AUXR |= 0x40;                //定時(shí)器1時(shí)鐘為Fosc,即1T
        AUXR &= 0xFE;                //串口1選擇定時(shí)器1為波特率發(fā)生器
        TMOD &= 0x0F;                //設(shè)定定時(shí)器1為16位自動(dòng)重裝方式
        TL1 = 0xCC;                //設(shè)定定時(shí)初值
        TH1 = 0xFF;                //設(shè)定定時(shí)初值
        ET1 = 0;                //禁止定時(shí)器1中斷
        TR1 = 1;                //啟動(dòng)定時(shí)器1
        ES=1;
        TI=0;
}



/* 串口中斷服務(wù)函數(shù) */
void InterruptUART() interrupt 4
{
        static  u8  i=0;
        u16   temchar=0;


        if (RI)         //接收到新字節(jié)
        {
                Uart1_flagFrame_50ms = 0;          //串口1幀接收完成標(biāo)志清零,即接收到一幀新數(shù)據(jù) 串口1幀標(biāo)志時(shí)間為50MS,超過50MS為1幀完
                Uart1_flag_en = 1;                     ////接收貞處理標(biāo)志
                temchar=SBUF;                                                    //清零接收中斷標(biāo)志位      
                RI = 0;                                                                                 //清零接收中斷標(biāo)志位
                if(temchar==0x7f)
                {
                        i++;
                        if(i>=16)
                        {         i=0;IAP_CONTR |= 0x60;        }     //這個(gè)作用用于自動(dòng)重啟,自動(dòng)燒錄,不用重新上電
                }
                else
                { i=0;}


                if (Uart1_cntRxd <Uart1_bufcnt)         //接收緩沖區(qū)尚未用完時(shí),
                {
                        Uart1_Rxd_buff[Uart1_cntRxd++] = temchar;
                }                                                                                //保存接收字節(jié),并遞增計(jì)數(shù)器
        }
        if (TI)                         //字節(jié)發(fā)送完畢
        {
                TI = 0;                 //清零發(fā)送中斷標(biāo)志位
                Uart1_flagTxd = 1; //設(shè)置字節(jié)發(fā)送完成標(biāo)志
        }
}




void Uart1_Action()           //串口功能函數(shù),Uart1_drive()中調(diào)用
{
        u8 *pbuf; u16 Len=0;
        pbuf=&Uart1_Rxd_buff[0];    //接收緩沖區(qū)指針轉(zhuǎn)換,長(zhǎng)度轉(zhuǎn)換。
      
         if(CmpMemory(pbuf,&cmd1[0], sizeof(cmd1)-1))  //指令比較,
        {
           
        }      
}



void Uart1_drive()           //串口功能函數(shù),主循環(huán)中調(diào)用
{
        if(Uart1_flagFrame_50ms>=50&&Uart1_flag_en)       //串口1指令使能標(biāo)志 ==0) //接收幀計(jì)時(shí)到,并且未處理數(shù)據(jù)指令
        {
                  Uart1_Action();
                Clear_array(Uart1_Rxd_buff, Uart1_bufcnt ); //清空RXD接收緩沖區(qū)
                    Clear_array(DATA_BUFF_RXD, 8); //清空臨時(shí)數(shù)據(jù)緩沖區(qū)
               Uart1_cntRxd=0;                                                                                                                         //接收字節(jié)清零
              Uart1_flag_en=0;                                 //幀功能處理標(biāo)志,處理為標(biāo)志1
              Uart1_flagFrame_50ms=0;
        }
      
}


void TM0_Isr() interrupt 1        //定時(shí)器0中斷函數(shù)1mS
{
    if(Uart1_flagFrame_50ms<50&&Uart1_flag_en)   //串口1幀接收完成標(biāo)志,即接收到一幀新數(shù)據(jù) 串口1幀標(biāo)志時(shí)間為50MS,超過50MS為1幀完
    Uart1_flagFrame_50ms++;

}

評(píng)分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏6 分享淘帖 頂1 踩
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 四虎网站在线观看 | 精品一区二区电影 | 亚洲国产精品一区二区三区 | 久久国产精品免费一区二区三区 | 国产精品jizz在线观看老狼 | 精品欧美一区二区三区久久久 | 欧美日韩亚洲在线 | 成人久久18免费网站 | 久久福利电影 | 99re6在线视频精品免费 | 一区二区免费在线观看 | 国产在线观看一区 | 亚洲精品播放 | 日本久草 | 亚洲一区二区三区 | 精品一区二区在线观看 | 国产午夜精品视频 | 99爱视频| 日韩一区在线播放 | 国产精品一区二区三区四区 | 欧美久久视频 | 久久久国产一区二区三区四区小说 | 黄色大片在线免费观看 | 久久久久久久一区 | 欧美综合视频 | 9porny九色视频自拍 | 日本一道本视频 | 午夜精品一区二区三区三上悠亚 | 日本精品在线观看 | 91大神在线看 | 久久99精品久久久久久青青日本 | 自拍视频网站 | 福利网址 | 亚洲欧美中文日韩在线 | 日韩av成人| 免费成人在线网 | 国产91黄色 | a级免费观看视频 | 成年人视频在线免费观看 | 日本免费在线 | 国产精品揄拍一区二区 |