打印

求助:单片机串口程序 在线

[复制链接]
1982|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
zhbwgh|  楼主 | 2007-5-31 09:58 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include "W78E354.H"
#define COUNT 4  //定义接收缓冲区的大小//
#define uchar unsigned char
/*数据采集部分管脚定义*/
/*串口输出部分管脚定义*/
sbit RE_DE=P1^4;//485控制引脚//
sbit Key_3=P0^4;
sbit Key_4=P0^5;
sbit ALARM=P0^3;
/*7219管脚定义*/
 

uchar idata displ[COUNT]={3,6,8};/*定义发送缓冲区*/
void COM_inter(void);/*声明函数变量*/
void Timer_ini(void);
main()

  RE_DE=0;/*485准备接收*/
  Timer_ini();
  while(1)
  { 
  }
}

void Timer_ini(void) //定时器的初始化//
{
  TMOD=0x20;/*定时器0工作于方式2,定时器1工作于方式2, 0010 0010*/   
  TH1=0xb7;//实现数据传输率9600//
  TL1=0xb7;
  SCON=0x50;//选择串口工作方式1,打开接收允许//
  PCON=0x00;//波特率倍增设置//
  TR1=1;//启动定时器T1//
  ES=1;EA=1;//允许串口中断//
}

//--------------------------------------------------------
//函数名称:COM_send();串口发送函数
//函数功能:把数据缓冲区的4位数据发送出去
//--------------------------------------------------------
void COM_send(void)
{
  uchar point;
  for(point=0;point<COUNT;point++) //连续发送4位数据,将数据发送到缓冲口//
  {  
     SBUF=displ[point];//发送数据//
       while(TI!=1);
     TI=0;
  }
  ES=1;
}

//--------------------------------------------------------
//函数名称:com_interrup()串口接收中断处理函数
//函数功能:接收包括起始位0xFE,地址位和终止位0xEF在内的10bit数据到数据缓冲区
//         ,地址不匹配,则接收到的是无效数字,不写到接收缓冲区
//--------------------------------------------------------
 void COM_inter(void) interrupt 4 using 1//串口处理函数//

  uchar a;/*串口标志*/
  RI=0;
  ES=0;
  RE_DE=0;
  a=SBUF;
  switch(a)
  {
    case 0x01:RI=0;ES=1;break;/*调用函数实现泵的控制*/
    case 0x02:RI=0;ES=1;break;/*调用函数实现阀的控制*/
    default:RE_DE=1;TI=0; ES=0;COM_send();break;/*使485处于发送状态,发送数据*/
  }
}
我的程序在keil里 仿真 是能发送数据的 但是在串口调试助手里,就不能发送数据到上位机 ,请各位看看 我在线等 谢谢

相关帖子

沙发
wjy1107| | 2007-5-31 16:15 | 只看该作者

检查硬件电路阿

使用特权

评论回复
板凳
lbx_00| | 2007-5-31 21:58 | 只看该作者

这样

执行发送的时候先失能串口中断,用示波器检验波特率是否正确

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

17

主题

51

帖子

0

粉丝