標(biāo)題: 51單片機(jī)對(duì)adc0808/0809兩路數(shù)據(jù)比較,程序有問題 [打印本頁]

作者: lv5211314    時(shí)間: 2021-7-7 21:32
標(biāo)題: 51單片機(jī)對(duì)adc0808/0809兩路數(shù)據(jù)比較,程序有問題
大佬們好,最近想做一個(gè)利用51單片機(jī)對(duì)adc0808/0809兩路轉(zhuǎn)換數(shù)據(jù)的比較,但是讀完兩路數(shù)據(jù)之后用if語句比較,發(fā)現(xiàn)不能實(shí)現(xiàn)功能,已經(jīng)確認(rèn)兩路數(shù)據(jù)讀取正確,求大佬賜教!
  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口數(shù)據(jù)
  41. {
  42.        P25=P26=P27=0;         //設(shè)置讀取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口接收數(shù)據(jù)
  50.                   OE=0;
  51.                                   temp=getdata1*1.96;
  52.                   temp3[0]=temp%10;           //計(jì)算個(gè)位數(shù)
  53.                                   temp3[1]=temp/10%10;          //計(jì)算十分位
  54.                                   temp3[2]=temp/100;        //計(jì)算百分位
  55.                                   bj1=temp3[2]+temp3[1]/10+temp3[0]/100;         //相加進(jìn)行比較
  56. }

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


  74. void main()
  75. {
  76.   
  77.   TimeInitial();
  78.   
  79.   while(1)
  80.        {
  81.          
  82.                   shang();
  83.                   xia();
  84.          
  85.                   if(bj1>bj2)                 //對(duì)兩路數(shù)據(jù)比較
  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.   }
復(fù)制代碼



作者: 1543330241    時(shí)間: 2021-7-8 11:35
怎么不能實(shí)現(xiàn)功能,你可以把兩次讀出來的數(shù)值顯示出來,或者通過串口發(fā)出來看看,再進(jìn)行比較
作者: lv5211314    時(shí)間: 2021-7-8 11:42
1543330241 發(fā)表于 2021-7-8 11:35
怎么不能實(shí)現(xiàn)功能,你可以把兩次讀出來的數(shù)值顯示出來,或者通過串口發(fā)出來看看,再進(jìn)行比較

顯示出來的數(shù)值沒問題,但是比較的時(shí)候發(fā)現(xiàn)不行。。。比較出來的結(jié)果完全是錯(cuò)誤的。。
作者: jjjjjjir    時(shí)間: 2021-7-8 12:02
直接用temp1和temp2比較就可以了。而且bi1,bj2計(jì)算也不對(duì)。
bj1=temp3[2]*100+temp3[1]*10+temp3[0];
作者: xuyaqi    時(shí)間: 2021-7-8 13:38
先弄清楚比較的目的,由于干擾數(shù)據(jù)跳動(dòng)很大,直接比較意義不大。
作者: lv5211314    時(shí)間: 2021-7-8 13:51
jjjjjjir 發(fā)表于 2021-7-8 12:02
直接用temp1和temp2比較就可以了。而且bi1,bj2計(jì)算也不對(duì)。
bj1=temp3[2]*100+temp3[1]*10+temp3[0];

直接用temp1和temp2比較也是結(jié)果不太對(duì)。。
作者: lv5211314    時(shí)間: 2021-7-8 13:54
xuyaqi 發(fā)表于 2021-7-8 13:38
先弄清楚比較的目的,由于干擾數(shù)據(jù)跳動(dòng)很大,直接比較意義不大。

我打算通過比較兩個(gè)電壓的大小,來確定步進(jìn)電機(jī)的正轉(zhuǎn)反轉(zhuǎn),如果temp1>temp2,電機(jī)就正轉(zhuǎn),反之就反轉(zhuǎn),要怎么比較呢?
作者: jjjjjjir    時(shí)間: 2021-7-8 16:31
lv5211314 發(fā)表于 2021-7-8 13:51
直接用temp1和temp2比較也是結(jié)果不太對(duì)。。

用getdata1,getdata2比較,這兩個(gè)數(shù)據(jù)是沒有經(jīng)常處理。
如果還是不對(duì),那就要檢查讀取的數(shù)據(jù)是否正確
作者: xuyaqi    時(shí)間: 2021-7-8 16:52
lv5211314 發(fā)表于 2021-7-8 13:54
我打算通過比較兩個(gè)電壓的大小,來確定步進(jìn)電機(jī)的正轉(zhuǎn)反轉(zhuǎn),如果temp1>temp2,電機(jī)就正轉(zhuǎn),反之就反轉(zhuǎn), ...

由于干擾,數(shù)據(jù)跳動(dòng)很大,經(jīng)過濾波再比較。




歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1