8051单片机的串口通信

#今天上课突然结合前面的中端知识点思路逐渐清晰#

在这里得用到三个工作方式寄存器,分别是

  • 串口通信的寄存器:SCOD
  • 中端工作方式寄存器:TMOD(定时器和计数器的控制由两个特殊功能寄存器控制 ,TMOD用于选择其工作方式,TCON用于控制其启动和中断申请)
  • 配置波特率得在PCON寄存器中设置SMOD(0或者1)

 

 实例代码如下:

#include <reg52.h>  
  
// 定义LED连接到P1端口的哪两个引脚  
sbit led1 = P1^0;  
sbit led2 = P1^1;  
  
// USART配置函数  
void UsartConfiguration()  
{  
    SCON = 0X50;      // 设置为工作方式1,8位数据,可变波特率  
    TMOD = 0X20;      // 定时器1设置为工作方式2,自动重装载模式  
    PCON = 0X00;      // SMOD=0,波特率不加倍  
    TH1 = 0XFD;       // 定时器初始值设置,用于产生9600波特率  
    TL1 = 0XFD;       // 与TH1配合设置波特率  
    ES  = 1;          // 打开接收中断  
    EA  = 1;          // 打开全局中断  
    TR1 = 1;          // 启动定时器1  
}  
  
// 主函数  
void main()  
{  
    UsartConfiguration(); // 调用USART配置函数  
    while(1)             // 主循环,等待中断发生  
    {  
        // 主循环可以保持为空,所有操作在中断服务程序中处理  
    }  
}  
  
// USART接收中断服务程序  
void uart() interrupt 4  
{  
    unsigned char receivedData;  	       //定义一个无符号字符型
      
    receivedData = SBUF;      // 从USART缓冲区取出接收到的数据  
      
                             // 根据接收到的数据控制LED1和LED2的状态  
    if (receivedData == '0')  
    {  
        led1 = 0; // 点亮LED1  
        led2 = 0; // 同时点亮LED2,表示接收到'0'  
    }  
    else if (receivedData == '1')  
    {  
        led1 = 1; // 熄灭LED1  
        led2 = 0; // 点亮LED2,表示接收到'1'  
    }  
    else if (receivedData == '2')  
    {  
        led1 = 0; // 点亮LED1  
        led2 = 1; // 熄灭LED2,表示接收到'2'  
    }  
    else if (receivedData == '3')  
    {  
        led1 = 1; // 熄灭LED1  
        led2 = 1; // 同时熄灭LED2,表示接收到'3'  
    }  
  
    RI = 0;       // 清除接收中断标志位  
    SBUF = receivedData; // 将接收到的数据放回发送缓冲区,实现数据回显  
    while(!TI);   // 等待数据发送完成  
    TI = 0;       // 清除发送中断标志位  
}

现在可以在烧录软件中可以发送0,1,2,3检测前面两个LED灯的亮灭情况

好了

  • 9
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值