久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 12951|回復(fù): 1
打印 上一主題 下一主題
收起左側(cè)

pic16f887 TMR0計(jì)時器講解及準(zhǔn)確定時程序

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
前言
TMR0 計(jì)時器
實(shí)際上 TMR0 計(jì)時器的應(yīng)用很廣。很少程式不用到它。它非常方便,而且很容易用來撰寫產(chǎn)生任意期 間的脈沖的程式或副程式(subroutine)、測量時間,或是計(jì)數(shù)外部脈沖 (事件),幾乎沒有什么限制。
TMR0 計(jì)時器模組是 8 位元的計(jì)時器/計(jì)數(shù)器,具有下列特性:
● 8 位元計(jì)時器/計(jì)數(shù)器;
● 8 位元 prescaler (與 Watchdog timer 共享);
● 可程式的內(nèi)部或外部時脈來源 (Programmable internal or external clock sources);
● 溢位中斷 (Interrupt on overflow); 及
● 可程式選擇的外部時脈邊緣 (Programmable external clock edge selection)。

原理與暫存器設(shè)定說明
原理:
OPTION_REG 暫存器

可以看出,PSA 位元的邏輯狀態(tài)決定 prescaler 指派給 TMR0 或是 watchdog timer。
另外,值得一提的是:
● 當(dāng) prescaler 指派給 TMR0 時,任何對 TMR0 暫存器的寫入動作將會清除 prescaler;
● 當(dāng) prescaler 指派給 watchdog timer 時,CLRWDT 指令將同時清除 prescaler 與 WDT;
● 當(dāng) TMR0 作為計(jì)時器用時,對 TMR0 的寫入動作不會讓脈沖計(jì)數(shù)立即開始,而會有兩個指令周期 的延遲。因此,有必要調(diào)整寫到TMR0 的值;
● 當(dāng)微控制器被設(shè)成睡眠模式時,振蕩器便會關(guān)閉。因?yàn)闆]得計(jì)數(shù)脈沖,所以就不會發(fā)生溢位 (overflow)。這就是為什么 TMR0 溢位不能將微控制器從睡眠模式中喚醒的原因;
● 當(dāng)用作不含 prescaler 的外部時脈計(jì)數(shù)器時 (external clock counter),最小的脈沖長度或兩個脈 沖之間的間歇必須是 2 Tosc + 20 nS. Tosc 是振蕩訊號周期 (oscillator signal period);
● 當(dāng)用作含 presacler 的外部計(jì)數(shù)器時,最小的脈沖長度或兩個脈沖之間的間歇必須是 10nS;
● 8 位元 prescaler 暫存器不提供給使用者,這表示不能直接讀寫 prescaler 暫存器;
當(dāng)從 TMR0 將 prescaler 指派給 watchdog timer 時,必須按下列指令次序執(zhí)行以免發(fā)生重置 (reset):
view source    print?
01 BANKSEL TMR0   02 CLRWDT ;CLEAR WDT   03 CLRF TMR0 ;CLEAR TMR0 AND PRESCALER    04 BANKSEL OPTION_REG   05 BSF OPTION_REG,PSA ;PRESCALER IS ASSIGNED TO THE WDT        06 CLRWDT ;CLEAR WDT   07 MOVLW b’11111000’ ;SELECT BITS PS2,PS1,PS0 AND CLEAR      08 ANDWF OPTION_REG,W ;THEM BY INSTRUCTION “LOGICAL AND”  09 IORLW b’00000101’ ;BITS PS2, PS1, AND PS0 SET        10 MOVWF OPTION_REG ;PRESCALER RATE TO 1:32
● 同樣的,當(dāng)從 WDT 將 prescaler 指派給 TMR0 時,必須按下列指令次序執(zhí)行以免發(fā)生重置:
view source    print?     1 BANKSEL TMR0   2 CLRWDT ;CLEAR WDT AND PRESCALER      3 BANKSEL OPTION_REG
4 MOVLW b’11110000’ ;SELECT ONLY BITS PSA,PS2,PS1,PS0               5 ANDWF OPTION_REG,W ;CLEAR THEM AFTERWARDS BY INSTRUCTION 6 ;“LOGICAL AND”         7 IORLW b’00000011’ ;PRESCALER RATE IS 1:16    8 MOVWF OPTION_REG
暫存器設(shè)定說明
為了恰當(dāng)?shù)厥褂?TMR0,必須:
1、要選擇模式:
● 計(jì)時器模式是借由 OPTION_REG 暫存器的 T0CS 來選擇。 (T0CS: 0=timer, 1=counter);
● 使用的時候,必須借由清除 OPTION_REG 暫存器的 PSA 位元將 prescaler 指派給 TMR0。 prescaler 比率 (Prescaler rate) 的設(shè)定是透過OPTION_REG 暫存器的 PS2-PS0 位元,及
● 使用中斷時,必須設(shè)定 INTCON 暫存器的 GIE 與 TMR0IE 位元。
2、要測量時間:
● 重設(shè) TMR0 暫存器或?qū)懭胍阎闹档?TMR0;
● 經(jīng)過時間 (單位是毫秒,當(dāng)使用 4 MHz 石英晶體時) 的獲得方式是透過讀取 TMR0 暫存器
● 每當(dāng) TMR0 暫存器溢位時,INTCON 暫存器的 TMR0IF 旗號便會自動豎起來,如果中斷有啟用, 會引發(fā)中斷。
3、要計(jì)數(shù)脈沖:
● 位于 RA4 腳位,要計(jì)數(shù)的脈沖極性 (polarity) 的選擇是透過設(shè)定 OPTION_REG 暫存器的 T0SE 位元 (T0SE: 0=負(fù)向緣, 1=正向緣); 及
● 脈沖數(shù)可從 TMR0 暫存器中取得。如同計(jì)時器模式,presacler 和中斷的用法是一樣的。

