51单片机秒表存储时间
① 单片机怎么存储时间和数据
ROM,FLASH等掉电可存储的单元。
② 51单片机的定时器和计数器分别定时和计数的周期是多长时间,这个脉冲周期有规定吗
定时器/计数器本质上都是计数器,只不过数的东西不一样.
定时器/计数器做为定时器来用的时候,是数的单片机时钟的脉冲个数,也就是说,单片机的时钟做为定时器/计数器的时钟源,因为单片机的时钟一般比较固定,因此,我们就知道一个脉冲占多长时间,因为根据脉冲的个数,就能推算出时间,就能做定时器用.
比如:12MHz的传统51单片机,一个脉冲周期是1us,如果定时器数了10个脉冲周期就中断了,说明10us时间到了.
而作为计数器的时候,数的是来自引脚上的脉冲,也就是说,是引脚上的脉冲做为定时器/计数器的时钟源,如果这个脉冲是规律的,周期是固定的,那么,也可以实现定时,比如,如果引脚的脉冲是10KHz的,那么,一个脉冲周期是100us,如果定时器/计数器数了10个脉冲周期就中断,说明1ms时间到了.
但是,如果引脚上的脉冲频率不固定,时高时低,那么,就没办法根据脉冲个数算出时间来,此时,就只是单纯的计数功能.
总而言之,定时器/计数器本质都是对脉冲计数,只是作为定时器,数的是内部的脉冲,做为计数器,数的是外部的脉冲,如果脉冲固定,外部脉冲也可以用来定时.赞同0|评论
③ 用51单片机实现时钟功能程序
anEQUP0;
weiEQUP2;
keyBITP3.7;
ORG0000H
AJMPMAIN;绝对转移指令,2kb范围(11位)内跳转LJMP16位64kb范围内跳转
;短转移指令的功能是先使程序计数器PC加1两次(即:取出指令码),然后把加2后的地址和rel相加作为目标转移地址。因此,短转移指令是一条相对转移指令,是一条双字节双周期指令
ORG0030H;指明后面的程序从程序存储器的0030H单元开始存放
DELAY200US:;@11.0592MHz
NOP
NOP
NOP
PUSH30H
PUSH31H
MOV30H,#2
MOV31H,#179
NEXT:
DJNZ31H,NEXT
DJNZ30H,NEXT
POP31H
POP30H
RET
ORG0060H
;DISPLAY子程序
DISPLAY:
PUSHACC;不能写A,此处ACC代表地址,push后跟地址,代表把地址内的内容压入栈中
PUSH00H;R0
PUSH06H;R6
PUSH07H;R7
PUSH83H;DPH
PUSH82H;DPL
MOVR6,#01H;位选数据,01指的是缓冲区最低位数据
MOVR7,#08H;循环次数
FLAG:
MOVan,#0x00;消影
MOVA,R6
CPLA;取反
MOVwei,A;位选
MOVA,#disBufDat
ADDA,R7
SUBBA,#0X08
MOVR0,A
MOVA,@R0;读出要显示的数据到A
MOVDPTR,#disTab
MOVCA,@A+DPTR;从rom取数据,取出要显示的数据对应的段码
MOVan,A;段选
MOVA,R6
RLA
MOVR6,A;更新下一次位选
LCALLDELAY200US
DJNZR7,FLAG
POP82H;DPL
POP83H;DPH
POP07H
POP06H
POP00H
POPACC
RET
ORG0100H
;定时器中断0初始化
T0_INIT:
MOVTMOD,#0X01
MOVTH0,#0X3C
MOVTL0,#0XB0
SETBEA
SETBTR0
SETBET0
RET
ORG0130H
;T0中断处理程序
INT_TIMERE0:
PUSHACC
SETBRS0
MOVTH0,#0X3C
MOVTL0,#0XB0
INCR0
MOVA,R0
SUBBA,#0X14
JBCY,SECFLAG
MOVR0,#0x00
INCsec
SECFLAG:
CLRRS0
POPACC
RETI
ORG000BH;定时器/计数器T0入口地址
LJMPINT_TIMERE0;跳转到定时器/计数器中断服务程序中去
disTab:DB0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x00,0x40;0-f,空白,横杠的段选数据
disBufDatEQU47H;定义显示缓冲数据变量区,8个
disBufDatHeadEQU40H//单片机上显示在最左边
secEQU48H
;主程序
ORG0180H
MAIN:
MOVSP,#0X60;将0x60到0x7f设为堆栈区
LCALLT0_INIT
MOVdisBufDatHead,#0X00
MOVdisBufDatHead+1,#0X00
MOVdisBufDatHead+2,#0X11
MOVdisBufDatHead+3,#0X11
MOVdisBufDatHead+4,#0X11
MOVdisBufDatHead+5,#0X11
MOVdisBufDatHead+6,#0X11
MOVdisBufDatHead+7,#0X11
MOVsec,#0X3A
WHILE:
JBkey,KEYSCAN
MOVsec,0x00
KEYSCAN:
MOVA,sec
SUBBA,#3CH;超过60s归零
JBCY,CLEAR
MOVsec,#0X00;clr加ram地址无效
CLEAR:
MOVA,sec
MOVB,#0AH
DIVAB;A/B,商存到A中,余数存B中
MOVdisBufDatHead,A
MOVdisBufDatHead+1,B
LCALLDISPLAY
LJMPWHILE;循环
END;
(3)51单片机秒表存储时间扩展阅读
51机器周期和指令周期
1、机器周期是指单片机完成一个基本操作所花费的时间,一般使用微秒来计量单片机的运行速度,51单片机的一个机器周期包括12个时钟振荡周期,也就是说如果51单片机采用12MHz晶振,那么执行一个机器周期就只需要1μs;如果采用的是6MHz的晶振,那么执行一个机器周期就需要2μs。
2、指令周期是指单片机执行一条指令所需要的时间,一般利用单片机的机器周期来计量指令周期。在51单片机里有单周期指令(执行这条指令只需一个机器周期),双周期指令(执行这条指令只需要两个机器周期),四周期指令(执行这条指令需要四个机器周期)。
除了乘、除两条指令是四周期指令,其余均为单周期或双周期指令。也就是说,如果51单片机采用的是12MHz晶振,那么它执行一条指令一般只需1~2微秒的时间;如果采用的是6MH晶振,执行一条指令一般就需2~4微秒的时间。
④ 设计一个单片机秒表,该秒表可显示0.0到59.9秒的时间
P3接字码,P2接位码。没有加按键功能。
#include<reg51.h>
#defineucharunsignedchar
#defineuintunsignedint
//数码管字型表,对应0,1,2,3,4,5,6,7,8,9//
ucharTable[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
uintData[2]={0,0};
dataBuffer[1]={0};
uintTIME=0;//倒计时时间
uintj;
sbitBEEP=P1^2;
sbitPoint=P3^7;
voidDelayMs(uinti)
{
for(;i!=0;i--)
{for(j=100;j!=0;j--){;}}
}
voidDisplay(uint*p)//动态显示函数,参数p为待显示的数组名
{
P2=0xfe;
P3=Table[p[2]];//送字型码
DelayMs(3);
P2=0xfb;
P3=Table[p[1]];//送字型码
Point=0;
DelayMs(3);//显示延时
P2=0xfd;
P3=Table[p[0]];
DelayMs(3);
}
voidProcess(uinti,uint*p)
{
p[0]=i/100;
i=i%100;
p[1]=i/10;
p[2]=i%10;
}
voidmain(void)
{
EA=1;IT1=1;ET0=1;
TMOD=0x01;//T0方式1计时0.01秒
TH0=65536-5000/256;
TL0=65536-5000%256;
TR0=1;//开中断,启动定时器
while(1)
{
Process(TIME,Data);
Display(Data);
if(TIME>599)
{
TIME=0;
}
}
}
/*定时计数器0的中断服务子程序*/
voidintserv1(void)interrupt1using1
{
TH0=65536-5000/256;
TL0=65536-5000%256;
Buffer[0]=Buffer[0]+1;//定时器T0的低四位赋值
if(Buffer[0]==10)//百分秒进位
{
TIME+=1;
Buffer[0]=0;
}
}
⑤ 51单片机在电子钟程序中添加秒表(c语言) 答对100追分。
就在定时器中断里面再计算一个秒表时间值的if判断就行了,上学的时候做过
⑥ 用51单片机做电子秒表,要求能多次计时,能查询计时时间
你好!是仿真还是有实物,显示用什么?程序是c语言写吗
⑦ 用51单片机1602做一个可以存储系统的秒表
储存系统?掉电保存吗?
这样的话,单片机要带有EEPROM的,没有的话就要外加一个EEPROM芯片。
秒表不难做啊
⑧ 51单片机怎么实现计时
嘿嘿 还是让俺来帮你解决吧
1 关于定时器定时时间的计算问题:
如果使用的是12M晶振计算,指令周期1uS,定时器是加1计数器,即是对内部时钟即指令周期脉冲计数 每当1uS到时,计数器加1。
假设 定时器的初始值=X,则每到1uS 计数器的值就加1 ,则计数器值=X+1+1+...+1 值越来越大,最后达到FFFFH+1 就会产生溢出 结果计数器值回0(FFFFH+1=65536)
可以推出 定时时间=计数的1的个数×1uS=(65536—X )1 uS
结论: 定时时间跟初始值即时间常数X有关。
如果要定时0.5毫秒=500uS 根据定时时间公式 500=(65536—X )
即X=(65536-500) 一般把高8位送TH0 即 (65536-500)/256
把 (65536-500)%256即除上256后的余数 即低8位数送给TL0
每当定时时间到 计数器值都回0 必须重新送时间常数X
2每条指令的时间怎么算? 答复:
可以查指令表 每一条指令的执行时间的周期数 都是固定的 如 NOP 为一个机器周期
MOV R6,#200; 为2个机器周期
机器周期=12/晶振频率 如果晶振频率=12MHZ 则机器周期=1 uS
就可以知道 ; 执行NOP指令的执行时间为 1 uS
执行MOV R6,#200指令的执行时间为 2 uS
因此 是可以精确计算出指令的延时时间的
呵呵 就介绍这些吧 满意就 给加分吧
⑨ 51单片机 定时时间
65535*2=131070微秒,每个周期为2微秒*65535个周期。你算算就对了,我是记住的12M时周期为1微秒,6M就为2微秒,24M为0.5微秒
⑩ 关于51单片机 的秒表/时钟计时器设计摘要
本设计以AT89S51单片机为核心芯片,与型号为1602的液晶显示器构成数字电子时钟电路。AT89S51是一个低功耗,高性能CMOS 8位单片机,片内含4K Bytes ISP(In-system programmable)的可反复擦写1000次的Flash只读程序存储器,器件采用ATMEL公司的高密度、非易失性存储技术制造,兼容标准MCS-51指令系统及AT89C51引脚结构,芯片内集成了通用8位中央处理器和ISP Flash存储单元,功能强大的微型计算机的AT89S51可为许多嵌入式控制应用系统提供高性价比的解决方案.液晶显示器以其微功耗、体积小、显示内容丰富、超薄轻巧的诸多优点,在袖珍式仪表和低功耗应用系统中得到越来越广泛的应用。