串口通信实验(51单片机)

串口通信实验原理

如图所示,P3.0 与 P3.1 同 MAX232 相连,P3.0 与 P3.1 为单片机串行通信引脚,TTL 电平,需要用 MAX232 转换为 RS-232 电平,8051 单片机内部有一个可编程的全双工串行接口,它在物理上分为两个独立的发送缓冲器和接收缓冲器SBUF,这两个缓冲器占用一个特殊功能寄存器地址 99H,究竟是发送缓冲器还是接收缓器工作是靠软件指令来决定的。对外有两条独立的收、发信号线 RXD(P3.0)和 TXD(P3.1),因此可以同时接收和发送数据,实现全双工传送,使用串行口时可以用定时器T1 作为波特率发生器。
系统时钟频率为 12MHz,使用这个频率可以将波特率近似设置为各种常用的整数值。实验中,我们设定好单片机的串行通信方式,使其工作于 4800 波特率。用计算机通过串口向单片机发送数据,单片机把收到的数据再转发回计算机。

实验步骤

1.    在 KEIL C 中完成项目的建立,文件的命名,文件的编辑,芯片的选择。
2.    按照以上的实验要求使用集成开发环境 KEIL C 编写控制程序。
3.    控制程序编译调试无误后,将实验板用 USB 线连接至计算机。
4.    用 KEIL C 生成可执行文件***.HEX。
5.    使用烧录程序下载 HEX 程序至实验板上的单片机中。

代码如下:

#include<reg52.h>

//主程序
void main(void)
{
    SCON=0x50;  //设置为工作方式1
    TMOD=0x20;  //设置计数器工作方式2
    PCON=0x80;  //波特率加倍
    TH1=0xF3;   //计数器初始值,波特率为4800
    TL1=0xF3;
    EA=1;       //打开总中断
    ES=1;       //打开串口中断
    TR1=1;      //TR1:启动Timer 1

   while(1)    //主循环不做任何动作
      {;
     }
}

void UART_SER(void)interrupt 4  //串行中断服务程序
{
    unsigned char Temp;  //定义临时变量

        if(RI)     //判断是接收中断产生
        {
            RI=0;     //标志位清零
            Temp=SBUF;   //读入缓冲区的值
            P1=Temp;     //把值输出到P1口,用于观察
            SBUF=Temp;   //把接收到的值再发回电脑端
            
     }
  if(TI)   //如果是发送标志位,清零
     TI=0;
}

 编译结果:

 

  • 1
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

QIF zr

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值