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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4504|回復: 9
收起左側

關于串行口打印在調試程序中的應用的問題

[復制鏈接]
ID:147531 發表于 2016-11-18 20:16 | 顯示全部樓層 |閱讀模式
  1. #include <reg52.h>                //52單片機頭文件
  2. #include <intrins.h>
  3. #include<stdio.h>
  4. #define uchar unsigned char                //宏定義
  5. #define uint unsigned int
  6. sbit dula=P2^6;
  7. sbit wela=P2^7;
  8. sbit wr=P3^6;
  9. sbit rd=P3^7;
  10. uchar flag,ad;
  11. uchar flag_uart,flag_time,flag_on,a,i,t0_num,ad_val;
  12. float ad_vo;
  13. uchar code tab[]={
  14. 0x3f,0x06,0x5b,0x4f,
  15. 0x66,0x6d,0x7d,0x07,
  16. 0x7f,0x6f,0x77,0x7c,
  17. 0x39,0x5e,0x79,0x71};
  18. void delay (uint z)                                //延時函數,x的值為延時的時間(ms)
  19. {
  20.                 uint c, d;
  21.                 for(c = z; c>0;c--)
  22.                         for(d=113;d>0;d--);
  23. }
  24.        
  25. void init()
  26. {
  27.         TMOD=0x21;
  28.         TH0=(65536-45872)/256;
  29.         TL0=(65536-45872)%256;
  30.         TH1=0xfd;
  31.         TL1=0xfd;
  32.         TR1=1;
  33.         ET0=1;
  34.         SM0=0;
  35.         SM1=1;
  36.         REN=1;
  37.         EA=1;
  38.         ES=1;
  39. }

  40. void display(uchar val)
  41. {
  42.         uchar b,s,g;
  43.         b=val/100;
  44.         s=val%100/10;
  45.         g=val%10;
  46.         dula=1;
  47.         P0=tab[b];
  48.         dula=0;
  49.         P0=0xff;
  50.         wela=1;
  51.         P0=0x7e;
  52.         wela=0;
  53.         delay(5);
  54.         dula=1;
  55.         P0=tab[s];
  56.         dula=0;
  57.         P0=0xff;
  58.         wela=1;
  59.         P0=0x7d;
  60.         wela=0;
  61.         delay(5);
  62.         dula=1;
  63.         P0=tab[g];
  64.         dula=0;
  65.         P0=0xff;
  66.         wela=1;
  67.         P0=0x7b;
  68.         wela=0;
  69.         delay(5);
  70. }

  71. uchar get_ad()
  72. {
  73.         uchar adval;
  74.         wr=1;
  75.         _nop_();
  76.         wr=0;
  77.         _nop_();
  78.         wr=1;
  79.         P1=0xff;
  80.         rd=1;
  81.         _nop_();
  82.         rd=0;
  83.         _nop_();
  84.         adval=P1;
  85.         rd=1;
  86.         return adval;
  87. }

  88. void main(void)
  89. {
  90.         init();
  91.         wela=1;
  92.         P0=0x7f;
  93.         _nop_();
  94.         wela=0;
  95.         while(1)
  96.         {
  97.                 if(flag_uart==1)
  98.                 {
  99.                         flag_uart=0;
  100.                         ES=0;
  101.                         TI=1;
  102.                         switch(flag_on)
  103.                         {
  104.                                 case 0:
  105.                                 puts("Turn on ad!\n");
  106.                                 TR0=1;
  107.                                 break;
  108.                                 case 1:
  109.                                 printf("Turn off ad!\n");
  110.                                 TR0=0;
  111.                                 break;
  112.                                 case 2:
  113.                                 puts("ERROR!\n");
  114.                                 break;
  115.                                 default:break;
  116.                         }
  117.                         while(!TI);
  118.                         TI=0;
  119.                         ES=1;
  120.                 }
  121.                 if(flag_time==1)
  122.                 {
  123.                         flag_time=0;
  124.                         ad_val=get_ad;
  125.                         ad_vo=(float)ad*5.0/256.0;
  126.                         ES=0;
  127.                         TI=1;
  128.                         printf("The voltage is %f V\n",ad_vo);
  129.                         while(!TI);
  130.                         TI=0;
  131.                         ES=1;
  132.                 }
  133.                 display(ad_val);       
  134.         }
  135. }

  136. void timer_0() interrupt 1
  137. {
  138.         TH0 = (65536 -45872)/256;        //重裝初值
  139.         TL0 = (65536 - 45872)%256;
  140.     t0_num++;
  141.         if(t0_num==20)
  142.         {
  143.                 t0_num=0;
  144.                 flag_time=1;
  145.         }
  146. }

  147. void ser() interrupt 4
  148. {
  149.         RI=0;
  150.         a=SBUF;
  151.         flag_uart=1;
  152.         if(a==1)
  153.         flag_on=0;
  154.         else if(a==2)
  155.                 flag_on=1;
  156.                 else
  157.                 flag_on=2;
  158. }
