佚名通过本文主要向大家介绍了单片机大虾,单片机问题,单片机答辩问题,单片机答辩常见问题,单片机毕业答辩问题等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
问题:单片机问题,求大虾来看看
描述:
这是我的串口中断函数,用来接收数据:
void uart1_receive() interrupt 4 //中断接受函数
{
uchar d1,RXFHK;//用于提取缓冲器的字符 m之前定义的是全局变量
if(RI==1)
{
d1=SBUF; //提取字符
if((d1==0x4a)) { G1=1; } //收到J
else if((d1==0x4b)) { G1=0;} //收到K if((d1==0x4b))
RI=0;// 接受中断标志位为0
if(flag1==0) //判断是否接收到起始字符
{ if(RXFHK) //如果接收到起始字符,继续接收后面的
{ uart1_buff[m]=d1&0x0f; // 字符存入数组
if((m>1)&&(uart1_buff[m-1]==0x0d)&&(uart1_buff[m]==0x0a)) //判断是否接收完一帧数据
{
flag1=1; // 如果接收完,置位flag1
RXFHK=0;//L1(uart1_buff); //清零开始标志位RXFHK
// if(G1) { f11++;G1=0; }
}
m++;
}
if(!RXFHK&&((d1==0x3a))) //如第一个是开始标志if(!RXFHK&&((d1==0x4b)||(d1==0x4a)))
{
RXFHK=1; //表示接收到开始标志
m=0; //计数清零
}
}
}
SBUF=d1; //SBUF=d1;
while(!(TI)); // while(!TI);
TI=0;
}
这是主函数里,当传感器传来数据后,显示在显示器上:
while(flag1)
{
flag1=0;
L1(uart1_buff);mode1();
}
解决方案1:
描述:
单片机c传感器
我在用STC12C5A16S2单片机做一个肺活量测试仪器,但是当按下压力传感器的时候,单片机外接的显示器不显示数据或者只显示一个数据,都不正确。正确的应该是在按下的那一刻不停的显示数据,并且数据逐渐增大,直到放开手,数据保留最后的值,不变。这是我的串口中断函数,用来接收数据:
void uart1_receive() interrupt 4 //中断接受函数
{
uchar d1,RXFHK;//用于提取缓冲器的字符 m之前定义的是全局变量
if(RI==1)
{
d1=SBUF; //提取字符
if((d1==0x4a)) { G1=1; } //收到J
else if((d1==0x4b)) { G1=0;} //收到K if((d1==0x4b))
RI=0;// 接受中断标志位为0
if(flag1==0) //判断是否接收到起始字符
{ if(RXFHK) //如果接收到起始字符,继续接收后面的
{ uart1_buff[m]=d1&0x0f; // 字符存入数组
if((m>1)&&(uart1_buff[m-1]==0x0d)&&(uart1_buff[m]==0x0a)) //判断是否接收完一帧数据
{
flag1=1; // 如果接收完,置位flag1
RXFHK=0;//L1(uart1_buff); //清零开始标志位RXFHK
// if(G1) { f11++;G1=0; }
}
m++;
}
if(!RXFHK&&((d1==0x3a))) //如第一个是开始标志if(!RXFHK&&((d1==0x4b)||(d1==0x4a)))
{
RXFHK=1; //表示接收到开始标志
m=0; //计数清零
}
}
}
SBUF=d1; //SBUF=d1;
while(!(TI)); // while(!TI);
TI=0;
}
这是主函数里,当传感器传来数据后,显示在显示器上:
while(flag1)
{
flag1=0;
L1(uart1_buff);mode1();
}
解决方案1:
你把数据通过串口读出,看看具体数据是什么样的,是不是满足你的那个设想。
再看是不是显示驱动的问题
你的RXFHK是局部变量而且没有初始化,用来判断肯定是一塌糊涂了