MSP430单片机函数延时的问题分析

发布者:数字之舞最新更新时间:2020-11-28 来源: elecfans关键字:MSP430  单片机 手机看文章 扫描二维码
随时随地手机看文章

在这里, 我来讨论一下关于MSP430单片机使用__delay_cycles延时的问题。


IAR for MSP430编译器提供了一个编译器内联的精确延时函数(并非真正的函数)以提供用户精确延时使用, 该函数原型是:__intrinsic void __delay_cycles(unsigned long __cycles);该内部函数实现__cycles个CPU周期的延时,但对于该参数的设置,我要陈述一下:


__cycles需要我们传递的是CPU运行的周期个数

MSP430单片机函数延时的问题分析

网上普遍的用法是:

#define CPU_CLOCK 8000000

#define delay_us(us) __delay_cycles(CPU_CLOCK/1000000*(us))

#define delay_ms(ms) __delay_cycles(CPU_CLOCK/1000*(ms))

在CPU主时钟频率为8MHz时, 这确实没有问题, 但是这样的写法:#define CPU_CLOCK 8000000

这很容易让人们想到, 可以通过修改它的值以实现对不同主频系统参数的统一,其实这是不正确的! 比如修改为#define CPU_CLOCK 32768以实现32KHz主频的延时。

下面来计算看看:

当系统主时钟频率CPU_CLOCK为8MHz时:

频率 f = 8MHz = 8,000,000Hz

机器周期 Tm = 1/f = 1/8MHz = 1/8us

也就是说,一个机器周期(nop)的时长是1/8us,所以延时1us即8*Tm,同上面:

#define delay_us(us) __delay_cycles(8*(us))

#define delay_ms(ms) __delay_cycles(8000*(ms))

按照上面的宏定义方法,我们把CPU_CLOCK定义成32768,那么:频率 f = 32KHz = 32,768Hz

机器周期 Tm = 1/f = 1/32768Hz ~= 30.5us

可想而知,CPU最短的指令执行周期为30.5us, 这时, 想延时1us, 这可能吗?所以, 简单地把上面的定义改成

#define CPU_CLOCK 32768

是绝对错误的。

同样, 还有些朋友实现了0.5us的延时, 这在当f = 1MHz = 1000000Hz时也是不现实的, 此时机器周期Tm = 1us. 在f = 8Mhz时, 4个机器周期为0.5us尚可。

所以, 为避免引起错误的使用或不正确的理解,最好像下面这样定义宏:

#if CPU_CLOCK == 8000000

#define delay_us(us) __delay_cycles(8*(us))

#define delay_ms(ms) __delay_cycles(8000*(ms))

#else

#pragma error “CPU_CLOCK is defined implicitly!”

#endif

另外:

__delay_cycles 并不是真正的函数, 只是提供编译器内联展开,该函数并不支持变量参数, 其参数只能是常数.

关键字:MSP430  单片机 引用地址:MSP430单片机函数延时的问题分析

上一篇:MSP430单片机的输出模式有哪些
下一篇:msp430单片机延时函数的使用方法

推荐阅读最新更新时间:2024-11-02 21:13

