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]
}
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)