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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

關于串口通信傳輸數據不正確的問題

[復制鏈接]
跳轉到指定樓層
樓主
30黑幣
哪位大哥幫忙看看這個,實在不知道問題出在哪?(可能串口程序存在問題)
本程序完成的內容為,數據經AD采樣后再P1端口顯示,同時向虛擬串口發送數據。遇到問題:P1端口顯示轉換數據正常,但用串口助手看收到的數不對。例如P1端口顯示80;串口調試助手就顯示20;
  1. #include<reg52.h>
  2. #include<intrins.h>
  3. #define uchar unsigned char
  4. #define uint unsigned int
  5. //AD管腳定義
  6. sbit CLK=P2^0;
  7. sbit DI=P2^2;
  8. sbit DO=P2^3;
  9. //譯碼器管腳定義
  10. sbit a=P2^4;
  11. sbit b=P2^5;
  12. sbit c=P2^6;
  13. sbit e=P2^7;

  14. void delay(uint z);        //函數聲明
  15. void init()
  16. {
  17.                 //串口輸chu
  18.                 SCON=0X40;
  19.                 ES=1;//允許串口中斷
  20.                 //定時器設置
  21.                 TMOD=0X20;//定時器工作模式選擇方式2        自動裝填
  22.                 TH1=0XF3; //TH1與TL1為定時器中T1寄存器的高8低8位;設置波特率用
  23.                 TL1=0XF3;
  24.                 PCON=0X80;
  25.                 EA=1;//允許總中斷
  26.                 TR1=1;//開啟T1定時器
  27. }
  28. void delay(uint z)
  29. {
  30.   uint i = 0;
  31.         uint j = 0;
  32.         for(i=0;i<z;i++)
  33.            for(j=0;j<114;j++);
  34. }
  35. uchar read_AD(uint n)
  36. {         int num[4][4]={
  37.                                         {1,1,0,0} ,//CH0
  38.                                         {1,1,1,0} ,//CH1
  39.                                         {1,1,0,1} ,//CH2
  40.                                         {1,1,1,1} ,//CH3
  41.                                         }        ;
  42.         uchar i,out1;
  43.         out1=0;
  44. //加入譯碼器后CS由譯碼器控制    CS=0;
  45.         _nop_();
  46.     CLK=0;
  47. //        DO=0;
  48.     DI=num[n][0];_nop_(); CLK=1;_nop_(); CLK=0;
  49.     DI=num[n][1];_nop_(); CLK=1;_nop_(); CLK=0;
  50.     DI=num[n][2];_nop_(); CLK=1;_nop_(); CLK=0;
  51.     DI=num[n][3];_nop_(); CLK=1;_nop_(); CLK=0;
  52.         _nop_();_nop_();_nop_();       
  53. for(i=0;i<8;i++)//轉換8位二進制數
  54. {                
  55.         CLK=1;_nop_();
  56.         CLK=0;_nop_();//下降沿開始數據轉
  57.         if(DO)
  58.                 out1=out1<<1|DO;
  59.         else
  60.                 out1=out1<<1;  

  61. }       
  62. //加入譯碼器后CS由譯碼器控制         CS=1;
  63.         return out1;
  64. }
  65. void main()
  66. {       
  67. uint i,j;
  68. uchar s;

  69. uint m[8][3]={
  70.                           {0,0,0},//YO
  71.                           {0,0,1},//Y1
  72.                           {0,1,0},//Y2
  73.                           {0,1,1},//Y3
  74.                           {1,0,0},//Y4
  75.                           {1,0,1},//Y5
  76.                           {1,1,0},//Y6
  77.                           {1,1,1} //Y7
  78.                                                 }; //譯碼器控制
  79.                         init(); //串口初始化
  80.                                                  
  81.         while(1)
  82.         {       
  83.                 e=0;//譯碼器U1工作
  84.                 for(j=0;j<1;j++) //循環使各個AD工作
  85.                 {
  86.                         a=m[j][2];
  87.                         b=m[j][1];
  88.                         c=m[j][0];
  89.                         for(i=0;i<1;i++)//AD通道片選讀取       
  90.                         {
  91.                                 ES=0;
  92.                                 P1=read_AD(i);
  93.                                 s=read_AD(i);
  94.                                 SBUF=s;
  95.                                 while(!TI);
  96.                                 TI=0;       
  97.                                 ES=1;
  98.                         }
  99.                 }
  100.                         e=1;//譯碼器U1工作
  101.         }               
  102. }
復制代碼