入门MSP430FR6989之按键 第四章
新建一个工程,将程序改成如下 #include msp430.h #define uint8 unsigned char #define uint16 unsigned int uint8 key_data(void)//读取按键是否被按下 { uint8 key_value=0; if((P1IN&BIT1) == 0) { __delay_cycles(10000);//延时防抖动 if((P1IN&BIT1) == 0) { key_value=1; while((P1IN&BIT1) == 0); } } return key_value; }
[单片机]
高端MCU市场竞争激烈,ARM不懈怠
近几年基于ARM架构的处理器在移动设备市场额已经超过90%。在服务器市场,微软早在今年第一季度就宣布,将在下一版Windows(8)操作系统中支持ARM微处理器(以前Windows几乎一直是x86的独家操作系统)。ARM势力的扩张已让世人瞩目。 ARM的节节胜利,崛起于各家授权公司的创新和竞争 继飞思卡尔、NXP分别在去年8月、11月推出基于ARM Cortex-M4内核的微控制器产品之后,ST、TI在今年9月也相继发布相应产品,加剧了32位MCU市场的竞争局势。当意法半导体(ST)微控制器市场部经理曹锦东在“MCU!MCU!2011”大会上高调以“最高性能”定义了ST基于Cortex-M4内核的系列产品STM32 F4(
[单片机]
单片机驱动1602液晶电路图及c51程序
原理图: 1602液晶电路图 51单片机驱动程序: #include reg51.h #include intrins.h #define uint unsigned int #define uchar unsigned char //这三个引脚参考资料 sbit E=P2^7; //1602使能引脚 sbit RW=P2^6; //1602读写引脚 sbit RS=P2^5; //1602数据/命令选择引脚 void init() { TMOD=0X00; TH0=0X03; TL0=0X32; IE=0X82; TR0=1; } /********
[单片机]
<font color='red'>单片机</font>驱动1602液晶电路图及c51程序
51单片机无条件转移指令(4条)
控制转移 指令 用于控制程序的流向,所控制的范围即为程序存储器区间,MCS-51系列单片机的控制转移 指令 相对丰富,有可对64kB程序空间地址单元进行访问的长调用、长转移指令,也有可对2kB字节进行访问的绝对调用和绝对转移指令,还有在一页范围内短相对转移及其它无条件转移指令,这些指令的执行一般都不会对标志位有影响。 . 无条件转移指令(4条) 这组指令执行完后,程序就会无条件转移到指令所指向的地址上去。长转移指令访问的程序存储器空间为16地址64kB,绝对转移指令访问的程序存储器空间为11位地址2kB空间。 LJMP addr16 ;addr16→(PC),给程序 计数器 赋予新值(16位地址) AJMP addr
[单片机]
PIC单片机实现RS232串口异步通讯的设计
编写程序实现以下功能。在计算机上使用串口大师向开发板发每次发送1个字符。开发板每接收到一个数据,则交换该数据的高低4位,再发送回计算机。 端口初始化时使能发送与接收,使用扫描方式接收数据,接收到数据后立即交换高低四位并发送,交换高低四位方式如下: 完整程序: * 标 题: 异步串口通讯 * 功能描述: 在计算机上使用串口大师向开发板发每次发送1个字符。 * 开发板每接收到一个数据,则交换该数据的高低4位,再发送回计算机。 #include #define uint8 unsigned char #define uint16 unsigned int __CONFIG(FOSC_HS &WDTE_OFF &BOREN_OFF
[单片机]
PIC<font color='red'>单片机</font>实现RS232串口异步通讯的设计
最简短且高效的排序程序
要求使用 MCS-51 单片机,进行数据排序。 1.对8个数据进行递增排序; 2.需要排序的数据存在内部数据存储器30H-37H地址单元中,分别为 34H,56H,23H,90H,32H,68H,09H,75H; 3.排序后数据存在内部数据存储器30H-37H地址单元中。 最佳答案: ;----------------------------------------------------- ORG 0000H MOV 30H, #34H MOV 31H, #56H MOV 32H, #23H MOV 33H, #90H MOV 34H, #32H MOV 35H, #68H MOV
[单片机]
51单片机入门 - 定时/计数器原理及结构(T0和T1)
定时/计数器结构(T0和T1) 16位 寄存器 T0、T1分别由TH0、TL0和TH1、TL1四个8位计数器组成 定时器的区别: T0可分成2个独立的8位定时器,而定时器1则不能; T1可作为串口的波特率发生器,而定时器0则不能。 工作原理 注:T0或T1都不能同时既做定时器也做计数器 补充: 计数器工作原理: 用作计数器时,对T0或T1引脚的外部脉冲计数,如果前一个机器周期采样值为1,后一个机器周期采样值为0 ,则说明有一个脉冲,计数器加1。 在每个机器周期的S5P2期间采样引脚输入电平。新的计数初值于下一个机器周期的S3P1期间装入计数器。 此种方式需要两个机器周期来检测一个1- 0负跳变信号,因此最高的计
[单片机]
51<font color='red'>单片机</font>入门 - 定时/计数器原理及结构(T0和T1)
基于SST89E564RC单片机的多点温控采暖控制系统简介
利用SST89E564RC单片机及新型测温器件设计了多点温控采暖控制系统,根据室内各点温度设定实时控制采暖系统,从而提高居室的舒适性以及采暖的经济性。 1 系统设计目标 系统总体设计思想是以SST89E564RC单片机为控制核心,整个系统硬件部分包括温度检测部分、控制执行部分、显示及键盘系统及最小系统基本电路。系统利用单片机获得温度传感器数据并与系统设计值进行比较,根据比较结果分别控制执行系统。温度控制系统控制框图如图1所示。 2 系统硬件设计 根据系统所需完成的功能,设计系统硬件结构如图2所示。 2.1 控制核心 系统采用SST89E564RC单片机作为控制核心,进行温度采集
[单片机]
基于SST89E564RC<font color='red'>单片机</font>的多点温控采暖控制系统简介
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved