[ZLG-MCU] 串口调试

[复制链接]
 楼主| w2340 发表于 2007-11-28 15:27 | 显示全部楼层 |阅读模式
各位大虾们帮我看看下面程序哪里出问题了<br />//-----------------------函数声明,变量定义--------------------------------------------------------<br />#include&nbsp;&ltreg51.h&gt<br />sbit&nbsp;RE_DE=P1^0;<br />//sbit&nbsp;testpoint=P1^1;<br />unsigned&nbsp;char&nbsp;buffer[]={0x05,0x15,0x25,0x35,0x45};&nbsp;&nbsp;&nbsp;&nbsp;//定义接收缓冲区<br />unsigned&nbsp;char&nbsp;RECEIVR_buffer;<br /><br />void&nbsp;UART_init();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//串口初始化函数<br />void&nbsp;COM_send(void);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//串口接收函数<br />void&nbsp;VariableDelay(unsigned&nbsp;char&nbsp;delay);<br /><br /><br />//--------------------------------------------------------------------------------------------------<br />//&nbsp;函数名称:&nbsp;UART_init()串口初始化函数<br />//&nbsp;函数功能:&nbsp;在系统时钟为11.059MHZ时,设定串口波特率为9600bit/s<br />//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;串口接收中断允许,发送中断禁止<br />//--------------------------------------------------------------------------------------------------<br />void&nbsp;UART_init()<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//初始化串行口和波特率发生器<br />&nbsp;&nbsp;&nbsp;&nbsp;SCON&nbsp;=0x50;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//选择串口工作方式,打开接收允许<br />&nbsp;&nbsp;&nbsp;&nbsp;TMOD|=0x20;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//定时器1工作在方式2,定时器0工作在方式1<br />&nbsp;&nbsp;&nbsp;&nbsp;PCON=0;<br />&nbsp;&nbsp;&nbsp;&nbsp;TH1&nbsp;=0xfd;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//实现波特率9600(系统时钟11.0592MHZ)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;REN=1;<br />&nbsp;&nbsp;&nbsp;&nbsp;TR1&nbsp;=1;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//启动定时器T1<br />&nbsp;&nbsp;&nbsp;&nbsp;ET1&nbsp;=0;<br />&nbsp;&nbsp;&nbsp;&nbsp;ES=1;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//允许串行口中断<br />&nbsp;&nbsp;&nbsp;&nbsp;EA&nbsp;=1;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//单片机中断允许<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />//--------------------------------------------------------------------------------------------------<br />//&nbsp;函数名称:&nbsp;com_interrup()串口接收中断处理函数<br />//&nbsp;函数功能:&nbsp;接收包括起始5位数据到数据缓冲区<br />//--------------------------------------------------------------------------------------------------<br />void&nbsp;recive(void)&nbsp;interrupt&nbsp;4&nbsp;using&nbsp;3<br />{<br /><br />&nbsp;&nbsp;if(RI)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//处理接收中断<br />&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RI=0;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//清除中断标志位<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RECEIVR_buffer=SBUF;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//接收串口数据<br />&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><br />}<br />//--------------------------------------------------------------------------------------------------<br />//&nbsp;函数名称:&nbsp;COM_send()串口发送函数<br />//&nbsp;函数功能:&nbsp;把数据缓冲区的5位数据发送出去<br />//--------------------------------------------------------------------------------------------------<br />void&nbsp;COM_send(void)<br />{<br />&nbsp;int&nbsp;point;<br />&nbsp;EA=0;<br /><br />&nbsp;RE_DE=1;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;for(point=0;point&lt5;point++)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//连续发送5位数据<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//把缓存区的数据都发送到串口<br />&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;SBUF=buffer[point];<br />&nbsp;&nbsp;&nbsp;while(TI==0);<br />&nbsp;&nbsp;&nbsp;TI=0;<br />&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;RE_DE=0;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;point=0;<br />&nbsp;&nbsp;&nbsp;&nbsp;EA=1;<br />}<br /><br />//--------------------------------------------------------------------------------------------------<br />//&nbsp;函数名称:&nbsp;主函数<br />//&nbsp;函数功能:&nbsp;调度个子函数,完成通信过程<br />//--------------------------------------------------------------------------------------------------<br />&nbsp;void&nbsp;main(void)<br />&nbsp;{<br />&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;UART_init();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RE_DE&nbsp;=&nbsp;0;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;testpoint=0;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;VariableDelay(1000);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while(1)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(RECEIVR_buffer==0x88)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RECEIVR_buffer=0;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;&nbsp;&nbsp;testpoint=1;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;COM_send();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//调用发送程序通知主机<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;<br />&nbsp;}<br />&nbsp;void&nbsp;VariableDelay(unsigned&nbsp;char&nbsp;delay)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;unsigned&nbsp;char&nbsp;i;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(;delay&gt0;delay--)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(i=0;i&lt50;i++);<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />就是接收不到数据,单独发送是可以的
逐风 发表于 2007-11-28 22:03 | 显示全部楼层

你发送时候会不会产生中断啊

  
您需要登录后才可以回帖 登录 | 注册

本版积分规则

17

主题

49

帖子

0

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