在使用STC51单片机的串口时,有时候会进入一种很奇怪的情况,就是程序进入了一下子跑死了,初始化代码如下:
void UsartConfiguration(unsigned int bps)
{
SCON = 0X50; //设置为工作方式1 10位异步收发器
TL2 = RCAP2L = bps; //set auto reload value
TH2 = RCAP2H = bps>>8;
T2CON = 0x34;//0011 0100 timer2 sart run
ES = 1;//打开串口中断,注意打开开一定要写串口中断函数
EA = 1;//打开总中断
}
经过程序模拟DEBUG可以发现程序跑死在发送串口数据,等待TI标志位上了
char putchar(char ch)
{
/* Place your implementation of fputc here */
SBUF=(unsigned char)ch; //将接收到的数据放入到发送寄存器
while(!TI); //等待发送数据完成
TI=0; //清除发送完成标志位
return ch;
}
解决方法:
1、关闭串口中断,即
ES = 0;
2、添加串口服务函数,之前是打开中断后却忘了添加中断服务函数
void UARTInt() interrupt 4
{
unsigned char date;
if(RI == 1)
{
RI = 0;
date = SBUF; }}
关键字:keil C51 串口 程序跑死
引用地址:
keil C51使用串口时程序跑死的问题
推荐阅读最新更新时间:2024-03-16 16:07
Keil MDK STM32系列(五) 使用STM32CubeMX创建项目基础结构
概述 从前面介绍的STM32开发可以感受到, 虽然SPL对于纯寄存器方式开发已经是很大的进步, SPL将大部分寄存器配置做了很好的封装, 配置项简单易读, 但是外设与输出脚的映射关系, 配置项的数量, 配置之间的关联都使得配置难度并未降低, 在项目启动阶段依然要通过不断查阅MCU的用户手册去修改方案, 各种情况下的代码例程直接借鉴容易出错, 需要反复尝试, 往往在调通外设这一步就已经耗费了开发人员的大量时间. 所以ST将开发库的重心迁移到了HAL上, 配合HAL的就是STM32CubeMX这个图形化配置工具. 通过图形化界面, 通过预设的逻辑辅助生成代码模板. 这样可以将底层寄存器和外设的复杂定义和逻辑包装在工具界面之下, 避
[单片机]
Ramtron提供高速串口F-RAM 器件样片
世界领先的低功耗铁电存储器(F-RAM)和集成半导体产品开发商及供应商Ramtron International Corporation (简称Ramtron)宣布提供全新4-至 64Kb串口非易失性铁电 RAM (F-RAM)存储器的预认证样片,新产品采用Ramtron全新美国晶圆供应商的铁电存储器工艺制造,具有1万次 (1e12)的读/写循环、低功耗和无延迟(NoDelay™ )写入特性。
FM25040C、FM25C160C和FM25640C分别是 4、16和 64Kb F-RAM存储器,能够以高达20MHz的总线速度进行写操作,具有行业标准串行外设接口(SPI)。F-RAM存储器阵列在接收到数据后,立即将数据写入存储器
[手机便携]
atmega16L串口详解
ATmega16 单片机带有一个全双工的通用同步/异步串行收发模块USART,该接口是一个高度灵活的串行通讯设备。其主要特点如下: 全双工操作,可同时进行收发操作; 支持同步或异步操作; 支持5、6、7、8 和9 位数据位,1 位或者2 位停止位的串行数据帧结构; 三个完全独立的中断,TX 发送完成,TX 发送数据寄存器空,RX 接收完成; 支持多机通讯模式; 相关寄存器: USART 数据寄存器—UDR; USART 控制和状态寄存器—UCSRA,UCSRB,UCSRC; 波特率寄存器—UBRRL 和UBRRH; 串口背景知识 (1)串行通讯简介 串行同步通讯容易理解,约定一个同步时钟,每一时刻传输线上的信息就是要传送的信息
[单片机]
Atmega32简单的串口通信
最近因为做东西,又重新写了一下AVR,在这整理一下 串口通信是这个是比较常用的部分,Atmega32只有一个串口,USART 基本串口编程只需要写两部分,串口的初始化与串口数据接收 串口初始化: 设置波特率,波特率可以通过设置波特率发生寄存器UBRR来确定, UBRR为两字节16位的寄存器,可分为UBRRH和UBRRH,计算公式: UBRRH= (F_CPU/BAUD/16 -1)/256 UBRRL =(F_CPU/BAUD/16 -1)%256 串口的使能,通过写USART控制和状态寄存器B-USARTB,接收使能、发送使能、接收中断使能(可根据需要进行使能)。 使能语句:UCSRB |=(1 R
[单片机]
学C51的基础 10《 联 合(union) 》
联 合(union) 1. 联合说明和联合变量定义 联合也是一种新的数据类型, 它是一种特殊形式的变量。 联合说明和联合变量定义与结构十分相似。其形式为: union 联合名{ 数据类型 成员名; 数据类型 成员名; ... } 联合变量名; 联合表示几个变量公用一个内存位置, 在不同的时间保存不同的数据类型和不同长度的变量。 下例表示说明一个联合a_bc: union a_bc{ int i; char mm; }; 再用已说明的联合可定义联合变量。例如用上面说明的联合定义一个名为lgc的联合变量, 可写成: union
[单片机]
C51编程11-中断篇(中断原理1)
在前面的IO篇中,使用到矩阵键盘与LED,主函数中对它们的功能函数,从而检测矩阵键盘是否被按下,LED是否需要被点亮。如下面的代码所示,在循环中,不断执行键盘扫描与显示。 /******************************************************* * * Function name :main * Description :扫描键盘与显示 * Parameter :None * Return :None **********************************************************/ void main() { sysi
[单片机]
PC/104标准四串口通信板设计
1 引言 PC/104嵌入式控制PC出现于80年代末,并于1992年形成IEEEP966.1标准,它既继承了所有的PC资源,又在结构、体积、功耗、可靠性等方面重新进行了设计,使之与IBM PC完全兼容,并具有了体积小、功耗低、工作温度范围宽、可靠性高等特点。PC/104嵌入式控制PC采用了独特的“自栈式”总线连接,模块化结构,使用起来灵活方便。它所采用的面向对象的硬件设计方法使得在PC/104标准上开发的扩展模块具有更强的通用性和更长的生命期。同台式PC机一样,PC/104嵌入式控制PC也提供两个RS-232串行口。串行通信端口在数据通信中一直扮演极重要的角色,它不仅没有因为时代的进步而被淘汰,反而在规格上愈来愈向其极限挑战。常
[单片机]
STM32F1的UART4串口配置
注意是UART4,不是USART4 在stm32中UART和USART是不相同的 USART是通用同步/异步串行接收/发送器 UART是通用异步收发传输器 简单区分同步和异步就是看通信时需不需要对外提供时钟输出,我们平时用的串口通信基本都是 UART。 USART支持同步模式,因此USART 需要同步时钟信号USART_CK(如STM32 单片机),通常情况同步信号很少使用,因此一般的单片机UART和USART使用方式是一样的,都使用异步模式。 UART需要固定的波特率,就是说两位数据的间隔要相等。 UART总线是异步串口,一般由波特率产生器(产生的波特率等于传输波特率的16倍)、UART接收器、UA
[单片机]