51单片机通过串口实现数据的发送与接收程序

51单片机通过串口实现数据的发送与接收程序,第1张

串口收发,要有通信协议。也就是什么时候开始接收,接收到指令后,转发什么数据。这个要知道,才可以写。而且使用不同的51单片机,其内部寄存器配置是不同的。

一般来说,过程如下:

1,配置串口参数、波特率等,开启串口中断;

void Init_UART()

{

}

2,中断函数里写中断响应函数,根据接收的指令或者数据,执行相应的动作;

程序一般为:

void UART_ISR() interrupt x using y

{

;串口中断处理函数

}

x - 单片机的C51中断号

y - 指定使用的当前工作寄存器组号(0-3 PSW中的RS0,RS1组合)

3,主程序

int main(void)

{

Init_UART();

while(1)

{

;//数据发送函数

}

}

#include <pich>

#define uchar unsigned char

unsigned char RC_data;

int hz=0;

void usart_init()

{

TRISC6=0; //RC6:TX为发送口

TRISC7=1; //RC7:RX为接收口

TXSTA=0x24; //使能发送,高波特率

RCSTA=0x90; //串口使能,连续接收

SPBRG=0x19; //设置波特率9600

TRISD=0x00; //D口为输出

PORTD=0xF0; //D口清零

// 中断设置

PIR1=0X00;

PIE1=0X00;

RCIE=1;

TXIE=0;

INTCON=0X00;

PEIE=1;

GIE=1;

}

void interrupt uart()

{

if(1==RCIF)

{

RCIF=0;

RC_data=RCREG;

TXREG=RC_data;

}

if(1==TXIF)

{

TXIF=0;

PORTD=0X0F;

}

}

main()

{

usart_init(); //初始化

while(1);

}

单片机编程,本身不区分RS232与RS485。如果你需要RS485通讯,可以用MAX488芯片实现485通讯。再用个RS232-485转换器,接到计算机上,用个串口调试工具就能用了。

unsigned char rev_data = 0;

unsigned char send_data = 0;

void interrupt ISR()

{

if (RCIE & RCIF) //判断是否为串口接收中断

{

rev_data = RCREG; //将接收缓存器中数据读取出来

if(TRMT == 1)

{

TXREG = rev_data;

}

PORTD = ~PORTD;

}

}

单片机最好不要直接寄存器的值赋给寄存器,对串口接收中断必须将缓存器数据读取出来才能清空。另外main函数中while(1)当中要作长延时,不然数据看不到你从串口助手发送后,单片机返回的数据,你尝试一下,不能保证一定可以。

PIC久没摸了,寄存器也全忘了,可我只在这给你谈谈串口调试的经验,第一在刚开始时最好用低波特率调试,如1200甚至用600,这样先把时钟上的误差,硬件上的原因排出,在能收到后再加高波特率,在这加高过程中你有可能看到很多怪现象,多半就因这二个原因造成的,这是很重要的,很多一来就用高波特率给自己找了很多麻烦,再就是通讯机两边的各种位数一定要设的一致,这再试试去吧,

大部分PIC单片机都有RS-232模块,按照单片机手册使用相应的TX/RX引脚,再加上RS-232电平转换芯片,一般用MAX202E,就可完成单片机端的电路。与电脑通信时需要做一根数据线,可采用DB9插接件,注意DB9默认第2芯为接收,第3芯为发送,第5芯为GND,用这三个芯就可以,第2芯和第3芯的连接线要交叉,即电脑端DB9的2芯连接单片机端DB9的3芯。台式机电脑都带DB9串口,新型的笔记本没有DB9串口,可配一个USB转DB9串口。单片机端编好程序,电脑上再装一个叫串口精灵的软件,就可收发数据了。

1 是否使用了USB转串口?如果使用了的话,换一台有串口的台式机试试看,如果好了的话,可能是转接线有问题;

2 不打开VB应用程序,只使用串口助手接收数据,如果有通信协议的话,挑一条可以固定应答的报文循环发送接收,看发送/接收字节数的比率,正常的话会是一个定值,没问题的话,证明下位机应用层到上位机链路层是没有问题的;

3 现在只剩下VB软件了,VB我不会,但是我用VC写过类似的东西,我认为可能是你的软件接收不及时导致了串口接收缓冲区满或者报文接收出现偏差,最好设计一个完备的通信协议,每次通信都要有可靠的缓冲处理、校验处理、应答处理和错误重试处理,一次应答结束后及时清除接收缓冲,这样能保证可靠、持续的通信。

我只提供解决问题的思路,不替代你解决问题,希望能有所帮助,呵呵。

以上就是关于51单片机通过串口实现数据的发送与接收程序全部的内容,包括:51单片机通过串口实现数据的发送与接收程序、求PIC单片机与上位机的485通讯程序、PIC单片机问题 串口传输数据,感觉一直在中断程序里面门都进不了主循环。等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/10136468.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-05
下一篇 2023-05-05

发表评论

登录后才能评论

评论列表(0条)

保存