最近为一个串口的问题苦恼了很久.
要求是这样的:
1、上位机有开始和停止2个按键,按下开始 会给单片机发送0xAA,0x30,0x00,0x00,0x7E 按下停止会给单片机发送0xAA,0x31,0x00,0x00,0x7E
2、上位机有1个温度显示..温度值显示命令(假设水温为10℃):0xAA,0x10,0x00,0x0a,0x7E(0x10和0x7e中间2位数为温度值)
3、要求按下开始后,点亮1个led灯,上位机温度显示每分钟上升5度,按下停止后 led灯熄灭 上位机温度显示每分钟下降5度
我就是发送和接收可以单独写,写在一起就只能接收上位机命令而发不出去命令了。求大大们帮忙
补充内容 (2012-3-27 07:05):
代码和图片请看6和7楼..
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
#define uchar unsigned char
sbit LED = P1^0;
uchar light[5]={0xAA,0x20,0xff,0xff,0x7E};
uchar buf[5];
uchar UART_buff;
bit New_rec = 0, Send_ed = 1, Money = 0;
uchar i,k;
//----------------------------------------------
void main (void)
{
SCON = 0x50; //串口方式1, 8-n-1, 允许接收.
TMOD = 0x20; //T1方式2
TH1 = 0xFD; //9600bps@11.0592MHz
TL1 = 0xFD;
TR1 = 1;
ES = 1; //开中断.
EA = 1;
while(1)
{
if ((New_rec == 1) && (Send_ed == 1))
{
SBUF = light[i]; //发送.
i++;
if(i==5)
i=0;
New_rec = 0;
Send_ed = 0;
}
}
}
//----------------------------------------------
void ser_int (void) interrupt 4
{
if(RI == 1)
{ //如果收到.
RI = 0; //清除标志.
New_rec = 1;
buf[k] = SBUF; //接收.
k++;
if(k==5)
{
if(buf[1]==0x30)
LED=0;
else
LED=1;
k=0;
}
}
else
{ //如果送毕.
TI = 0; //清除标志.
Send_ed = 1;
}
}
代码如下..只能接收而不能发送
一周热门 更多>