串口通讯问题..
最近为一个串口的问题苦恼了很久.要求是这样的:
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楼.. 有没有大大帮下忙的? 求高人来啊。. 怎么就是没人帮忙解决下 说的这么乱,让别人怎么帮呢??
温度到底是怎么搞的呢??
上位机,下位机,到底是怎么个关系??
还有相关的程序呢??
问问题是有学问的,高手不会浪费时间做阅读理解{:sweat:}
最关键一点,就串口通讯
你自己有没有做足功课,有没有搜索一些资料,尽最大努力试图自己解决呢?
这就是在咱们论坛学习到的第一件事 上位机界面和通信命令都在附件里。..不会贴图 #include <REG52.H>
#define uchar unsigned char
sbit LED = P1^0;
uchar light={0xAA,0x20,0xff,0xff,0x7E};
uchar buf;
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++;
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 = SBUF;//接收.
k++;
if(k==5)
{
if(buf==0x30)
LED=0;
else
LED=1;
k=0;
}
}
else
{ //如果送毕.
TI = 0; //清除标志.
Send_ed = 1;
}
}
代码如下..只能接收而不能发送 大家帮帮忙吧 本帖最后由 xue2003265029 于 2012-3-31 13:32 编辑
bit New_rec = 0, Send_ed = 1, Money = 0;
uchar i,k;
这里i,k应初始化为零。
建议串口中断服务程序ISR改为
void serial_0(void)interrupt 4
{
if(_testbit_(RI))// 接收
{
……
}
if(_testbit_(TI)) // 发送
{
……
}
}
还有在串口中断RI 、TI标志,在串口中断服务程序ISR中会自动清零,因此程序中不必加RI=0,TI=0
页:
[1]