導航:首頁 > 操作系統 > 單片機的計時

單片機的計時

發布時間:2023-01-01 08:04:45

㈠ 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單片機計時60毫秒怎麼算呀,計數周期是啥意思呀

一般51單片機的晶振頻率是fosc=12M,單片機內部計時的頻率是fosc/12 即1MHZ
因此計數周期1us
內部定時器是16位,最多 計脈沖數為65536個,因此最長定時時間是65.536 ms
要定時60 ms,需經過的脈沖個數是60000個,由於51單片機的定時器是加法計數,因此初值應該寫入(65536-60000)
這樣經過60mS後,計數器的值就是 (65536-60000)+60000=65536,剛好溢出,溢出標志位TF置1或產生中斷
定時器初值又分高8位和低8位,高8位的1代表256,因此高8位是256的倍數,低8位是256的余數
因此 C語言編程就這樣 寫:
TH0=(65536-60000)/256
TL0=(65536-60000)%256

㈢ 單片機如何計時

2個按鈕分別接在2個中斷口上,為單片機擴展一個數碼管,2位還是4位看你需要顯示多少了,或者使用6位,分別顯示時,分,秒
程序是:單片機啟動,初始化,循環等待
中斷0中斷,開始啟動定時器,定時50毫秒,計數20次,計數的值為秒;
秒>60,則分+1,分>60,則時+1.
分別把時分秒數據送到數碼管,數碼管刷新
中斷1中斷,中斷1服務子程序取消定時器中斷,計時停止。

電路硬體:
1、at89c51
2、常開按鈕(輕觸開關)2隻
3、共陰數碼管,6隻。
4、單片機最小系統必須的晶振1塊,電容30pF,2隻,復位電路需要的10u電解電容1隻,電阻10K一隻,開關1隻,供電另計
因為外部器件不多,就直接用P2送數碼管位碼,沒有擴展顯示晶元。

㈣ 51單片機用定時器計時應該如何計算求大神支招

這個其實很簡單的,你只需要知道一個條件即可:晶振頻率。
因為51單片機的機器周期計算公式是12/晶振頻率MHz,若晶振為12MHz,則機器周期就是12/(12×10^6)=1us,也就是說計數器沒1us計數一次。
那麼有了這個條件就好辦多了,一般來說,12MHz晶振下,16位定時器滿計數是65536次,每次1us,最大就能計時65.536ms,則65536減去多少就是定時多少,如(65536-X)/256,就是定時X微秒。
那麼如果晶振不是12MHz,就要把上述的X乘以12/晶振,得到的值就是定時時長。原理相同。
有不懂的地方隨時回復我。
希望我的回答能幫助到你。

㈤ 【單片機】單片機的定時時間是怎樣計算

單片機的定時時間的計算公式=計數值(定時值)* 機器周期= 計數值(定時值)* 12 / 晶振頻率。

上面的兩個等號是等價的,因為,單片機的機器周期=12秒/晶振頻率,因此兩個公式通用。

完成一個基本操作所需要的時間稱為機器周期。一般,一個機器周期由 若干個S周期(狀態周期)組成。80C51系列單片機一個機器周期由6個S周期組成。一個S周期(狀態周期),由2個時鍾周期組成。

若干個機器周期,組成了指令周期。根據指令不同,所需的機器周期數也不同。

(5)單片機的計時擴展閱讀

幾種典型指令;

1、單位元組周期指令(比如 INC A)

