0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

单片机与PC机串口通信实验

CHANBAEK 来源:狂锤硬件 作者:顾 2023-06-28 11:39 次阅读

这是我们的实验要求:

效果1 单片机发送数据给PC机,PC机利用串口调试助手将数据显示出来。(40分)

效果2 PC机发送数据给单片机,单片机将收到的数据返回给PC机,并通过串口调试助手显示出来。(50分)

01电路图

这个图的最小系统的电路是有问题的。【就是单片机左边的电路,参考时要慎重】

图片

虚拟串口:

图片

然后是单片机的串口设置

图片

我们把虚拟串口com2给了MCU,那么我们把com3给PC端

02写代码前的一些设置

1.晶振设置为11.0592MHz

2.我们的波特率9600

SCON = 0X50;   //SM0=0,SM1 =1【方式一】,REN =1【允许串口接收】
  PCON = 0X80;   //控制波特率的倍速提高一倍:SMOD = 1
  TMOD |= 0X20;  //使用的是定时器T1
  TH1 = 0XFA;    //波特率为9600
  TL1 = 0XFA;
  TR1 = 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,我们要获取的就是HEX的值

图片

最后TH1=TL1 = 0XFA;

这里也要设置哦

image.png

这个是串口助手的设置

图片

03代码

代码很短小哦

#include < reg51.h >


#define u8 unsigned char
#define u16 unsigned int 


u8 data_r;


void init()
{
  SCON = 0X50;
  PCON = 0X80;
  TMOD |= 0X20;
  TH1 = 0XFA;
  TL1 = 0XFA;
  TR1 = 1;
  IE = 0X90;
}


void putchar(u8 n)
{
  SBUF = n;
  while(TI == 0);
  TI = 0;
}


void main(){

  init();
  putchar('H');
  putchar('E');
  putchar('L');
  putchar('L');
  putchar('O');
  while(1)
  {  
  }
}


void Usart () interrupt 4
{
  if(RI == 1)
  {
    data_r = SBUF ;
    putchar(data_r);
    RI = 0;
  }

}

04分块来讲

//串口、定时器T1的初始化
void init()
{
  SCON = 0X50;
  PCON = 0X80;
  TMOD |= 0X20;
  TH1 = 0XFA;
  TL1 = 0XFA;
  TR1 = 1;
  IE = 0X90;
}

这个初始化就不多说了,我们的“02”部分,要点已经讲完了。

void putchar(u8 n)
{
  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是接收寄存器SBUF

data_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');
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 电路图
    +关注

    关注

    10214

    文章

    10645

    浏览量

    510939
  • 单片机
    +关注

    关注

    6001

    文章

    43973

    浏览量

    620826
  • PC机
    +关注

    关注

    2

    文章

    198

    浏览量

    28079
  • 串口通信
    +关注

    关注

    32

    文章

    1577

    浏览量

    54861
收藏 人收藏

    评论

    相关推荐

    单片机和LabVIEW串口通信实现的程序

    单片机和LabVIEW串口通信实现的程序,
    发表于 06-10 19:41

    LabVIEW串口通信实例:PC与51单片机串口通信实

    相关课程推荐:《8周LabVIEW视觉项目编程实战特训营》LabVIEW串口通信实例:PC与51单片机
    发表于 06-28 20:04

    LabVIEW串口通信实例:PCPC串口通信实

    08、LabVIEW串口通信实例:PCPC串口
    发表于 06-28 20:07

    LabVIEW串口通信实例:PC与51单片机串口通信实

    LabVIEW串口通信实例:PC与51单片机串口通信实
    发表于 12-18 10:16

    请教串口通信实PC单片机通信的问题

    刚接触单片机,想实现avr单片机PC间的通信,用的是串口通信
    发表于 12-28 15:28

    单片机串口通信实验

    单片机串口通信实验一、实验目的二、实验内容三、实验步骤四、C代码如下五、
    发表于 11-10 07:45

    HMI智能串口屏与单片机串口通信实验分享

    STM32f4日记4之HMI智能串口屏与单片机串口通信实验(能通过按下串口屏图片来控制单片机上L
    发表于 11-25 06:21

    单片机串口和上位串口进行通信

    单片机串口通信中,接收多位数据到数组,发送多位数据的代码// 下面的代码用于:单片机串口何上位
    发表于 11-25 08:29

    单片机PC串口通信编程

    单片机PC串口通信编程实验目的利用PROTUES仿真软件、
    发表于 02-16 07:00

    RS232串口通信实验

    RS232串口通信实验 一. 实验目的利用单片机的TXD、RXD 口
    发表于 09-22 16:42 1.1w次阅读
    RS232<b class='flag-5'>串口</b><b class='flag-5'>通信实验</b>

    单片机PC机的串口通信应用 (RS232 协议)

    本文是关于计算机与单片机通信实验的应用。主要包括实验原理阐述、硬件电路图、源程序等 目录: 1、单片机串口
    发表于 08-20 10:38 908次下载
    <b class='flag-5'>单片机</b>和<b class='flag-5'>PC</b>机的<b class='flag-5'>串口</b><b class='flag-5'>通信</b>应用 (RS232 协议)

    PC机与单片机通信应用

    本文是关于计算机与单片机通信实验的应用。主要包括实验原理阐述、硬件电路图、源程序等 目录: 1、单片机串口
    发表于 08-20 10:33 7078次阅读
    <b class='flag-5'>PC</b>机与<b class='flag-5'>单片机</b><b class='flag-5'>通信</b>应用

    单片机应用系统设计技术——双单片机串口通信实验

    单片机串口通信实验一、实验目的二、实验内容三、实验步骤四、C代码如下五、
    发表于 11-05 13:50 15次下载
    <b class='flag-5'>单片机</b>应用系统设计技术——双<b class='flag-5'>单片机</b><b class='flag-5'>串口</b><b class='flag-5'>通信实验</b>

    单片机PC串口通信实验

    实验原理51 单片机的串行口是一个可编程的全双工的通信接口,具有 UART(通用异步收发器)的全部功能,能同时进行数据的发送和接收,也可以作为同步移位寄存器使用。51 单片机的串行口主
    发表于 11-11 13:36 14次下载
    <b class='flag-5'>单片机</b>与 <b class='flag-5'>PC</b> 机<b class='flag-5'>串口</b><b class='flag-5'>通信实验</b>

    串口通信实验

    串口通信实验串口通信实验代码图像串口通信实验晶振12MHz,波特率1200, 程序启动后
    发表于 01-14 10:12 6次下载
    <b class='flag-5'>串口</b><b class='flag-5'>通信实验</b>