我想通过串口向单片机发送一个字符,然后让单片机去判断,然后去执行其他的操作!
现在就是判断那里有问题!请大虾指导!
好像是接收的数据类型的问题!
#include <AT89X51.H>//单片机51头文件,存放着单片机的寄存器
unsigned char dat; //用于存储单片机接收发送缓冲寄存器SBUF里面的内容
sbit d1=P1^0;
sbit d2=P1^1;
sbit d3=P1^2;
sbit d4=P1^3;
void Init_Com(void)//功能:串口初始化,波特率9600,方式1
{
TMOD = 0x20;
PCON = 0x00;
SCON = 0x50;
TH1 = 0xFd;
TL1 = 0xFd;
TR1 = 1;
}
void main()//主程序功能:实现接收数据并把接收到的数据原样发送回去///////
{
Init_Com();//串口初始化
// P1=0xf0;
while(1)
{
if ( RI ) //扫描判断是否接收到数据,
{
dat = SBUF; //接收数据SBUF赋与dat
RI=0; //RI清零。 ??、、
if(dat==00000001)
{d1=1;
d2=1;
d3=1;
}
}
if(TI) //如果是发送标志位,清零
TI=0;
}
}
我是想先判断接收到的数据再做操作,p1.0 p1.1 p1.2 p1.3 来驱动L298,比如:pwm调速,正反转,步进电机的控制等!
我是想先判断接收到的数据再做操作,p1.0 p1.1 p1.2 p1.3 来驱动L298,比如:pwm调速,正反转,步进电机的控制等!
追答你先进行串口的检测,串口传输没问题了再删掉那句话就好了,这就是一个测试串口的语句,不会在最终程序中出现。
追问你好,现在串口没问题就是判断那块过不去,我现在把程序改成这样还是不行!P1口的4个二极管根本就不亮!
if(dat==0x01)
{d1=0;
d2=0;
d3=0;
}
else
d1=1;
d2=1;
d3=1;
首先,判断你的灯是不是正常的,然后,你所说的串口没问题指的是什么?你是怎么认为是在判断这里过不去的,如果是判断过不去就是说明,你的dat不是0x01,那么也就是说你串口或许没工作或许工作不正常,导致数据有误。检查串口配置,和波特率等问题,还有就是其它网友所说的,你发的数据对不对。
但是我好像在网上看到串口传过来的是1的ascll码!搞不懂!
追答我只是猜测,毕竟我不确定你怎么传的,只是提供一个思路, 你可以改下判断条件测试下吧.. if(dat=='1')或者 if(dat==0x31)
谢谢你!我是用串口助手试的我改成你说的那样还是不行的!