欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

求教各路大佬,單片機串行通信+AD轉換 接收到的數據有誤咋辦

[復制鏈接]
跳轉到指定樓層
樓主
10黑幣
要求是做到  
當收到上位機發送來的1后,向上位機發送字符串Turn on ad同時間隔1s讀取一次AD的值,換算成實際電壓浮點數,并且從串口發送到上位機。
當收到上位機發送來的2后,向上位機發送字符串Turn off ad,然后停止發送電壓
當收到上位機發送來的任何數后,向上位機發送字符串error
現在是按下面的單片機代碼無論發送什么都為error

//////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////
曾對串行口函數 if  處進行過修改,
if(date==1)
  {
   flag_on=0;
  }
  if(date==2)
  {
   flag_on=1;
  }
if(date==3)
  {
   flag_on=2;
  }
現象是無論上位機收到任何數,都會輸出Turn on ad,并且讀取AD值,



#include "reg52.h"                        
#include"XPT2046.h"        
#include"stdio.h"
typedef unsigned int u16;         
typedef unsigned char u8;

sbit LSA=P2^2;
sbit LSB=P2^3;
sbit LSC=P2^4;
u8 date,flag,flag_on;
u16 time_num,flag_time,ad_val;
u8 disp[4];
u8 code smgduan[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
float ad_vo;


void delay(u16 i)     //延時函數
{
        while(i--);        
}


void init()          //串行口定時器0初始化
{
TMOD=0X21;
TH1=0XF3;
TL1=0XF3;
TH0=0XFC;        
TL0=0X18;
PCON=0X80;
TR1=1;

SCON=0X50;
EA=1;
ES=1;
ET0=1;                        
  
}


void datapros()  //數據處理函數
{

        disp[0]=smgduan[ad_val/1000];//?λ
        disp[1]=smgduan[ad_val%1000/100];//??λ
        disp[2]=smgduan[ad_val%1000%100/10];//??λ
        disp[3]=smgduan[ad_val%1000%100%10];               
}



void DigDisplay()       //數碼管顯示函數
{
        u8 i;
        for(i=0;i<4;i++)
        {
                switch(i)         
                {
                        case(0):
                                LSA=0;LSB=0;LSC=0; break;
                        case(1):
                                LSA=1;LSB=0;LSC=0; break;
                        case(2):
                                LSA=0;LSB=1;LSC=0; break;
                        case(3):
                                LSA=1;LSB=1;LSC=0; break;
                }
                P0=disp[3-i];
                delay(100);
                P0=0x00;
        }               
}





void main()
{
init();
while(1)
{
   if(flag==1)
   {
        ES=0;
        TI=1;
        switch(flag_on)
        {
          case(0):puts("Turn on ad\n");TR0=1;break;
          case(1):printf("Turn off ad\n");TR0=0;break;
          case(2):puts("Error\n");break;
        }
        while(!TI);
        TI=0;
        ES=1;
        flag=0;
   }
if(flag_time==1)
{
flag_time=0;
   ad_val= Read_AD_Data(0x94);  //Read_AD_Data(0x94)讀取函數 無問題
   ad_vo=(float)ad_val*5.0/4095.0;
   ES=0;
   TI=1;
   printf("The voltage is %fV\n",ad_vo);
   while(!TI);
   TI=0;
   ES=1;
}
  datapros();
  DigDisplay();
}
}




  void  Timer0()interrupt  1  
{

  TH0=0XFC;        
  TL0=0X18;
  time_num++;
  if(time_num==1000)//1s
  {
   time_num=0;
   flag_time=1;
  }
}

void ser()interrupt  4    //串行口中斷
{
  RI=0;
  date=SBUF;
                 
  flag=1;
  if(date==1)
  {
   flag_on=0;
  }
  else if(date==2)
  {
   flag_on=1;
  }
  else
  {
   flag_on=2;
  }
}

51hei圖片222222222.png (227.57 KB, 下載次數: 76)

51hei圖片222222222.png

AD轉換串口通信.rar

28.7 KB, 下載次數: 7

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

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表