2、雙位元組單周期指令(比如 ADD A,#data)

3、單位元組雙周期指令 (比如 INC DPTR)

4、單位元組雙周期指令 (比如MOVX A @DPTR)

㈥ 如何用單片機做一個簡單的倒計時器

51單片機實現數碼管99秒倒計時,其實很簡單,就是使用定時器中斷來實現。目的就是學習怎樣用單片機實現倒計時,從而實現一些延時控制類的東西,99秒只是一個例子,你完全可以做出任意倒計時如10秒倒計時程序。定時器定時時間計算公式:初值X=M(最大計時)-計數值。
初值,換算成十六進制,高位給TH0,低位給TL0,如果用定時器0的話。
M(最大計時)如果是16位的,就是2的16次方,最大定時,65535 微秒,實現1秒定時,可以通過定時10毫秒,然後100次改變一次秒值即可。10*100毫秒=1S
計數值:你要定時多長時間,如果定時1毫秒,就是1000微秒,(單位為微秒),如果定時10毫秒,就是10000(微秒),當然,最大定時被定時器本身位數限制了,最大2的16次方(16位定時計數器),只能定時65.535毫秒。定時1S當然不可能1S定時器中斷。
下面為實現99秒倒計時C語言源程序
/*了解定時器,這樣的話,就可以做一些基本的實驗了,如定時炸彈~~,10秒後打開關閉繼電器*/
/*數碼管,12M晶振*/
#include <reg52.h>
#define uchar unsigned char
sbit p11=P1^1; //連的是繼電器。。
code unsigned char tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
uchar shiwei;
uchar gewei;
void delay(unsigned int cnt)
{
while(--cnt);
}
void main()
{
TMOD|=0x01; /*定時器0 16位定時器 X=65535-10000(10毫秒)=55535=D8F0(十六進制)定時10ms
*/
TH0=0xd8;
TL0=0xf0;
IE=0x82; //這里是中斷優先順序控制EA=1(開總中斷),ET0=1(定時器0允許中斷),這里用定時器0來定時
TR0=1; //開定時器0
while(1)
{
P0=shiwei; //99的十位
P2=0; //99的個位,
delay(300); //動態掃描數碼管延時
P0=gewei;
P2=1;
delay(300);
}
}
void tim(void) interrupt 1 using 1 //定時器0中斷
{
static uchar second=99,count; //99隻是一個數,可以任意改,因為這里只學習怎樣實現倒計時
TH0=0xd8; //定時10毫秒
TL0=0xf0;
count++;
if(count==100) //10毫秒定時,10*100=1000(毫秒)=1秒
{
count=0;
second--;
if(second==0)
{
p11=0; //這里讓繼電器動作,當然動作之後,要復位才能等下次倒定時再動作。
second=99; //回到99再循環來,當然,可以做其他的控制,
}
shiwei=tab[second/10]; //數碼管10位
gewei=tab[second%10]; //數碼管個位
}

㈦ 單片機計時器

//1:用AT89C51單片機的定時/計數器T0產生一秒的
//定時時間,作為秒計數時間,當一秒產生時,秒
//計數加1,秒計數到60時,自動從0開始。單片機
//晶振頻率為12MHZ
//由於是剛剛注冊,積分沒有多少,請大家幫個忙,謝謝!
#include<reg52.h>
#define
uchar
unsigned
char
#define
uint
unsigned
int
uchar
code
table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,
0x6f};
void
display(uchar
fen,uchar
miao);
uchar
a,fen,miao,shu;
void
delay(uint
z);
void
init();
void
main()
{
init();
while(1)
{
display(fen,miao);
}
}
void
timer0()
interrupt
1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
a++;
if(a==20)
{
a=0;
shu++;
fen=shu/10;
miao=shu%10;
if(shu==60)
shu=0;
}
}
void
init()
{
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;
ET0=1;
TR0=1;
}
void
display(uchar
fen,uchar
miao)
{
P1=0xFe;
P2=table[fen];
delay(5);//延時5毫秒
P1=0xFf;
P2=table[miao];
delay(5);//延時5毫秒
}
void
delay(uint
z)
{
uint
x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
//P2口接數碼管,然後數碼管位選通過74HC138來控制
//我可是剛學,弄了好久才弄出來的哦
//要圖的話加980100952
//這個軟體是調通過了的,也載入到我的實驗扳上試過的

㈧ 單片機計時器

(65536-10000)/256 意思是:
括弧內的相減結果,即單片機定時器的預裝時間常數X,
X/256 意思是整除取商,目的是取X的二進制數高8位,裝入TH1;

X%256 意思是整除取余,目的是取X的二進制數低8位,裝入TL1。

閱讀全文

與單片機的計時相關的資料

熱點內容
如何截獲手機app連接的ip 瀏覽:330
冰箱壓縮機是否需要電容 瀏覽:344
python列表每一行數據求和 瀏覽:274
自己有一台伺服器可以玩什麼 瀏覽:656
社會學波普諾pdf 瀏覽:584
解壓做食物的小視頻 瀏覽:758
pdf怎麼單獨設置文件夾 瀏覽:474
業務邏輯程序員 瀏覽:659
addto新建文件夾什麼意思 瀏覽:160
有伺服器地址怎麼安裝軟體 瀏覽:659
安卓如何完全清除數據 瀏覽:690
安卓安卓證書怎麼信任 瀏覽:53
伺服器被攻擊如何解決 瀏覽:221
學霸變成程序員 瀏覽:881
c語言編譯錯誤fatalerror 瀏覽:441
ipv4內部伺服器地址怎麼分配 瀏覽:463
java線程安全的方法 瀏覽:952
重復命令畫梯形 瀏覽:164
在疫情就是命令 瀏覽:329
自己搭建一個什麼伺服器好玩 瀏覽:254