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

[复制链接]
2948|2
 楼主| zhbwgh 发表于 2007-5-31 09:58 | 显示全部楼层 |阅读模式
#include&nbsp;&quot;W78E354.H&quot;<br />#define&nbsp;COUNT&nbsp;4&nbsp;&nbsp;//定义接收缓冲区的大小//<br />#define&nbsp;uchar&nbsp;unsigned&nbsp;char<br />/*数据采集部分管脚定义*/<br />/*串口输出部分管脚定义*/<br />sbit&nbsp;RE_DE=P1^4;//485控制引脚//<br />sbit&nbsp;Key_3=P0^4;<br />sbit&nbsp;Key_4=P0^5;<br />sbit&nbsp;ALARM=P0^3;<br />/*7219管脚定义*/<br />&nbsp;<br /><br />uchar&nbsp;idata&nbsp;displ[COUNT]={3,6,8};/*定义发送缓冲区*/<br />void&nbsp;COM_inter(void);/*声明函数变量*/<br />void&nbsp;Timer_ini(void);<br />main()<br />{&nbsp;<br />&nbsp;&nbsp;RE_DE=0;/*485准备接收*/<br />&nbsp;&nbsp;Timer_ini();<br />&nbsp;&nbsp;while(1)<br />&nbsp;&nbsp;{&nbsp;<br />&nbsp;&nbsp;}<br />}<br /><br />void&nbsp;Timer_ini(void)&nbsp;//定时器的初始化//<br />{<br />&nbsp;&nbsp;TMOD=0x20;/*定时器0工作于方式2,定时器1工作于方式2,&nbsp;0010&nbsp;0010*/&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;TH1=0xb7;//实现数据传输率9600//<br />&nbsp;&nbsp;TL1=0xb7;<br />&nbsp;&nbsp;SCON=0x50;//选择串口工作方式1,打开接收允许//<br />&nbsp;&nbsp;PCON=0x00;//波特率倍增设置//<br />&nbsp;&nbsp;TR1=1;//启动定时器T1//<br />&nbsp;&nbsp;ES=1;EA=1;//允许串口中断//<br />}<br /><br />//--------------------------------------------------------<br />//函数名称:COM_send();串口发送函数<br />//函数功能:把数据缓冲区的4位数据发送出去<br />//--------------------------------------------------------<br />void&nbsp;COM_send(void)<br />{<br />&nbsp;&nbsp;uchar&nbsp;point;<br />&nbsp;&nbsp;for(point=0;point&ltCOUNT;point++)&nbsp;//连续发送4位数据,将数据发送到缓冲口//<br />&nbsp;&nbsp;{&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SBUF=displ[point];//发送数据//<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while(TI!=1);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TI=0;<br />&nbsp;&nbsp;}<br />&nbsp;&nbsp;ES=1;<br />}<br /><br />//--------------------------------------------------------<br />//函数名称:com_interrup()串口接收中断处理函数<br />//函数功能:接收包括起始位0xFE,地址位和终止位0xEF在内的10bit数据到数据缓冲区<br />//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;,地址不匹配,则接收到的是无效数字,不写到接收缓冲区<br />//--------------------------------------------------------<br />&nbsp;void&nbsp;COM_inter(void)&nbsp;interrupt&nbsp;4&nbsp;using&nbsp;1//串口处理函数//<br />{&nbsp;<br />&nbsp;&nbsp;uchar&nbsp;a;/*串口标志*/<br />&nbsp;&nbsp;RI=0;<br />&nbsp;&nbsp;ES=0;<br />&nbsp;&nbsp;RE_DE=0;<br />&nbsp;&nbsp;a=SBUF;<br />&nbsp;&nbsp;switch(a)<br />&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;0x01:RI=0;ES=1;break;/*调用函数实现泵的控制*/<br />&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;0x02:RI=0;ES=1;break;/*调用函数实现阀的控制*/<br />&nbsp;&nbsp;&nbsp;&nbsp;default:RE_DE=1;TI=0;&nbsp;ES=0;COM_send();break;/*使485处于发送状态,发送数据*/<br />&nbsp;&nbsp;}<br />}<br />我的程序在keil里&nbsp;仿真&nbsp;是能发送数据的&nbsp;但是在串口调试助手里,就不能发送数据到上位机&nbsp;,请各位看看&nbsp;我在线等&nbsp;谢谢
wjy1107 发表于 2007-5-31 16:15 | 显示全部楼层

检查硬件电路阿

  
lbx_00 发表于 2007-5-31 21:58 | 显示全部楼层

这样

执行发送的时候先失能串口中断,用示波器检验波特率是否正确
您需要登录后才可以回帖 登录 | 注册

本版积分规则

17

主题

51

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部