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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2099|回復: 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.   }
復制代碼


回復

使用道具 舉報

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];
回復

使用道具 舉報

ID:94031 發表于 2021-7-8 13:38 | 顯示全部樓層
先弄清楚比較的目的,由于干擾數據跳動很大,直接比較意義不大。
回復

使用道具 舉報

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比較也是結果不太對。。
回復

使用道具 舉報

ID:949127 發表于 2021-7-8 13:54 | 顯示全部樓層
xuyaqi 發表于 2021-7-8 13:38
先弄清楚比較的目的,由于干擾數據跳動很大,直接比較意義不大。

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

使用道具 舉報

ID:176854 發表于 2021-7-8 16:31 | 顯示全部樓層
lv5211314 發表于 2021-7-8 13:51
直接用temp1和temp2比較也是結果不太對。。

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

使用道具 舉報

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久久久久久久久久久 | 中文字幕一区二区三区乱码在线 | 欧美精品一区在线发布 | 日韩电影中文字幕 | 1000部精品久久久久久久久 | 国产久| 日韩有码在线播放 | www亚洲精品 | 欧美成人免费在线视频 | www.日韩av.com | 午夜视频免费在线观看 | av一级久久 | 自拍偷拍精品 | 人人看人人射 | 免费黄色片在线观看 | 欧美国产精品 | 免费h视频 | 日本一区二区三区在线观看 | 欧美aaa一级片| 91精品国产欧美一区二区成人 | 欧美在线视频一区二区 | 一级网站| 亚洲狠狠 | 美女视频. | av黄色片在线观看 | 青娱乐一区二区 | 97天天干| 成年人在线视频 | 二区av| 91资源在线| 草久免费视频 | 色婷婷精品国产一区二区三区 | 国产98色在线 | 日韩 | 少妇午夜一级艳片欧美精品 | 久久久久国产精品免费免费搜索 | 国产特黄一级 | 亚洲小视频 | 精品久久久久久久久久 | 色婷婷影院 | 成人动漫一区二区 | 亚洲夜夜爽 |