MSP430G2231单片机,使用内部晶振,不倍频,怎样计算实现一个500us的延时程序?

MSP430G2231单片机,使用内部晶振,不倍频,怎样计算实现一个500us的延时程序?,第1张

给你一个大体流程,不使用定时器,只对指令周期计数就行了。

1、采用62.5ns指令周期, 500uS需要8000个指令周期;

2、使用计时器,由于你不需要倍频,则这个计时大轮器只对指令周期进行基数;

3、计时器如果是8bit的,那就计时器没计数到250(十进制),就对计时器清零,同时给计时器250溢出计数器+1,未满250是就跳转会开始处继续检测计时器。

4、检测计时器的溢出计数器是否计数到32次。没有达到32次,就跳回开始重新检测计时器,达到32次,就完成程序进行标记,然后结束。

注意:你要使用一个计时器,这个计时器timer每运行一天指令,就+1;

使用一个数据暂存器temp,对250次计时器溢出枣镇计数。

使用两个循环程序,凳仿粗第一次对指令周期进行计数,检测是否到达250次;第二次循环程序是对250次溢出的次数计数。其中前一个循环被后一个循环所包含。

这伍答是一个秒表,有腔颤慧按键实现 启动、暂停核清零功能洞亩。

#include <reg51.H>

sbit P3_5 =P3^5

unsigned char code dispcode[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,

0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E,0x00}

unsigned char second

unsigned char keycnt

unsigned int tcnt

void main(void)

{

unsigned char i,j

TMOD=0x02

ET0=1

EA=1

second=0

P1=dispcode[second/10]

P2=dispcode[second%10]

while(1)

{

if(P3_5==0)

{

for(i=20i>0i--)

for(j=248j>0j--)

if(P3_5==0)

{

keycnt++

switch(keycnt)

{

case 1:

TH0=0x06

TL0=0x06

TR0=1

break

case 2:

TR0=0

break

case 3:

keycnt=0

second=0

P1=dispcode[second/10]

P2=dispcode[second%10]

break

}

while(P3_5==0)

}

}

}

}

void t0(void) interrupt 1 using 0

{

tcnt++

if(tcnt==4000)

{

tcnt=0

second++

if(second==100)

{

second=0

}

P1=dispcode[second/10]

P2=dispcode[second%10]

}

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/8283177.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-15
下一篇 2023-04-15

发表评论

登录后才能评论

评论列表(0条)

保存