復制代碼
代碼如上,為郭天祥的書《51單片機C語言教程》上6.6的代碼,結果如圖,無論如何調節ADC0804旁的電位器都一樣,求解

實驗結果_失敗

實驗結果_失敗
1.jpg

uartassist.zip

482.5 KB, 下載次數: 6

串口調試助手

回復

使用道具 舉報

ID:140371 發表于 2016-11-19 17:00 | 顯示全部樓層
我覺得這裡:ad_vo=(float)ad*5.0/256.0; 可能是 ad_vo=(float)ad_val*5.0/256.0;
回復

使用道具 舉報

ID:147531 發表于 2016-11-19 17:26 | 顯示全部樓層
a0931727149 發表于 2016-11-19 17:00
我覺得這裡:ad_vo=(float)ad*5.0/256.0; 可能是 ad_vo=(float)ad_val*5.0/256.0;

這里的確寫錯了,我改了,有數值返回了,但是調節電位器數值沒有變化。。。
回復

使用道具 舉報

ID:147531 發表于 2016-11-19 17:26 | 顯示全部樓層
2.jpg
回復

使用道具 舉報

ID:140371 發表于 2016-11-19 18:54 | 顯示全部樓層
uchar get_ad() 函數 中..或許 rd之前需要加適當的延時 ....(需等待ADC轉換完成...在讀取DATA )

評分

參與人數 1黑幣 +10 收起 理由
黑橙orangerx + 10 贊一個!

查看全部評分

回復

使用道具 舉報

ID:147531 發表于 2016-11-20 14:39 | 顯示全部樓層
a0931727149 發表于 2016-11-19 18:54
uchar get_ad() 函數 中..或許 rd之前需要加適當的延時 ....(需等待ADC轉換完成...在讀取DATA )
  1. uchar get_ad()
  2. {
  3.         uchar adval;
  4.         wr=1;
  5.         _nop_();
  6.         wr=0;
  7.         _nop_();
  8.         wr=1;
  9.         P1=0xff;
  10.         delay(10);
  11.         rd=1;
  12.         _nop_();
  13.         delay(10);
  14.         rd=0;
  15.         _nop_();
  16.         adval=P1;
  17.         delay(10);
  18.         rd=1;
  19.         delay(10);
  20.         return adval;
  21. }
復制代碼


加了延時之后,改變延時的值,數碼管顯示的值變化了,返回的電壓值也變化了,但調節電位器還是沒用。。。。樓下第一張是延時為5ms返回的值,第二張是延時為10ms時的值
回復

使用道具 舉報

ID:147531 發表于 2016-11-20 14:39 | 顯示全部樓層
3.jpg 4.jpg
回復

使用道具 舉報

ID:147531 發表于 2016-11-20 14:53 | 顯示全部樓層
找到問題的所在了,127行的代碼應為“ad_vo=get_ad();”

電子檔上這行代碼印錯了 5.jpg
回復

使用道具 舉報

ID:292934 發表于 2018-3-16 21:31 | 顯示全部樓層
問一下,他這個電位器是哪一個?
不知道為什么我的程序是對的,可是調節單片機上的所有電位器都不改變數值!
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 亚洲一区播放 | 日本在线网站 | 亚洲一区二区免费电影 | 婷婷99| 日日干日日射 | 中文字幕乱码一区二区三区 | 久久久国产精品 | 欧美日韩精品综合 | 国产精品99久久久久久宅男 | 91中文视频 | 91精品久久久久久久久 | 欧美黄色网络 | 在线看片国产精品 | 欧美在线亚洲 | 亚洲高清在线 | 99精品99| 亚洲区一区二 | 91精品国产色综合久久 | 久久国产精品99久久久大便 | 国产xxxx岁13xxxxhd | 狠狠操电影 | 久久亚洲春色中文字幕久久久 | 亚洲精品电影在线观看 | 久久久久久亚洲精品 | 欧美国产精品 | 亚洲成人一级 | 欧美日本一区 | av影音资源 | 操人网| 91精品国产高清久久久久久久久 | 亚洲一区二区三区视频 | 天天操天天天 | 一级国产精品一级国产精品片 | 天天综合久久 | 久久亚洲国产精品 | 色橹橹欧美在线观看视频高清 | 电影午夜精品一区二区三区 | 久久亚洲欧美日韩精品专区 | 影音先锋中文字幕在线观看 | 久久久久久久久中文字幕 | 久久久国产一区二区 |