欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

求PC與89C51單片機之間的串行通信(PC發送,單片機接收,,接收數值)

[復制鏈接]
跳轉到指定樓層
樓主
接收數值要賦給一個變量,這個變量時用來控制舵機pwm波占空比的,求大佬們解答這段串口通信程序怎么編?
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:485190 發表于 2019-4-9 20:39 | 只看該作者
控制雙舵機,所以需要輸入兩個變量0.0,我覺得應該和一個變量差不多吧
回復

使用道具 舉報

板凳
ID:213173 發表于 2019-4-10 06:27 | 只看該作者
a838036398 發表于 2019-4-9 20:39
控制雙舵機,所以需要輸入兩個變量0.0,我覺得應該和一個變量差不多吧

串口每次只能傳輸1個字節,如果沒有使用自定義協議傳輸數據串,只是用簡單的單字節傳輸兩個變量,可以用一個字節的高4位和低4位各表示一個變量。如收到0xab,高4位分解為x=0xab>>4; 低4位分解為 y=0xab&0x0f;
回復

使用道具 舉報

地板
ID:485190 發表于 2019-4-10 13:19 | 只看該作者
wulin 發表于 2019-4-10 06:27
串口每次只能傳輸1個字節,如果沒有使用自定義協議傳輸數據串,只是用簡單的單字節傳輸兩個變量,可以用 ...

大佬,具體應該怎么寫呢?怎么定義這個變量,“uchar (隨機寫)=0xab”嗎?然后在主函數里提取x=。。。y=。。。這樣嗎?不好意思,小白給大佬添麻煩了
回復

使用道具 舉報

5#
ID:485190 發表于 2019-4-10 13:22 | 只看該作者
wulin 發表于 2019-4-10 06:27
串口每次只能傳輸1個字節,如果沒有使用自定義協議傳輸數據串,只是用簡單的單字節傳輸兩個變量,可以用 ...

大佬那具體怎么寫呢,是uchar 。。=0xab,然后再主函數中用你說的x=。。y=。。。提取高四位第四位這樣嗎?小白給大佬添麻煩了
回復

使用道具 舉報

6#
ID:213173 發表于 2019-4-11 08:12 | 只看該作者
a838036398 發表于 2019-4-10 13:22
大佬那具體怎么寫呢,是uchar 。。=0xab,然后再主函數中用你說的x=。。y=。。。提取高四位第四位 ...

給你寫一個示例程序,兩種數據解析方案任選一種。輸出端口可以自行重新定義。


  1. #include <AT89X52.H>
  2. #define uint unsigned int
  3. #define uchar unsigned char

  4. sbit LED1=P1^0;
  5. sbit LED2=P1^1;

  6. bit flag;                                //接收完成標志,
  7. uchar num,num1,num2;        //接收/分解的變量

  8. void main()                                                       
  9. {
  10.         PCON &= 0x7F;                //波特率不倍速
  11.         SCON = 0x50;                //8位數據,可變波特率
  12.         TMOD|= 0x20;                //設定定時器1為8位自動重裝方式
  13.         TL1 = 0xFD;                        //設定定時初值
  14.         TH1 = 0xFD;                        //設定定時器重裝值
  15.         TR1 = 1;                        //啟動定時器1
  16.         ET1 = 0;                        //禁止定時器1中斷
  17.         EA = 1;                                //開總中斷
  18.         ES = 1;                                //開串口中斷
  19.         while(1)
  20.         {
  21.                 if(flag==1)                //接收完成標志為1
  22.                 {
  23.                         ES=0;                //關串口中斷
  24.                         flag=0;                //接收完成標志清0
  25.                         SBUF=num;        //返回PC收到的數據
  26.                         while(!TI);        //等待發送中斷請求標志位為1
  27.                         TI=0;                //發送中斷請求標志位清0
  28.                         ES=1;                //開串口中斷
  29.         /*************數據解析方案一************/
  30.                         num1=num&0xf0;
  31.                         num2=num&0x0f;
  32.                         if(num1==0xa0)LED1=0;
  33.                         if(num1==0xb0)LED1=1;
  34.                         if(num2==0x0a)LED2=0;
  35.                         if(num2==0x0b)LED2=1;
  36.         /*************數據解析方案二************/
  37. /*                        num1=num>>4;
  38.                         num2=num&0x0f;
  39.                         if(num1==0x0a)LED1=0;
  40.                         if(num1==0x0b)LED1=1;
  41.                         if(num2==0x0a)LED2=0;
  42.                         if(num2==0x0b)LED2=1;
  43. */
  44.                 }
  45.         }
  46. }

  47. void ser() interrupt 4
  48. {                                //當接收完成發生中斷請求RI由硬件置1
  49.         RI=0;                //接收中斷請求標志位必須軟件清0
  50.         num=SBUF;        //獲取SBUF接收到的數據
  51.         flag=1;                //接收完成標志置1
  52. }
復制代碼



回復

使用道具 舉報

7#
ID:230559 發表于 2019-4-11 10:25 | 只看該作者
按串口的協議持續將變量寫入舵機
回復

使用道具 舉報

8#
ID:485190 發表于 2019-4-11 10:26 | 只看該作者
wulin 發表于 2019-4-11 08:12
給你寫一個示例程序,兩種數據解析方案任選一種。輸出端口可以自行重新定義。

非常感激,謝謝帶佬
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表