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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1313|回復: 2
打印 上一主題 下一主題
收起左側

請教如何做優化單片機串口發送程序

[復制鏈接]
跳轉到指定樓層
樓主
ID:734017 發表于 2021-10-26 11:43 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
code uchar HMI1[4]= {0xcc,0x33,0xc3,0x3c};       //幀尾
uchar Switching_coordinates[13]={0x00};         // 數據緩存
code uchar Powerout[6]={0xAA,0x00,0xcc,0x33,0xc3,0x3c};     //幀頭


void HMI_switch(uchar number,int Xs,int Ys,int Xe,int Ye,int X,int Y)      //因為輸座標麻煩,不方便移植 ,所以自動拆高底位

{
                        send_string( HMI2_switch,2);                    //發幀頭
                        Switching_coordinates[0]=number;         //圖片編號
                        Switching_coordinates[1]=(uchar)(Xs>>8);
                        Switching_coordinates[2]=(uchar)Xs;
                        Switching_coordinates[3]=(uchar)(Ys>>8);
                        Switching_coordinates[4]=(uchar)Ys;
                        Switching_coordinates[5]=(uchar)(Xe>>8);
                        Switching_coordinates[6]=(uchar)Xe;
                        Switching_coordinates[7]=(uchar)(Ye>>8);
                        Switching_coordinates[8]=(uchar)Ye;
                        Switching_coordinates[9]=(uchar)(X>>8);
                        Switching_coordinates[10]=(uchar)X;
                        Switching_coordinates[11]=(uchar)(Y>>8);
                        Switching_coordinates[12]=(uchar)Y;
                        send_string(Switching_coordinates,13);     //發數據
                        send_string(HMI1,4);          //幀尾
}



mian{
while(1)

   HMI_switch(0x02,0x0150,0x01d0,0x01c8,0x0248,0x0150,0x01d0);     //每秒發一次


if (ul_clok_satar)
          {
                 ul_clok_satar=~ul_clok_satar;
                          PWMCounter++;                                       
                                       
                                if(PWMCounter<=ul_PWMCounterSATAT[ul])
                                        ul_PWM=1;
                                
                                else
                                        ul_PWM=0;
                          

                        if(PWMCounter>=200)
                              PWMCounter=0;









}


void TM0_Isr() interrupt 1                                        //100US
{        
        
        
        if(facecare)                                                                                                                                         
                {
                        facecare_Time_Counter=~facecare_Time_Counter;
                }
        if (ul_satar|clok_satar)
                {
                        ul_clok_satar=~ul_clok_satar;
                        
                }
        
  }



每次到發送的時候,串口占用時間過長,定時器雖然反轉了,主程序跟不上。PWM會有0.2MS偏差
我是把計數寫在中斷直接處理輸出。還是怎么改一下 定時器1已經被另一路高速PWM占用了。


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

使用道具 舉報

沙發
ID:23640 發表于 2021-10-26 15:19 | 只看該作者
定時器中斷頻率太高了吧
回復

使用道具 舉報

板凳
ID:624769 發表于 2021-10-26 18:27 | 只看該作者
做一個緩沖池,把需要串口發送的內容先全部送入緩沖,然后,改寫串口發送部分,不要用 while(TI);  用if(TI);  用計數方式,每發一個字節 計數 +1,入口判斷if(Ti); 那么進入發下一字節,下一字節賦值給SBUF之后,立刻出來,去執行if (ul_clok_satar) 里面的內容,然后再回來判斷 if(TI); 決定是否發送下一字節。
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产欧美一区二区三区日本久久久 | 国产成人麻豆免费观看 | 亚洲综合婷婷 | 中文字幕第二区 | 成年人在线观看视频 | 免费成人毛片 | 日本在线视 | 少妇诱惑av | av一二三区 | 国产精品一区久久久 | 免费黄色av网站 | 亚洲免费精品 | 免费在线播放黄色 | 九九热精品免费 | 国产精品视频网 | 国产电影一区二区 | 亚洲一区二区三区在线 | 夏同学福利网 | 亚洲国产精品久久 | 日韩精品久久久久 | 午夜视频在线 | 五月激情婷婷六月 | 九九热免费看 | 日韩中文字幕免费 | 一级h片| 国产在线精品免费 | 中文字幕亚洲精品在线观看 | 久久久久久久一区二区三区 | 日韩在线中文 | 亚洲品质自拍视频网站 | 国产精品国产成人国产三级 | 91久久精品一区二区二区 | 影视先锋av资源噜噜 | 一区二区三区中文字幕 | 国产精品成人一区二区三区 | 国产成人自拍一区 | 国产成人精品一区二区三区在线 | 久精品久久 | 日韩欧美在线免费 | 久久亚洲欧美日韩精品专区 | 亚洲 中文 欧美 日韩 在线观看 |