打印

发帖求助,一个485通讯程序

[复制链接]
1984|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
anazel|  楼主 | 2012-3-12 15:01 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
下面这段程序用串口助手调试不出来,不知道是电路的问题还是程序的问题,先请老师们帮我看看程序有没有什么错误吧

#include <reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit CTRL485= P1^0;
void UART_init()
{  
//初始化串行口和波特率发生器
TMOD=0x20;//设置定时器1为工作方式2
TH1=0xfa;
TL1=0xfa;//4800波特率
TR1=1;//启动定时器1
REN=1;//允许数据接收
SM0=0;
SM1=1;//设定串口工作方式为1
EA=1;
RI = 0;  //接收标志位清零
TI = 0;  //发送标志位清零
CTRL485 = 0;
}
void uart_putc(unsigned char c)
{
CTRL485=1;
TI=0;
SBUF = c;
while(!TI);//TI=1,表示一帧数据8bit已经发送结束!可以发送下一帧了!
TI=0;
}
char uart_inputc()
{
char c;
CTRL485=0;
RI=0;
c=SBUF;
while(!RI);
RI=0;
return c;
}
//延时nms子程序,
void delay_ms(unsigned int n)
{
     unsigned int x;
  unsigned char y;
     for(x=n;x>0;x--)
  for(y=110;y>0;y--);
}

main()
{
UART_init();
while(1)
{
  uart_putc('a');
//  uart_putc('\n');
  delay_ms(500);
}
}

相关帖子

沙发
jdsc35| | 2012-3-12 15:50 | 只看该作者
:L完全看不懂

使用特权

评论回复
板凳
chenczy| | 2012-3-12 17:49 | 只看该作者
这里都有好多通信的程序了,自己找一下,大概看了下,接收中断那里好像有问题。

使用特权

评论回复
地板
mengjicheng| | 2012-11-18 11:01 | 只看该作者
大家都还是用死循环的方式接收发送吗,这样的程序实际工作中能行得通吗,实时性太差都做不了别的事了

使用特权

评论回复
5
~Beyond~| | 2012-12-7 13:46 | 只看该作者
1怎么我看你的串口接收查询有点不对。应该先判断是否RI=1再赋值SBUF然后清除RI。你写颠倒了
2你开定时器中断允许了怎么没有中断函数。然后看看中断里接收函数是否执行完?看看定时器模式是不是自动重装 需不需要重新赋值

使用特权

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

本版积分规则

35

主题

448

帖子

2

粉丝