1.毫秒级的延时
延时1ms;
void delay_1ms(void)
{
unsigned int i;
for(i=1;i<(unsigned int)(xtal*143-2_;i++)
;
}
在上式中,xtal为晶振频率,单位为MHz.
当晶振频率为8M时,延时函数软件仿真的结果为1000.25μs.当晶振频率为4M时,延时函数软件仿真结果为999.5μs.
如果需要准确的1ms延时时间,则本计算公式只供参考,应通过软件仿真后,再确定循环的次数及循环初值,并且循环中还必须关闭全局中断,防止中断影响延时函数的延时时间。
下面的函数可以获得1ms的整数倍的延时时间:
void delay(unsigned int n)
{
unsigned int i;
for(i=0;i
delay_1ms();
}
如果需要准确的延时时间,则本计算公式只供参考,应通过软件仿真后,再确定循环的次数及循环初值.
2.微秒延时
晶振频率为8MHz时1μs延时函数:
void delay_1us(void)
{
asm("nop");
}
当然也可以使用宏定义来实现1μs延时:
#define delay_1us(); asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop")
如果小于1μs的延时,只有使用宏定义实现,当然,也可以直接插入在线汇编
asm("nop");
语句实现延时。
在程序中需要微秒级的延时时,可以用以下函数实现。
void delay_us(unsigned int n)
{
unsigned int i;
for(i=0;i
delay_1us();
}
说明:如果需要准确的延时时间,则还必须关中断,并通过软件仿真后,再确定循环的次数及循环初值.
强调:在实际应用中一般不直接使用软件进行长时间的延时,因为MCU一直停留延时函数中(称为阻断),不能再干其它的事睛(除了中断外),只有非常简单的应用或者简单的演示时才能使用延时函数实现长时间延时。实际应用中,对长时间(较简单任务一般指几十毫秒以上,对于复杂的应用,一般指几毫秒以上)的延时,应采用非阻断式的延时方式,或者使用定时器中断来完成延时。
关键字:AVR 单片机 精确延时函数
引用地址:
AVR 单片机精确延时函数
推荐阅读最新更新时间:2024-03-16 15:46
TimerConvert.h头文件下载-AVR定时器参数转换通用头文件
/***************************************************************************** 文件名称:TimerConvert.h 文件标识:_TIMERCONVERT_H_ 摘 要:AVR定时器参数转换通用头文件 当前版本:V1.0 *****************************************************************************/ #ifndef _TIMERCONVERT_H_ #define _TIMERCONVERT_H_ #define WGM0(WGM) (((W
[单片机]
瑞萨面向高端工业传感器系统推出具备高速、 高精度模拟前端的32位RX MCU
全新RX23E-B相比现有版本数据速率快8倍,并包含125 kSPS ΔΣ A/D转换器 2023 年 11 月 22 日, 中国北京讯 - 全球半导体解决方案供应商瑞萨电子今日宣布面向高端工业传感器系统推出一款全新RX产品——RX23E-B,扩展32位微控制器(MCU)产品线。 新产品作为广受欢迎的RX产品家族的一员,具有高精度模拟前端(AFE),专为需要快速、精确模拟信号测量的系统而设计。 该新型MCU集成24位Delta-Sigma A/D转换器,转换速度高达125 kSPS(125,000采样/秒),比现有RX23E-A产品快8倍。与RX23E-A相比,它可以处理精确的A/D转换,同时将均方根(RMS)噪声降
[嵌入式]
DSP与单片机通信的多种方案设计
将DSP和单片机构成双CPU处理器平台,可以充分利用DSP对大容量数据和复杂算法的处理能力,以及单片机接口的控制能力。而DSP与单片机之间快速正确的通信是构建双CPU处理器的关键问题。下面就此问题分别设计串行SCI、SPI和并行HPI三种连接方式。 1 串行通信设计与实现 1 1 SCI串行通信设计 1.1.1 多通道缓冲串行口McBSP原理 TMS320VC5402(简称VC5402)提供了2个支持高速、全双工、带缓冲、多种数据格式等优点的多通道缓冲串行口McBSP。MCESP分为数据通路和控制通路。①数据通路负责完成数据的收发。CPU或DMAC能够向数据发送寄存器DXR写入数据,DXR中的数据通过发送移位寄
[嵌入式]
16C84单片机的RB口中断程序
Interrupts - Part II, Interrupt on RB Change Introduction This discussion deals with the interrupt on RB change feature. It assumes the reader is familiar with the general discussion dealing with interrupts. The PIC16C84 and most other PICs provide a feature where the program may be configured such that an interrup
[单片机]
基于单片机的集成编码PT2262解码器设计
近年来,基于波形分析的软件解码或者软硬结合解码的方法被提出来。但是,这些方法都不具有自学功能,只针对特定振荡频率的波形进行解码,当不知道发射电路PT2262的振荡电阻的配置的情况下无法解码,或者需要手工调整程序的参数。 本文提出了一种具有自学习功能的基于单片机的软件解码方法并完成了设计,这种新方法可以在未知发射电路的配置参数的情况下,通过先学习、后解码的过程实现解码,且可以实现自定义数据帧的格式,使编码的地址位和数据位的设置更加灵活。从而可以将通用编码集成电路扩展应用于数据通信,智能控制等领域。 1 PT2262工作原理 PT2262最多可有12位(A0~A11)三态地址端管脚(悬空,接高电平,接低电平)任意
[工业控制]
一个单片机串行数据采集/传输模块的设计
摘 要 以GMS97C2051单片机为核心,采用TLC2543 12位串行A/D转换器,设计了一个串行数据采集/传输模块,给出了硬件原理图和主要源程序。
关键词 串行A/D转换器 串行数据传输 GMS97C2051单片机
在微机测控系统中,经常要用到A/D转换。常用的方法是扩展一块或多块A/D采集卡。当模拟量较少或是温度、压力等缓变信号场合,采用总线型A/D卡并不是最合适、最经济的方案。这里介绍一种以GNS97C2051单片机为核心,采用TLC2543 12位串行A/D转换器构成的采样模块,该模块的采样数据由单片机串口经电平转换后送到上位机(IBM PC兼容机)的串口COM1或COM2,形成一种串行数据采集串行数据传
[单片机]
适应实时多任务的微控制器高效指令支持
摘要:开发高效的实时多任务微控制器系统,除了采用高速器件之外,适当的指令支持能简化控制结构,减少程序代码,增强实时响应能力。本文提出了一些适应实时多任务的微控制器高效指令功能设计。 关键词:微控制器 实时多任务 指令 微控制器系统即国内通常所称的单片机系统,主要用于物理设备的接口和直接控制。虽然控制逻辑相对微处理机系统而言比较简单,但由于多数情况下需要实时响应,而且经常要同时处理多个对象的协同工作,因此,不仅对程序的运行效率有较高的要求,还要求微控制器具备较强的多任务处理能力。另一方面,由于量大面广,以及具体应用条件的限制,希望微控制器的成本要低;而这又只有在微控制器的硬件结构相对简单的前提下才能实现,这就限制了微控制器的指令、程序
[嵌入式]
基于Proteus的51单片机实时时钟的仿真设计
单片机技术应用于各行各业,是一种实用的智能型控制技术,单片机技术的发展极大地推动了电子、通信、计算机、机电一体化等行业的快速发展,成为当前教学和科研的热门技术。本文详细介绍一种新型的单片机仿真软件Proteus,利用它可以实现单片机教学中很多面向端口、外围设备扩展控制型实验的仿真,提高教学效果,进一步缩短教学与工程实际的距离。 1Proteus简介 ProteusISIS是英国Lacenterelec-tronics公司开发的电路分析与实物仿真软件,应用范围十分广泛,涉及PCB制版、Spice电路仿真、单片机仿真以及对ARM7/LPC2000的仿真。Proteus主要由ARESISIS两大模块构成,ARES主要用于
[单片机]