mey 发表于 2012-3-25 18:05:14

串口通讯问题..

最近为一个串口的问题苦恼了很久.
要求是这样的:
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楼..

mey 发表于 2012-3-25 19:03:08

有没有大大帮下忙的?

mey 发表于 2012-3-25 21:15:31

求高人来啊。.

mey 发表于 2012-3-26 12:54:01

怎么就是没人帮忙解决下

idodi 发表于 2012-3-26 13:13:01

说的这么乱,让别人怎么帮呢??
温度到底是怎么搞的呢??
上位机,下位机,到底是怎么个关系??
还有相关的程序呢??
问问题是有学问的,高手不会浪费时间做阅读理解{:sweat:}

最关键一点,就串口通讯
你自己有没有做足功课,有没有搜索一些资料,尽最大努力试图自己解决呢?
这就是在咱们论坛学习到的第一件事

mey 发表于 2012-3-27 06:59:16

上位机界面和通信命令都在附件里。..不会贴图

mey 发表于 2012-3-27 07:05:13

#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;
        }
}

代码如下..只能接收而不能发送

mey 发表于 2012-3-27 22:43:04

大家帮帮忙吧

xue2003265029 发表于 2012-3-31 08:57:46

本帖最后由 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]
查看完整版本: 串口通讯问题..