串行口通信:利用串行口中断配合74LS164移位寄存器,来完成流水灯

本文介绍了使用STM32的C语言编程实现串行口通信,涉及工作方式选择、中断设置(包括总中断和串行中断)、中断标志TI和RI的使用,以及如何在中断服务程序中发送和接收数据。
摘要由CSDN通过智能技术生成

代码:

#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 (同步移位寄存器方式)

二、开启中断:总中断EA和串行口中断ES

三、interrupt后面数字的选择

四、发送中断标志TI和接收中断标志RI

  1. TI——发送中断标志位

    方式0,串行发送的第8位数据结束时TI由硬件置“1”,在其他方式中,串行口发送停止位的开始时置TI为“1”。TI =1,表示一帧数据发送结束。TI的状态可供软件查询,也可申请中断。CPU响应中断后,在中断服务程序中向SBUF写入要发送的下一帧数据。TI必须由软件清“0”。
  2. RI—接收中断标志位

    方式0时,接收完第8位数据时,RI由硬件置“1”。在其他工作方式中,串行接收到停止位时,该位置“1”。RI = 1,表示一帧数据接收完毕,并申请中断,要求CPU从接收SBUF取走数据。该位的状态也可供软件查询。RI必须由软件清“0”。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值