51单片机和计算机之间实现串口通信的电路图

51单片机和计算机之间实现串口通信的电路图,第1张

串口通讯参考程序如下:

来源:深入浅出AVR单片机

#include<reg51h>

unsigned char UART_RX; //定义串口接收数据变量

unsigned char RX_flag; //定义穿行接收标记

/

函数名:UART串口初始化函数

调  用:UART_init();

参  数:无

返回值:无

结  果:启动UART串口接收中断,允许串口接收,启动T/C1产生波特率(占用)

备  注:振荡晶体为12MHz,PC串口端设置 [ 4800,8,无,1,无 ]

//

void UART_init (void){

EA = 1; //允许总中断(如不使用中断,可用//屏蔽)

ES = 1; //允许UART串口的中断

TMOD = 0x20; //定时器T/C1工作方式2

SCON = 0x50; //串口工作方式1,允许串口接收(SCON = 0x40 时禁止串口接收)

TH1 = 0xF3; //定时器初值高8位设置

TL1 = 0xF3; //定时器初值低8位设置

PCON = 0x80; //波特率倍频(屏蔽本句波特率为2400)

TR1 = 1; //定时器启动

}

//

/

函数名:UART串口接收中断处理函数

调  用:[SBUF收到数据后中断处理]

参  数:无

返回值:无

结  果:UART串口接收到数据时产生中断,用户对数据进行处理(并发送回去)

备  注:过长的处理程序会影响后面数据的接收

//

void UART_R (void) interrupt 4  using 1{ //切换寄存器组到1

RI = 0;   //令接收中断标志位为0(软件清零)

UART_RX = SBUF; //将接收到的数据送入变量 UART_data

RX_flag=1;  //标记接收

//用户函数内容(用户可使用UART_data做数据处理)

//SBUF = UART_data; //将接收的数据发送回去(删除//即生效)

//while(TI == 0); //检查发送中断标志位

//TI = 0;  //令发送中断标志位为0(软件清零)

}

//

/

函数名:UART串口发送函数

调  用:UART_T ();

参  数:需要UART串口发送的数据(8位/1字节)

返回值:无

结  果:将参数中的数据发送给UART串口,确认发送完成后退出,采用非中断方式

备  注:

//

void UART_T (unsigned char UART_data){ //定义串口发送数据变量

ES=0;    //禁止穿行中断

SBUF = UART_data; //将接收的数据发送回去

while(TI == 0);  //检查发送中断标志位

TI = 0;   //令发送中断标志位为0(软件清零)

ES=1;   //打开穿行中断

}

/

函数名:UART串口发送字符串函数

调  用:UART_S ();

参  数:需要UART串口发送的数据(8位/1字节)

返回值:无

结  果:将参数中的数据发送给UART串口,确认发送完成后退出,采用非中断方式

备  注:

//

void UART_S(unsigned char str)

{

while(1)

{

if(str=='\0') break;

UART_T(str++);

}

}

/

函数名:主函数

调  用:main();

参  数:

返回值:无

结  果:

备  注:

//

void main()

{

unsigned char Buf_data[]={"      welcome to MCU world     \n\r"};

UART_init();

UART_S(Buf_data);

while(1){

if(RX_flag==1)

{

UART_T(UART_RX);

RX_flag=0;

}

}

}

祝愿楼主马到功成

试试下列程序,这时用中断发送的。

#include<reg51h>

#define uchar unsigned char

uchar txt[] = "hello";

uchar i = 0;

void main(void)

{

PCON = 0X00;

SCON = 0X50;

TMOD = 0X20;

TH1 = 0XFD;

TL1 = 0XFD;

TR1 = 1;

EA = 1;

ES = 1;

TI = 1;

while(1) {

if(i == 6) {

i = 0;

TI = 1;

}

}

}

void uart() interrupt 4

{

if(RI == 1) RI = 0;

if(TI == 1) {SBUF = txt[i++]; TI = 0;}

}

本程序,可以用串口助手接收。收到的是:hellohellohellohellohello

串口收发,要有通信协议。也就是什么时候开始接收,接收到指令后,转发什么数据。这个要知道,才可以写。而且使用不同的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)

{

;//数据发送函数

}

}

以上就是关于51单片机和计算机之间实现串口通信的电路图全部的内容,包括:51单片机和计算机之间实现串口通信的电路图、简单51单片机串口程序、51单片机通过串口实现数据的发送与接收程序等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

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

原文地址:https://54852.com/zz/10116557.html

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

发表评论

登录后才能评论

评论列表(0条)

    保存