-
拿起第乙個感應; 以第二個感測器為例。 至於LED顯示程式,很簡單,只需編寫乙個子程式即可。 基礎程式就到此為止,但根據實際情況自己新增也有其他可能,程式必須依次經過兩點,否則程式會陷入無休止的迴圈。
你可以自己寫乙個計時器跳出來。
main()
int i=0;
int cnt;
while(1)
p0=0xff;
i=p0;i=i&0x03;
if(i==1)
while(1)
i=p0&0x02;
if(i==2)
cnt++;
leddisp(cnt);
break;
if(i==2)
while(1)
i=p0&0x01;
if(i==1)
cnt--;
leddisp(cnt);
break;
-
什麼意思 1 表示進來加一 2 表示留減 1 r1 代表 1 個感測器,當 r1 來到 h 時,表示 r2 代表 2 個感測器,r2 來的時候 h 表示它留下了數字管字元的第乙個定義 led=
main()
int i=0;
while(1)
if(r1) r1 優先。
if(r2)
i++if(r2) r2 優先。
if(r1)
i++p0=led[i];
-
樓上錯了,lz表示人進出時,會有兩個感測器發出訊號,即1在門外,2在門內。
在:先令 1 傳送訊號,然後 2 先令傳送訊號,人進入。
出局:先令 2 傳送訊號,然後 1 傳送訊號,人出局。
-
這就是我們之前做過的,也就是清點電梯樓層的程式,比較簡單。
-
51微控制器是微控制器的基本入門級微控制器,還是應用最廣泛的微控制器。
51 MCU的時序 計數器的概念。
在微控制器中,脈衝計數和時間的關係非常密切,每輸入乙個脈衝,計數器的值就會自動累積1,只要相鄰兩個計數脈衝之間的時間間隔相等,計數值就代表時間的流逝,因此,微控制器中的定時器和計數器實際上是相同的物理電子元件, 但是計數器記錄的是微控制器外部發生的事情(接收外部脈衝),定時器是微控制器本身提供的非常穩定的計數器,這個穩定的計數器是連線在微控制器上的晶體振盪器元件;MCS-51微控制器的晶體振盪器經過12次分頻後提供給微電腦。 晶體振盪器的頻率非常精確,因此微控制器計數脈衝之間的時間間隔也非常準確。
51.微控制器計數器的定時工作原理。
加1計數器輸入端有兩個計數脈衝,乙個由系統的時鐘振盪器輸出脈衝通過12格傳送; 一種是具有 T0 或 T1 引腳輸入的外部脈衝源。
當用作定時器時,定時器對8051微控制器片上振盪器輸出12次後脈衝數進行計數,即定時器t0 t1的暫存器值每機週期自動累加1,直至溢位,溢位後從0開始繼續計數; 因此,定時器的解像度是時鐘振盪頻率的1 12;
當用作計數器時,外部脈衝訊號通過引腳 t0 ( 或 t1 () 進行計數,當輸入外部脈衝訊號從 1 到 0 發生負跳躍時,計數器值自動增加 1,並且由於需要 2 個機器週期才能檢測到從 1 到 0 的下降沿,因此需要將要取樣的電平保持至少乙個機器週期。 當晶體振盪器頻率為12MHz時,最大計數頻率不超過1 2MHz,即計數脈衝的週期應大於2微秒。 計數器的最高頻率一般為時鐘振盪頻率的1 24;
可以看出,無論定時器或計數器是否工作,定時器 T0 和 T1 都不會占用 CPU 的時間,除非定時器計數器 T0 和 T1 溢位,這可能會導致 CPU 中斷並執行中斷處理程式。 因此,定時器計數器是微控制器中乙個高效、靈活的元件。
-
可以使用51微控制器的計數器t0和t1,例如,使用計數器0 t0的外部計數脈衝輸入進行計數,當計數到100個脈衝時,觸發中斷。 進入 Count Service Interrupt 程式。
-
他只是乙個單位,但這只是乙個位址。
舉個通俗的例子,假設你是一家網咖唯一的網路管理員,你的任務是負責網咖裡600臺電腦的檢查。
上班時,從1號電腦檢查,有問題就修理,沒問題就檢查2號,然後是3號......
在檢查8號機的時候,8號車主告訴你19號機有問題,這時你離開8號機後,不是去9號機,而是去19號機,19號機處理完畢後,19號機主告訴你113號機有問題, 這時你去找113號機,處理完113號機後,113號機主沒有給你其他機主的資訊,然後,你回到9號機上處理,然後是10號機,然後是11號機......
雖然這個例子不是100%符合微控制器的工作過程,但幾乎是一樣的。
這個例子中的“你”相當於乙個PC程式計數器,你是乙個人,然後你要處理600臺機器的問題,所以你所需要的只是600臺機器的數量,根據數量跳轉,並不意味著你必須增長到600臺機器。
同理,PC暫存器是乙個16位的單元,因為它是16位,所以可以儲存的數字是0---65535,總共65536位。 所以,我把程式空間做成 65536 個單元,每個單元都有編號,我只需要給 PC 編號,我不需要 PC 長那麼大。
-
當發生跳轉時,內部邏輯電路強制將跳轉位址寫入PC
有很多程式指令會影響 PC 跳轉。
但結構是相似的。
-
一樓的方法對於一般櫃檯是不可行的,因為櫃檯在中斷時已經溢位。
有兩種方法可以達到房東想要的這個結果:
1.門空位,即tmod中的門,如果這個位為1,即定時器除了自身的TRX外,還由外部中斷控制,如果外部中斷為低電平,定時器就不能執行。
2.使用具有捕獲功能的計時器。 帶有 T2 定時器(如 AT89S52)的微控制器可以做到這一點,即當外部訊號引起中斷時,T2 可以停止定時器並讀出計數值。
比較這兩種方法,第一種方法可以在通用微控制器上執行,但它浪費了外部中斷資源。 第二種更方便,更省力,即微控制器應該稍微好一點。
PS:有很多微控制器具有捕獲功能。
-
微控制器計數只是為每個輸入訊號生成乙個中斷。
實際上,我們仍然需要在這個中斷程式中手動累積暫存器。
所以暫存器是由我們自己指定的。
-
具有51片微控制器16位時序。
計數器 1 (t1) 通常解釋為:
計數是 T1 是乙個可以容納 65536(十六位數字)滴水的盆,水在水龍頭下方一滴一滴地滴入盆中。 如果盆是空的,則當 65536 滴水用完時水溢位,再滴一滴水時水盆就滿了。 這就是停電發生的時候。
如果盆中已經裝滿了 65,500 滴水(即初始值),那麼在溢位之前只需要 36 滴水。
每一滴水都是乙個脈搏。 定時水滴的速度是機器週期,等於12個振盪週期(晶體振盪器的振盪頻率除以12),直接影響溢流時間。
-
如何掌握微控制器定時器計數器程式,我就不寫了。
這很正常,很難開始。
為了便於理解,我將以類比的形式進行說明。
1. 為什麼叫定時器計數器? 這是因為可以同時計算內部時鐘(定時器)和外部脈衝(計數器)。
2.例如,如果你有乙個水桶(相當於乙個計時器計數器),這個桶有一定的容量(計時器計數器使用兩個位元組來計時),現在從水池中取乙個碗,將水桶裝滿水(一碗水相當於乙個計時器計數脈衝),如果水滿了會怎樣? 溢位(相當於計時器計數器溢位)。 通常,我們會利用此溢位功能(有例外),因為它會通知您(帶有溢位標誌)。
微控制器定時器計數器為加號計數,兩位元組計數暫存器的最大個數為65535,多乙個計數單元將歸零,同時設定溢位標誌(開啟中斷也會造成中斷)。
4.因為是加號,所以你期望的計數值不一定從零開始,所以一定是“在底”(分配初始值)。
把它理順並消化,看看你是否理解。
編寫微控制器定時器計數器程式就是設定與微控制器定時器計數器相關的暫存器,上面的內容很容易理解。
-
當計數器計數時,它從低點數到高點。
也就是說,顫抖的墳墓是先數完滿的tl0,夠256,然後把1帶到th0。
th0 中的 1 表示 256,因此計數器的總數為 th0tl0。
計數器的值不能一次讀出,只能分別讀作 th0 和 tl0。
當其中乙個值被讀出時,另乙個可能正在趕上進位,因此讀出的兩個值是錯誤的。
只有當你讀了兩次,並且兩次相等時,才讀出的是正確的電流計數。
while(1)
無限迴圈。 th1
th0;第一次讀出來。
tltl0;
讀出另乙個。
th2th0;
重讀第乙個。
if(th1
th2)break;
如果它相等兩次,它就會跳出迴圈。
-
先說個題外話:老郭的讀書思路還是可以的,程式還真不敢恭維,看到杜拉和韋拉這兩個經典變數有點雞皮疙瘩。
1,0-255為256個數字,定時器從0到255計數,共計256個數字,不256256為0,這是溢位中斷的時間點(對於8位定時器或th);
2、其實上面的程式裡沒有if(th0==th0),這是你自己的理解,老郭的冰雹和原來的程式一樣。
while(1)
th1=th0;
th2=th0;
tl=tl0;
if(th1==th2)
break;
val=th1*256+tl;
return
val;雖然 th0 分別分配給 th1 和 th2,然後判斷這兩個變數(記住這是乙個變數,相對來說,你不改變它,它的值是死的; 而th0是定時器的暫存器,只要定時器在執行,就總是源配置在變化)相等,但不等價於你理解的if(th0==th0),當th1=th0時;th2=th0;在這兩句話的中間,tl0 是乙個數字(假設你的單片賣家不除計時器),也就是說,雖然 th1 和 th2 也在讀取 th0 和同乙個暫存器,但讀取的值可能會不同,儘管這個機會很小,即當 tl0=255 跳到 0 時。 你的程式只是部分發布,我不明白它是用來做什麼的,但老郭的程式似乎是為了排除乙個好的時間點。 我不明白意圖,但你知道這個程式是做什麼用的,你可以自己思考。
3、第三個問題是概念問題,th0是定時器的高位,tl0在進入1之前去256個數字,th0加1表示定時器去256個數字。整個表示式 val 表示計算計時器從 0 開始就走了幾個,至於這個是幹什麼用的,也不知道,它的初始化是什麼,上面的程式裡沒人,你自己想想吧。
-
timez[0]-timez[2],是三個滴之間的時間差。
也就是說,滴兩滴所需的時間。 單位,大概是毫秒?
2400 (timez[0]-timez[2]),這是掉落 4800 滴所需的時間。
如果你真的想學習,你不需要買開發板。 找到乙個最小的系統板,然後學習一些東西,購買元件並自己構建小電路。 自己經營電子市場,自己搭電路,為了知道問題,為了學習一些東西,買一塊開發板,按照說明書上的電路,然後把程式放進去,然後程式基本理解了,這不叫學習...... >>>More
這東西不就是乙個顯示16位數字的數碼管嗎? 提示您 16 次到達那裡,在您想按下停止按鈕後鬆開。 如果是這樣,則該過程可供參考: >>>More