代码:
#include "reg51.h"
#include "stdio.h" // for <<
sbit P1_0 = 0x90; // 利用地址的形式进行位操作 或者 = P1^0
unsigned char nSendByte;
void init(){
SM0 = SM1 = 0; // 设置串行口通信为工作方式0 默认
EA = 1; // 开启总中断
ES = 1; // 开启串行口中断
P1_0 = 1; // 允许移位寄存器发送数据
}
void serial_port() interrupt 4{
if(TI){
SBUF = nSendByte; // 第一个SBUF是为了实现流水灯的效果
delay();
nSendByte <<= 1; // 实现流水灯效果
if (nSendByte == 0) nSendByte = 1;
SBUF = nSendByte; // 第二个SBUF是为了让下面TI和RI置零,然后TI发送数据置1,再次进入中断
}
TI = 0;
RI = 0;
}
void main(){
init();
nSendByte = 1;
SBUF = nSendByte;
while(1);
}
仿真:

原理:
一、工作方式的选择:SM0 = SM1 = 0 (同步移位寄存器方式)

二、开启中断:总中断E

本文介绍了使用STM32的C语言编程实现串行口通信,涉及工作方式选择、中断设置(包括总中断和串行中断)、中断标志TI和RI的使用,以及如何在中断服务程序中发送和接收数据。
最低0.47元/天 解锁文章
1489

被折叠的 条评论
为什么被折叠?



