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;
}
}
我来回答