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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

51單片機對adc0808/0809兩路數據比較,程序有問題

[復制鏈接]
跳轉到指定樓層
樓主
ID:949127 發表于 2021-7-7 21:32 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
大佬們好,最近想做一個利用51單片機對adc0808/0809兩路轉換數據的比較,但是讀完兩路數據之后用if語句比較,發現不能實現功能,已經確認兩路數據讀取正確,求大佬賜教!
  1. #include<reg52.h>
  2. unsigned int i;
  3. unsigned int j;
  4. unsigned int getdata1;
  5. unsigned int getdata2;
  6. unsigned int temp;
  7. unsigned int temp1;
  8. unsigned int temp3[8];
  9. unsigned int temp4[8];
  10. unsigned int bj1;
  11. unsigned int bj2;
  12. sbit ST=P3^0;
  13. sbit OE=P3^1;
  14. sbit EOC=P3^2;
  15. sbit CLK=P3^3;
  16. sbit P17=P1^7;
  17. sbit P25=P2^5;
  18. sbit P26=P2^6;
  19. sbit P27=P2^7;
  20. void TimeInitial();
  21. void Delay(unsigned int i);
  22. void TimeInitial()
  23.     {
  24.          TMOD=0x10;
  25.          TH1=(65536-200)/256;
  26.          TL1=(65536-200)%256;
  27.          EA=1;
  28.          ET1=1;
  29.          TR1=1;
  30.     }

  31. void Delay(unsigned int i)
  32.     {
  33.          unsigned int j;
  34.          for(;i>0;i--)
  35.             {
  36.                 for(j=0;j<125;j++)
  37.                 {;}
  38.             }
  39.     }

  40. void shang()   //讀取IN0口數據
  41. {
  42.        P25=P26=P27=0;         //設置讀取IN0口
  43.                   ST=0;
  44.           OE=0;
  45.           ST=1;
  46.           ST=0;                                    
  47.           while(EOC==0);
  48.                   OE=1;
  49.                                   getdata1=P0;          //51 P0口接收數據
  50.                   OE=0;
  51.                                   temp=getdata1*1.96;
  52.                   temp3[0]=temp%10;           //計算個位數
  53.                                   temp3[1]=temp/10%10;          //計算十分位
  54.                                   temp3[2]=temp/100;        //計算百分位
  55.                                   bj1=temp3[2]+temp3[1]/10+temp3[0]/100;         //相加進行比較
  56. }

  57. void xia()          //讀取IN1口數據
  58. {
  59.           ST=0;
  60.           OE=0;
  61.                   P25=1;P26=P27=0;                 //設置讀取IN1口
  62.                   ST=1;
  63.           ST=0;                  
  64.                   while(EOC==0);
  65.                   OE=1;
  66.                                   getdata2=P0;                //51 P0口接收數據
  67.                   OE=0;
  68.                                   temp1=getdata2*1.96;
  69.                   temp4[0]=temp1%10;          //計算個位數
  70.                                   temp4[1]=temp1/10%10;          //計算十分位
  71.                                   temp4[2]=temp1/100;        //計算百分位
  72.                                   bj2=temp4[2]+temp4[1]/10+temp4[0]/100;         //相加進行比較
  73. }


  74. void main()
  75. {
  76.   
  77.   TimeInitial();
  78.   
  79.   while(1)
  80.        {
  81.          
  82.                   shang();
  83.                   xia();
  84.          
  85.                   if(bj1>bj2)                 //對兩路數據比較
  86.                                   {
  87.                                         P17=0;                                
  88.                                 }
  89.         }
  90. }

  91. void t1(void) interrupt 3 using 0
  92. {
  93.   TH1=(65536-200)/256;
  94.   TL1=(65536-200)%256;
  95.   CLK=~CLK;
  96.   }
復制代碼


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

使用道具 舉報

