找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2354|回復(fù): 9
收起左側(cè)

初學(xué)單片機(jī),在定時器一個實(shí)驗(yàn)中有些不懂得地方

[復(fù)制鏈接]
ID:311807 發(fā)表于 2018-4-19 17:22 | 顯示全部樓層 |閱讀模式
這是我的原碼:
#include <reg52.h>
#define uchar unsigned char
uchar i=50;

void main(void)
{   
   TMOD=0x01;
   TH0=0xee;
   TL0=0x00;
   EA=1;
   ET0=1;
   P1=0;
   TR0=1;
   while(1);//循環(huán)等待中斷,讓cpu一直執(zhí)行當(dāng)前程序。
}

void int0() interrupt 1
{
   TH0=0xee;
   TL0=0x00;
   i--;
   if(i<=0)
   {
           P1=~P1;
           i=100;
   }
}

這是我不懂的地方:
i--;
   if(i<=0)
   {
           P1=~P1;
           i=100;
   }
為什么要設(shè)置一個i的變量去控制P1的值,而不是直接將中斷函數(shù)寫成這樣:
void int0() interrupt 1
{
   TH0=0xee;
   TL0=0x00;
   P1=~P1;
}

求各位大佬告知。!


回復(fù)

使用道具 舉報

ID:157573 發(fā)表于 2018-4-19 20:04 | 顯示全部樓層
初學(xué)一般是點(diǎn)亮LED燈,這里就當(dāng)是點(diǎn)亮LED燈。首先,人眼有滯留效應(yīng),正如電影播放時每隔40ms播放一幅圖片,但是人眼看上去卻是連續(xù)的。同理,如果你的目的是做出“LED燈一閃一閃”的效果,通常理解,我點(diǎn)亮一下,再熄滅一下,在點(diǎn)亮一下,再……,以此循環(huán)就可以達(dá)到效果了,但是兩次點(diǎn)亮中間間隔要多長時間呢?如果太小(比如小于40ms),那么你看到的是一直亮著,跟放電影原理一樣。程序中,TMOD=1;是設(shè)置為16位計數(shù)器,從TH0與TL0知,程序設(shè)置從0計數(shù)到0xee00,十進(jìn)制就是0到60928,若使用晶振為12MHz,則計數(shù)器每計數(shù)一次為1us,那么一次中斷計數(shù)60928次,則一次中斷間隔時間為60928us,約為60ms,間隔時間太短,人眼是看不到它閃的。中間計數(shù)50次,就是增加時間間隔,50*60=3000ms=3s,所以你看到大約3s閃一次。

評分

參與人數(shù) 1黑幣 +80 收起 理由
admin + 80 回帖助人的獎勵!

查看全部評分

回復(fù)

使用道具 舉報

ID:310442 發(fā)表于 2018-4-19 18:00 | 顯示全部樓層
因?yàn)檫@個50是讓你定時器中斷50次的計數(shù)   最后總的定時時間就是中斷一次的時間乘50.    如果不這樣   以單片機(jī)定時器的最大計數(shù)65536也就是65ms  看不出實(shí)驗(yàn)效果

評分

參與人數(shù) 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎勵!

查看全部評分

回復(fù)

使用道具 舉報

ID:261871 發(fā)表于 2018-4-19 18:27 | 顯示全部樓層
定時器1 的上限
回復(fù)

使用道具 舉報

ID:261871 發(fā)表于 2018-4-19 18:27 | 顯示全部樓層
ltpsweet 發(fā)表于 2018-4-19 18:00
因?yàn)檫@個50是讓你定時器中斷50次的計數(shù)   最后總的定時時間就是中斷一次的時間乘50.    如果不這樣   以單 ...

定時時間太短了
回復(fù)

使用道具 舉報

ID:311807 發(fā)表于 2018-4-19 18:47 | 顯示全部樓層
ltpsweet 發(fā)表于 2018-4-19 18:00
因?yàn)檫@個50是讓你定時器中斷50次的計數(shù)   最后總的定時時間就是中斷一次的時間乘50.    如果不這樣   以單 ...

懂了,謝謝大佬
回復(fù)

使用道具 舉報

ID:311967 發(fā)表于 2018-4-19 20:29 | 顯示全部樓層
原程序是設(shè)計的每進(jìn)100次中斷才進(jìn)行一次電平翻轉(zhuǎn),如果按你的改法,就變成了每次進(jìn)中斷都會翻轉(zhuǎn)一次電平了

評分

參與人數(shù) 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎勵!

查看全部評分

回復(fù)

使用道具 舉報

ID:46065 發(fā)表于 2018-4-19 20:33 | 顯示全部樓層
第一次是50次倒計數(shù),之后是100次倒計數(shù),就是定時器每計數(shù)100次P1取反一次。

評分

參與人數(shù) 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎勵!

查看全部評分

回復(fù)

使用道具 舉報

ID:213173 發(fā)表于 2018-4-19 20:48 | 顯示全部樓層
ltpsweet 發(fā)表于 2018-4-19 18:00
因?yàn)檫@個50是讓你定時器中斷50次的計數(shù)   最后總的定時時間就是中斷一次的時間乘50.    如果不這樣   以單 ...

這樣設(shè)置定時器是5ms中斷一次,i--;   if(i<=0) 是為了得到500ms  P1翻轉(zhuǎn)一次。

評分

參與人數(shù) 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎勵!

查看全部評分

回復(fù)

使用道具 舉報

ID:293933 發(fā)表于 2018-4-20 17:38 | 顯示全部樓層
那uchar i的初值為什么不直接設(shè)為100呢,有什么意義,會用在什么場景中
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表