三、程式與電路圖
程式:
// FOSC=16MHz  Fcy=4Mhz  Tcy=1/Fcy
#include
__CONFIG ( FOSC_HS & WDTE_OFF & PWRTE_OFF & MCLRE_ON & CP_OFF & CPD_OFF &  BOREN_OFF &     IESO_OFF  &  FCMEN_OFF & LVP_OFF ); //配置位元設(shè)置為外接晶振
__CONFIG ( BOR4V_BOR40V & WRT_OFF );
unsigned char data=0;//定義變數(shù)data并賦值為0
main()
{  
unsigned  int i=0;//定義i為無符號整形并賦值為0
   T0CS=0;   // 選通Fosc/4
   PSA=0;    //設(shè)定為TIMER0,而不是WDT
   PS2=0; //1:16 預(yù)除4倍,數(shù)完250=4MHz/1*250=1ms
   PS1=1;//PS2,PS1,PS0除頻設(shè)置
PS0=1;
   T0IF=0;//設(shè)置溢位初始值為0
   TMR0=6; //預(yù)設(shè)TMR0=6,運(yùn)行250次會進(jìn)位
TRISD=0;// 埠初始化D0--D7設(shè)置為輸出
PORTD=0; //D輸出低電頻,8LED全滅掉
data=0b00000001;//data賦值為1
   while(1)       // 主回圈必須是閉環(huán)
{
      if(T0IF==1)//如果溢位為1則執(zhí)行if下語句
{
           T0IF=0;    //if成立將溢位再次置0
           i++;         //i=i+1
            if(i==1000)   //i=1000時執(zhí)行下面語句
{
                    i=0;    //i重新置0,進(jìn)行下一輪計(jì)時
data=data<<1;   //data左移1
if(data==0)   //如果data=0時執(zhí)行下面語句
data=0b00000001;   //data重新置為1
                       PORTD=data;  //D埠輸出資料為data
                       TMR0=6;//使TMR0等于6
              }
         }
   }
}



電路圖

結(jié)論





程序打包下載:http://www.zg4o1577.cn/bbs/dpj-50261-1.html

評分

參與人數(shù) 1黑幣 +10 收起 理由
YJGG + 10 很給力!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏2 分享淘帖 頂 踩

相關(guān)帖子

回復(fù)

使用道具 舉報

沙發(fā)
ID:23606 發(fā)表于 2016-5-17 07:06 | 只看該作者
謝謝樓主分享!
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 国久久 | 日韩成人免费视频 | 亚洲精品在线视频 | 伊人久操| 一本久久a久久精品亚洲 | 天堂一区二区三区四区 | 亚洲网站在线观看 | 色婷婷九月 | 国产日韩久久 | 日韩免费av网站 | 欧美一区二区三区在线观看视频 | 亚洲综合在线视频 | 成人精品在线观看 | 国产高清在线观看 | 国产精品久久久久久久毛片 | www.99热这里只有精品 | 国产成人免费视频网站高清观看视频 | 天天弄 | 国产一级片 | 黄色av网站在线免费观看 | 中文字幕第二区 | www.国产日本 | 国产一区二区精品在线 | 亚洲第一天堂 | 日本激情视频网 | 91精品免费视频 | 日韩欧美国产精品一区二区 | 韩国毛片一区二区三区 | 欧美精品一区三区 | 欧美精品二区 | 亚洲美女在线视频 | 欧美视频一区 | 国产欧美一区二区三区另类精品 | 久久久国产一区二区 | 午夜影院黄 | 免费成人国产 | 国产精品久久九九 | 亚洲成人网在线观看 | 国产精品成人国产乱一区 | 日韩一区二区三区在线观看 | 一区二区三区视频在线观看 |