首页>>科技 >>内容

单片机与pc串口通信设计,单片机与PC机串口通信实验

发布时间:2023-07-15 12:48:19编辑:温柔的背包来源:

很多朋友对单片机与pc串口通信设计,单片机与PC机串口通信实验不是很了解,每日小编刚好整理了这方面的知识,今天就来带大家一探究竟。

单片机与pc串口通信设计,单片机与PC机串口通信实验

这是我们的实验要求:效果1:单片机向PC机发送数据,PC机使用串口调试助手显示数据。(40分)效果二:PC机向单片机发送数据,单片机将接收到的数据返回给PC机,并通过串口调试助手显示出来。(50分)01电路图这个图中最小系统的电路是有问题的。【是单片机左边的电路,参考的时候要小心】虚拟串口:那么单片机的串口设置。

我们把虚拟串口com2给了MCU,所以在从com3写代码到PC 02之前先做了一些设置。1.晶体振荡器设置为11.0592MHz2。我们的波特率为9600。

SCON=0x 50;//SM0=0,=1[模式1],任=1[允许串口接收]PCON=0x 80;//双倍控制波特率:SMOD=1 TMOD |=0x 20;//使用定时器T1 TH1=0XFA//波特率为9600 TL1=0XFATR1=1;IE=0X90//1001 0000 EA置1 ES置1 //EA中断总使能位ES串行中断使能位[注意]定时器T1是默认波特率发生器,切记禁用T1中断。接下来,我们如何计算TH1和TL1?

TL1=TH1=256-(2 smod * f_osc)/32 * 12 *波特率f _ OSC:计算晶振频率(单位:MHz)时,记得乘以10 ^ 6。例如,在本实验中,我们使用PCON=0X80将波特率提高了一倍;//控制波特率加倍:SMOD=1,波特率9600,晶振11.0592MHz,那么我们的TH1=256-(211.059210 6)/(32129600)=250。打开计算机的计算器:将十进制数转换成十六进制数,在DEC处输入250,我们要

最后TH1=TL1=0XFA应该也是在这里设定的。这是串口助手的设置。代码03很短。

#include #define u8无符号char#define u16无符号int u8 data _ r;void init(){ SCON=0x 50;PCON=0x 80;TMOD |=0x 20;TH1=0XFATL1=0XFATR1=1;IE=0x90} void putchar(u8n){ SBUF=n;while(TI==0);TI=0;{ void main(){ init();putchar(' H ');putchar(' E ');putchar(' L ');putchar(' L ');putchar(' O ');while(1) { }}void Usart()中断4 { if(RI==1){ data _ r=SBUF;putchar(data _ r);RI=0;是04泰伦祖斯普雷彻

//串口和定时器T1初始化void init(){ SCON=0x 50;PCON=0x 80;TMOD |=0x 20;TH1=0XFATL1=0XFATR1=1;IE=0X90}这个初始化我就不多说了,我们“02”部分的要点已经说完了。void putchar(u8n){ SBUF=n;while(TI==0);TI=0;}这部分没什么好讲的。它只是一个发送字符的功能。我们将要发送的字符放入我们的发送寄存器SBUF。TI是系统自动产生的中断信号。最后,记得手动复位T1。

TI=0;这是串行中断函数:void usart()interrupt 4 { if(ri==1){ data _ r=sbuf;putchar(data _ r);//我写这句话是为了在串口助手里看到你发的数据RI=0;}}这个SBUF就是接收寄存器SBUFdata _ r=SBUF将接收到的字符存储在我们的data_r中,然后通过这个代码,我们就可以在串口助手上看到我们发送给单片机的数据。

putchar(data _ r);//我写这句话是为了看你在串口助手里发的数据和最后我们的主函数void main(){ init();putchar(' H ');putchar(' E ');putchar(' L ');putchar(' L ');putchar(' O ');While(1) {}}这段代码的效果:串口助手显示:HELLO【可以自己试试】putchar(' H ');putchar(' E ');putchar(' L ');putchar(' L ');putchar(' O ');

以上知识分享希望能够帮助到大家!