串口.png (169.29 KB, 下載次數: 171)

串口.png

串口1.png (521.38 KB, 下載次數: 170)

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

使用道具 舉報

沙發
ID:440482 發表于 2019-4-20 10:21 | 只看該作者
不要沉呀!自頂
回復

使用道具 舉報

板凳
ID:440482 發表于 2019-4-20 10:27 | 只看該作者
模擬單片機晶振為12M
回復

使用道具 舉報

地板
ID:434390 發表于 2019-4-20 12:35 | 只看該作者
你讀了2次轉換數據,改成1次就OK了
P1=read_AD(i);
s=read_AD(i);

修改如下:
  s=read_AD(i);
  P1=s;

回復

使用道具 舉報

5#
ID:123289 發表于 2019-4-20 16:56 | 只看該作者
要保證收、發的字符格式一樣。如:同是ASCII碼、同是HEX格式……
回復

使用道具 舉報

6#
ID:440482 發表于 2019-4-21 08:18 | 只看該作者
snni00 發表于 2019-4-20 12:35
你讀了2次轉換數據,改成1次就OK了
P1=read_AD(i);
s=read_AD(i);

和這個應該沒關系
回復

使用道具 舉報

7#
ID:440482 發表于 2019-4-21 08:29 | 只看該作者
yzwzfyz 發表于 2019-4-20 16:56
要保證收、發的字符格式一樣。如:同是ASCII碼、同是HEX格式……

沒懂,請指點。應該發送的是HEX格式的,接受也是按HEX顯示。但它數據顯示還是不對,我根據AD轉換后現將其在P1口顯示,然后再對比的,兩個數差太多了
回復

使用道具 舉報

8#
ID:440482 發表于 2019-4-21 09:51 | 只看該作者
我這次不加譯碼器工作后,傳輸數據就正確了,本來譯碼器只是進行片選,但為什么加入譯碼器進行片選就不行了呢?求指點
回復

使用道具 舉報

9#
ID:467275 發表于 2019-4-21 14:37 | 只看該作者
晶振是否正確匹配
回復

使用道具 舉報

10#
ID:434390 發表于 2019-4-21 16:21 | 只看該作者
lizzz 發表于 2019-4-21 08:18
和這個應該沒關系

如果和確認和這個沒關系,那有2點需要確認,常量->P1是否是你輸出的常量
回復

使用道具 舉報

11#
ID:434390 發表于 2019-4-21 16:26 | 只看該作者
lizzz 發表于 2019-4-21 08:18
和這個應該沒關系

如果確實和這個沒有關系,那就需要確認
1.預定值(常量)輸出到P1,你看到的是否是預定值
2.預定值(常量)輸出SBUF,串口端顯示是否是預定值
通過這2點判斷問題在P1,還是在串口
回復

使用道具 舉報

12#
ID:440482 發表于 2019-4-22 11:35 | 只看該作者
snni00 發表于 2019-4-21 16:26
如果確實和這個沒有關系,那就需要確認
1.預定值(常量)輸出到P1,你看到的是否是預定值
2.預定值(常 ...

問題應該在串口,但是我不加譯碼器控制時,串口接受的數又正常了。。。。。
回復

使用道具 舉報

13#
ID:440482 發表于 2019-4-22 11:35 | 只看該作者

晶振正確
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产日韩久久久久69影院 | 先锋资源网 | 午夜不卡一区二区 | 日韩欧美三区 | 99这里只有精品视频 | av网站在线播放 | 在线视频日韩 | 艹逼网 | 欧美一区二区三区久久精品视 | 中文字幕精品一区二区三区在线 | 午夜在线 | 精品国产乱码久久久久久丨区2区 | 少妇一区二区三区 | 亚洲劲爆av | 国产精彩视频一区 | 阿v视频在线观看 | 希岛爱理在线 | 这里精品| 欧美在线国产精品 | 天天插天天操 | 亚洲精品天堂 | 日本韩国欧美在线观看 | 婷婷免费视频 | 九九久久精品 | 久久亚洲国产精品日日av夜夜 | 国产精品久久久久久久久婷婷 | 一区二区在线免费观看 | 一二区电影 | 99re6在线视频精品免费 | 亚洲免费观看 | 精品久久久久久久久久 | 久久久久亚洲精品 | 欧美日韩综合视频 | 欧美日韩大片 | 日韩av一区二区在线观看 | 国产精品一区二区久久 | 日本a∨视频| 成人午夜免费视频 | 国产成年人小视频 | 欧美日韩久久久 | 国产一区二区影院 |