您的位置 首页 厂商

LM3S9b96 体系延时和计数延时

使用9b96芯片,免不了用到延迟,例如:让LED闪烁。于是,出现延时时间的问题。下面是两种常见的延时方式:1.系统延时:这是9b96芯片的固…

运用9b96芯片,免不了用到推迟,例如:让LED闪耀。所以,呈现延时时刻的问题。

下面是两种常见的延时办法:
1. 体系延时:这是9b96芯片的固有的,用其API函数即可搞定,而且守时时刻比较准确。

函数原型:
void SysCtlDelay (unsigned long ulCount)
参数:
ulCount 是要履行的延时循环反复的次数。
描绘:
该函数供给了一个发生稳定长度延时的办法。它是用用汇编写的,以坚持跨过东西链的
延时共同,然后避免了在应用上根据东西链来调理延时的要求。
循环占用3个周期/循环。
回来:
无。

2. 计数延时:大略延时办法


void Delay(unsigned long nCount)
{
for(; nCount != 0; nCount–);
}

下面是一个LED闪耀的比如:


#include “inc/hw_memmap.h”
#include “inc/hw_types.h”
#include “driverlib/gpio.h”
#include “driverlib/sysctl.h”

/* 用于调试 PF1 <-> LED —————————————————–*/
#define LED_PERIPH SYSCTL_PERIPH_GPIOF
#define LED_PORT GPIO_PORTF_BASE
#define LED_PIN GPIO_PIN_1
#define LED_OFF 1 << 1
#define LED_ON ~(1 << 1) // 低电平点亮LED
void Delay(unsigned long nCount)
{
for(; nCount != 0; nCount–);
}

int main(void)
{
// Set the clocking to run directly from the crystal.
SysCtlClockSet(SYSCTL_SYSDIV_1 | SYSCTL_USE_OSC | SYSCTL_OSC_MAIN | SYSCTL_XTAL_16MHZ);

SysCtlPeripheralEnable(LED_PERIPH); // 使能LED地点的GPIO端口

GPIOPinTypeGPIOOutput(LED_PORT, LED_PIN); // 设置LED地点管脚为输出

while (1)
{
GPIOPinWrite(LED_PORT, LED_PIN, LED_ON); // 点亮LED
Delay(0xfff); // 试验测得延时2.5ms
GPIOPinWrite(LED_PORT, LED_PIN, LED_OFF); // 平息LED
Delay(0xfff); // 试验测得延时2.5ms

/*
GPIOPinWrite(LED_PORT, LED_PIN, LED_ON); // 点亮LED
SysCtlDelay(SysCtlClockGet() / 3000); // 准确延时1ms
GPIOPinWrite(LED_PORT, LED_PIN, LED_OFF); // 平息LED
SysCtlDelay(SysCtlClockGet() / 3000); // 准确延时1ms
*/
}
}

体系时钟设置为16M,用示波器测得两种延时办法的时刻:
提示:在体系时钟为16M的情况下,咱们能够直接运用下面延时时刻。
1) SysCtlDelay(SysCtlClockGet() / 3); // 准确延时1000ms
2) SysCtlDelay(SysCtlClockGet() / 30); // 准确延时100ms
3) SysCtlDelay(SysCtlClockGet() / 300); // 准确延时10ms
4) SysCtlDelay(SysCtlClockGet() / 3000); // 准确延时1ms
5) SysCtlDelay((SysCtlClockGet() / 3000) * 2); // 准确延时2ms
6) Delay(0xf); // 试验测得延时11us
7) Delay(0xff); // 试验测得延时160.7us
8) Delay(0xfff); // 试验测得延时2.5ms
9) Delay(0xffff); // 试验测得延时40.94ms
a) Delay(0xfffff); // 试验测得延时657.4ms
b) Delay(0xffffff); // 试验测得延时10.49s

要点:1) 计数延时时刻与体系时钟频率有关,假如用PLL将体系时钟设置成50M,其延时时刻变短。

2)体系延时时刻与体系时钟频率无关,即便将用PLL将体系时钟设置成50M,其延时时刻不变。

体系时钟 16M 50M
计数延时:Delay(0xfff); 2.5ms 819us
体系延时:SysCtlDelay(SysCtlClockGet() / 3000); 1ms 1ms

引荐:体系延时办法更便利些,咱们能够将其封装成一个带参函数。

//*****************************************************************************
//
// 准确延时nms
//
//*****************************************************************************

void Delay(DWORD nms)
{
SysCtlDelay((SysCtlClockGet() / 3000) * nms);
}

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/changshang/275128.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部