51单片机:串行口控制寄存器SCON

51单片机:串行口控制寄存器SCON

串行口控制寄存器SCON的格式

D7D6D5D4D3D2D1D0
SCONSM0SM1SM2RENTB8RB8TIRI98H
位地址9FH9EH9DH9CH9BH9AH99H98H

SM0、SM1——串行口的4种工作方式选择位

SM0SM1方式功能
000同步移位寄存器方式
0118位异步收发,波特率由定时器控制
1029位异步收发,波特率为时钟频率的1/64或者1/32
1139位异步收发,波特率由定时器控制

其他位解释

SM2——多机控制通信
REN——允许串口接收位
TB8——发送的第9位数据
RB8——介绍的第9位数据
TI——发送中断位
RI——接收中断标志位
(一般设置初始化时,只对SM0、SM1设置,进行方式选择,REN通常置1)

  • 7
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要通过单片机串行口控制8个LED,可以使用移位寄存器来实现。具体的实现步骤如下: 1. 将8个LED连接到单片机的8个IO口上,例如P1口的0~7引脚。 2. 初始化串口和移位寄存器,设置串口的工作方式和波特率,设置移位寄存器的初始值。 3. 在主函数中不断监听串口是否接收到数据,如果接收到了数据,则根据数据的内容控制移位寄存器的输出,从而控制8个LED的亮灭。 以下是一个示例程序,该程序使用STC89C52单片机的串行口和P1口控制8个LED灯的亮灭: ```c #include <reg52.h> // 移位寄存器初始化函数 void InitShiftRegister() { P2 &= ~(1 << 0); // 清零数据线 P2 |= (1 << 1); // 置高锁存线 P2 &= ~(1 << 1); // 清零锁存线 } // 移位寄存器输出函数 void ShiftOut(unsigned char data) { unsigned char i; for (i = 0; i < 8; i++) { if (data & 0x80) { P2 |= (1 << 0); // 置高数据线 } else { P2 &= ~(1 << 0); // 清零数据线 } P2 |= (1 << 2); // 置高时钟线 P2 &= ~(1 << 2); // 清零时钟线 data <<= 1; } } // 串口初始化函数 void InitUART() { TMOD |= 0x20; // 设置定时器1为8位自动重装方式 TH1 = 0xfd; // 波特率9600,定时器初值 TL1 = TH1; SCON = 0x50; // 设置串口工作方式为8位数据位,无校验位,1位停止位 TR1 = 1; // 启动定时器1 } // 串口发送函数 void UARTSend(char c) { SBUF = c; while (!TI); // 等待发送完成 TI = 0; // 清除发送标志 } // 主函数 void main() { InitShiftRegister(); // 初始化移位寄存器 InitUART(); // 初始化串口 while (1) { if (RI) { // 判断是否接收到数据 char c = SBUF; // 读取数据 RI = 0; // 清除接收标志 if (c == '1') { ShiftOut(0x7f); // 点亮所有LED UARTSend('O'); // 发送确认消息 } else if (c == '0') { ShiftOut(0xff); // 灭掉所有LED UARTSend('O'); // 发送确认消息 } } } } ``` 上述程序中,首先通过 `InitShiftRegister` 函数初始化了移位寄存器,设置了数据线、锁存线和时钟线的初始状态;然后通过 `InitUART` 函数初始化了串口,设置了波特率和工作方式;在主函数中不断监听串口是否接收到数据,如果接收到了数据,则根据数据的内容控制移位寄存器的输出,从而控制8个LED的亮灭。例如,当接收到字符 '1' 时,点亮所有LED,并通过串口发送字符 'O' 表示确认。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值