沙發
ID:539024 發表于 2021-7-8 11:35 | 只看該作者
怎么不能實現功能,你可以把兩次讀出來的數值顯示出來,或者通過串口發出來看看,再進行比較
回復

使用道具 舉報

板凳
ID:949127 發表于 2021-7-8 11:42 | 只看該作者
1543330241 發表于 2021-7-8 11:35
怎么不能實現功能,你可以把兩次讀出來的數值顯示出來,或者通過串口發出來看看,再進行比較

顯示出來的數值沒問題,但是比較的時候發現不行。。。比較出來的結果完全是錯誤的。。
回復

使用道具 舉報

地板
ID:176854 發表于 2021-7-8 12:02 | 只看該作者
直接用temp1和temp2比較就可以了。而且bi1,bj2計算也不對。
bj1=temp3[2]*100+temp3[1]*10+temp3[0];
回復

使用道具 舉報

5#
ID:94031 發表于 2021-7-8 13:38 | 只看該作者
先弄清楚比較的目的,由于干擾數據跳動很大,直接比較意義不大。
回復

使用道具 舉報

6#
ID:949127 發表于 2021-7-8 13:51 | 只看該作者
jjjjjjir 發表于 2021-7-8 12:02
直接用temp1和temp2比較就可以了。而且bi1,bj2計算也不對。
bj1=temp3[2]*100+temp3[1]*10+temp3[0];

直接用temp1和temp2比較也是結果不太對。。
回復

使用道具 舉報

7#
ID:949127 發表于 2021-7-8 13:54 | 只看該作者
xuyaqi 發表于 2021-7-8 13:38
先弄清楚比較的目的,由于干擾數據跳動很大,直接比較意義不大。

我打算通過比較兩個電壓的大小,來確定步進電機的正轉反轉,如果temp1>temp2,電機就正轉,反之就反轉,要怎么比較呢?
回復

使用道具 舉報

8#
ID:176854 發表于 2021-7-8 16:31 | 只看該作者
lv5211314 發表于 2021-7-8 13:51
直接用temp1和temp2比較也是結果不太對。。

用getdata1,getdata2比較,這兩個數據是沒有經常處理。
如果還是不對,那就要檢查讀取的數據是否正確
回復

使用道具 舉報

9#
ID:94031 發表于 2021-7-8 16:52 | 只看該作者
lv5211314 發表于 2021-7-8 13:54
我打算通過比較兩個電壓的大小,來確定步進電機的正轉反轉,如果temp1>temp2,電機就正轉,反之就反轉, ...

由于干擾,數據跳動很大,經過濾波再比較。
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 中文字幕在线观看 | 在线视频中文字幕 | 国产乱码久久久久久 | 欧美激情在线精品一区二区三区 | 久久久久久电影 | 国产福利91精品一区二区三区 | 成人免费视频网站 | 一级a毛片| 亚洲精品一区av在线播放 | 天天看夜夜| av天天澡天天爽天天av | 毛片a级 | 欧美成人精品激情在线观看 | 欧美国产精品一区二区三区 | 久久久不卡网国产精品一区 | 在线一区视频 | 日韩精品免费在线观看 | 欧美精品综合在线 | 黄色播放 | 成人妇女免费播放久久久 | 蜜桃av人人夜夜澡人人爽 | 国产精品久久久久久久久久尿 | 国产成人精品一区二区三区四区 | 午夜精品一区二区三区在线播放 | 亚洲欧美在线一区 | 最近中文字幕在线视频1 | 男女在线网站 | 亚av在线 | 久久tv在线观看 | 少妇一级淫片免费放播放 | 国产黄色小视频 | 精品视频在线观看 | 亚洲国产精品一区在线观看 | 免费久久久| 成人欧美一区二区 | 九九视频在线观看视频6 | 91一区二区在线观看 | 免费观看的av | 欧美三级免费观看 | 特级毛片www| 精产国产伦理一二三区 |