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可為許多嵌入式控制應用系統提供高性價比的解決方案.液晶顯示器以其微功耗、體積小、顯示內容豐富、超薄輕巧的諸多優點,在袖珍式儀表和低功耗應用系統中得到越來越廣泛的應用。