日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

单片机计数器中断T1 T0

發布時間:2023/12/20 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 单片机计数器中断T1 T0 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

51中常用的是16位計數器,最大值是65535,如果要計數1000次,那么計數器賦值應該為65535-1000+1(達到最大值后要再加一次才行。)計數器的初值是放在兩個8位寄存器中,分別是TH0, TL0(計數器0的高8位和低8位),計數器1使用的是TH1,TL1,原理相同。
65535-1000+1=64536=0xFC18
所以
TH0=0xFC;
TL0=0x18;

上面我們讓定時器計數1000次,但是我們要的是固定時長,而不是固定次數,一千次是多長時間呢? 我們需要計算計數器加1需要的時間。

計數器加1需要一個機器周期,而一個機器周期等于6個狀態周期,12個震蕩周期。如果51芯片的頻率是12MHz,那么震蕩周期就是1/12M秒,而機器周期就是12×1/12M秒,就是1/1M秒,即1/1000000秒,也就是1微秒。

計數1000次就是1毫秒了;

前四位 T1 后四位 T0
GATE: 為1時,與INT0/1引腳共同控制計數器0/1。我們默認使用0,不受INT0/1控制;
C/T: C為Couter,計數器模式,T為Timer,定時器模式;T上面有橫杠,說明是0有效;Timer模式的時候,使用系統內部時鐘輸入;Couter模式的時候,使用T0/1引腳輸入;

計數器每計滿一次 執行一次這個函數
執行1000次之后 1000*1ms =1s 進行翻轉led

所以實現了 每1s翻轉led燈

#include<reg52.h> typedef unsigned char u8; typedef unsigned int u16;sbit LED1=P0^0; sbit LED2=P0^1;void timerInit() {TMOD=0x11;EA=1; ET0=1; ET1=1;TR0=1;TR1=1;LED1=0;LED2=0; // 65535-100+1// 65434 0xff9aTH0=0xFC;TL0=0x18;TH1=0xFC;TL1=0x18; } void timer0() interrupt 1 {static u16 counter=0;if(counter==1000){LED1=~LED1;counter=0;}counter++;TH0=0xFC;TL0=0x18; } void timer1() interrupt 3 {static u16 counter=0;if(counter==1000){LED2=~LED2;counter=0;}counter++;TH1=0xFC;TL1=0x18; }void main() {timerInit();while(1); }

總結

以上是生活随笔為你收集整理的单片机计数器中断T1 T0的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。