51单片机不连接P3.0、P3.1引脚,不用SBUF,而是将收发接到其他引脚,用定时器和外部中断,写个一串口收发程序,具备波特率设置功能、具备发送16进制数据功能、printf可调用
时间: 2024-09-15 07:09:12 浏览: 73
51单片机如8051系列,在不直接利用P3.0(TXD)和P3.1(RXD)作为串口引脚的情况下,可以采用其他方式实现串行通信。一种常见的方法是利用定时器T1配合外部中断(INT0或INT1),同时配置波特率发生器。以下是编写这样一个串口程序的大致步骤:
1. **硬件配置**:
- 连接串口信号到非标准引脚(例如P3.2和P3.3分别用于TX和RX)
- 设置T1工作于模式2,通过外部中断控制串口传输
2. **软件初始化**:
- 配置定时器T1:清零计数器,设定溢出标志位,设置工作模式,并开启定时器。
- 配置中断:设置中断触发条件,例如当T1溢出时触发中断。
3. **波特率计算**:
- 根据晶振频率(如12MHz)和所需的波特率(用户输入或预设值)计算定时器初值。
4. **串口发送函数**:
- 使用中断服务程序,在中断处理中检查是否有数据待发送,并通过指定引脚(如P3.2)发送16进制数据。
- 调用printf-like函数,可能需要自定义这个函数,以便接收用户输入的16进制字符串并转换为字节发送出去。
5. **串口接收函数**:
- 在中断服务程序中,读取接收到的数据存入缓冲区,然后处理这个缓冲区以解析16进制字符。
6. **中断处理函数**:
- 当接收到中断请求时,保存当前状态,读取新数据,更新接收缓冲区,并可能清除中断标志以允许下次接收。
7. **波特率设置**:
- 提供一个函数让用户改变波特率,只需重新计算定时器初值并更新即可。
8. **主循环**:
- 检查用户是否需要调整波特率或发送数据,执行相应的操作。
```c
阅读全文