找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4568|回復: 0
打印 上一主題 下一主題
收起左側

單片機數(shù)碼管頻率計proteus仿真和源程序及ppt教程等

[復制鏈接]
跳轉到指定樓層
樓主
ID:137190 發(fā)表于 2016-9-27 12:07 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式



頻率計的ppt教程:


頻率計的ppt 仿真 程序等所有資料下載:
6位數(shù)顯頻率計數(shù)器.rar (248.34 KB, 下載次數(shù): 60)


一、MCS-51單片機定時器/計數(shù)器組成:
定時器/計數(shù)器0(T0):16位的加計數(shù)器
定時器/計數(shù)器1(T1):16位的加計數(shù)器
二、定時器/計數(shù)器的功能
對外部輸入信號的計數(shù)功能。定時器/計數(shù)器0(T0)的外來脈沖輸入端為P3.4;定時器/計數(shù)器1(T1)的外來脈沖輸入端為P3.5。
定時功能。定時器/計數(shù)器的定時功能也是通過計數(shù)實現(xiàn)的,它的計數(shù)脈沖是由單片機的片內振蕩器輸出經(jīng)12分頻后產(chǎn)生的信號,即為對機器周期計數(shù)。


在計數(shù)工作方式下,計數(shù)器的計數(shù)值范圍是:
          1~8192(2的13方)

當為定時工作方式時,定時時間的計算公式為:
         ( 8192 -計數(shù)初值)×晶振周期×12
或     ( 8192 -計數(shù)初值)×機器周期
其時間單位與晶振周期或機器周期相同。

如果單片機的晶振選為6.000MHz,則最小定時時間為:
     [8192—(8192—1)]×1/6×10-6×12=2×10-6(s)=2(us)
最長定時時間為:
     (8192—0)×1/6×10-6×12=16384×10-6(s)=16384(us)。


在工作方式1下,計數(shù)器的計數(shù)值范圍是:
          1~65536(2的16方)

當為定時工作方式1時,定時時間的計算公式為:
         (65536—計數(shù)初值)× 晶振周期×12
或     (65536—計數(shù)初值)× 機器周期
其時間單位與晶振周期或機器周期相同。

如果單片機的晶振選為6.000MHz,則最小定時時間為:
      [65536—(65536—1)]×1/6×10-6×12=2×10-6(s)=2(us)
最長定時時間為:
      (65536—0)×1/6×10-6×12=131072×10-6(s)=131072(us)


方式2與方式0、1的區(qū)別:
    工作方式0和工作方式1的最大特點就是計數(shù)溢出后,計數(shù)器為全0,因而循環(huán)定時或循環(huán)計數(shù)應用時就存在反復設置初值的問題,這給程序設計帶來許多不便,同時也會影響計時精度。
    工作方式2就具有自動重裝載功能,即自動加載計數(shù)初值,所以也有的文獻稱之為自動重加載工作方式。在這種工作方式中,16位計數(shù)器分為兩部分,即以TL0為計數(shù)器,以TH0作為預置寄存器,初始化時把計數(shù)初值分別加載至TL0和TH0中,當計數(shù)溢出時,不再象方式0和方式1那樣需要“人工干預”,由軟件重新賦值,而是由預置寄存器TH以硬件方法自動給計數(shù)器TL0重新加載。
      方式2在串口通訊時,常用作波特率發(fā)生器。


2.怎樣編制計數(shù)程序?

  首先必須對定時計數(shù)器進行初始化,然后再開啟定時或計數(shù)。簡單的總結一下,定時計數(shù)器的初始化包括以下內容。

(1)確定工作方式——對TMOD賦值;
如:任務中的MOV        TMOD,#06H指令,設定T0為計數(shù)器工作方式。
(2)預置定時計數(shù)器中計數(shù)的初值——直接寫入TH和TL;
如:任務中的MOV   TH0,#00H  兩條指令,設定計數(shù)初值。
            MOV          TL0,#00H

(3)根據(jù)需要開放定時器/計數(shù)器的中斷——對IE位賦值;
(4)啟動定時器/計數(shù)器;
如:任務中的SETB  TR0  指令
初值的計算方法
X=M-計數(shù)值
M是定時器的最大計數(shù)值。視工作方式不同而不同。

工作方式0: 13位定時/計數(shù)方式,因此,最多可以計到2的13次方,也就是8192次。

工作方式1: 16位定時/計數(shù)方式,因此,最多可以計到2的16次方,也就是65536次。

工作方式2和工作方式3:都是8位的定時/計數(shù)方式,因此,最多可以計到2的8次方,也說是256次。

預置值計算:  用最大計數(shù)量減去需要的計數(shù)次數(shù)即可。
通過上面的任務,我們掌握了計數(shù)程序的編制方法,下面我們再看看定時程序怎樣編制。
首先我們看一下下面的程序段。
           MOV     TMOD,#01H
        MOV           TL0,#00H  
        MOV     TH0,#4CH  
           SETB          TR0      
以上程序是任務一中的定時程序段,它的初始化過程和計數(shù)方式類似。


實例二:利用方式1定時
題目:用定時器T1,使用工作方式1,在單片機的P1.0輸出一個周期為2分鐘、占空比為1:1的方波信號。
解:周期為2分鐘,占空比為1:1的方波信號,只需要利用T1產(chǎn)生定時,每隔1分將P1.0取反即可。
由于定時器定時時間有限,設定T1的定時為50ms,軟件計數(shù)1200次,可以實現(xiàn)1分鐘定時。
編程步驟:
1、計算TMOD的值
       由于:GATE=0;M1、M0=0、1;C/T=0;
       所以:(TMOD)=10H
2、計算初值(單片機的振蕩頻率為12MHZ)
 所需要的機器周期數(shù):
                   n=(50000us/1us)=50000
  計數(shù)器的初始值:X=65536-50000=15536
            所以:(TH0)=3CH;(TL0)=0B0H


頻率計工作原理:
實現(xiàn)的方法:利用T0計數(shù)器對從T0輸入的脈沖進行計數(shù),利用T1工作于定時。每定時達到1秒鐘,取出計數(shù)器的值進行顯示。由于每秒鐘按鍵的按下次數(shù)不超過255次,所以只需要顯示TL0的內容即可。
步驟:
由于定時器的最大定時時間不能夠達到1秒鐘,我們設定T1定時100mS,每10次取一次計數(shù)值。
設定TMOD,TH1,TL1的內容,(fosc)=6MHz
      所以:(TMOD)=51H
                  (TH1)=3CH
                  (TL1)=0B0H

本章要求:
了解中斷源、中斷的功能、中斷系統(tǒng)的組成與功能、中斷優(yōu)先權管理、中斷響應條件、中斷響應過程、中斷嵌套等基本概念;
掌握MCS-51單片機的5個中斷源;掌握外部中斷的觸發(fā)方式,與的觸發(fā)方式有邊沿方式與電平方式兩種;
掌握定時器/計數(shù)器的計數(shù)脈沖來源,計數(shù)脈沖來自內部振蕩頻率的12分頻后的脈沖則稱為定時器方式,計數(shù)脈沖來自外部引腳則稱為計數(shù)器方式;
掌握中斷請求標志的清除方式,邊沿方式下的與、T0、T1的中斷請求標志是自動被清除的,而串行口的中斷是用戶通過軟件清除的,電平觸發(fā)的與還需要硬件的支持才能被清除;
掌握T0與T1的工作方式,以及各種方式的應用;
掌握TCON、SCON、IE、IP、TMOD等特殊功能寄存器的功能與應用;
掌握MCS-51單片機對各中斷源的響應條件與過程。


源程序:
  1. #include <AT89X52.H>
  2. unsigned char code dispbit[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
  3. unsigned char code dispcode[]={0x3f,0x06,0x5b,0x4f,0x66,
  4.                                0x6d,0x7d,0x07,0x7f,0x6f,0x00,0x40};
  5. unsigned char dispbuf[8]={0,0,0,0,0,0,10,10};
  6. unsigned char temp[8];
  7. unsigned char dispcount;
  8. unsigned char T0count;
  9. unsigned char timecount;
  10. bit flag;
  11. unsigned long x;
  12.   
  13. void main(void)
  14. {
  15.   unsigned char i;
  16.   
  17.   TMOD=0x15;
  18.   TH0=0;
  19.   TL0=0;
  20.   TH1=(65536-5000)/256;
  21.   TL1=(65536-5000)%256;
  22.   TR1=1;
  23.   TR0=1;
  24.   ET0=1;
  25.   ET1=1;
  26.   EA=1;
  27.   
  28.   while(1)
  29.    {
  30.      if(flag==1)
  31.        {
  32.          flag=0;
  33.          x=T0count*65536+TH0*256+TL0;
  34.          for(i=0;i<8;i++)
  35.            {
  36.              temp[i]=0;
  37.            }
  38.          i=0;
  39.          while(x/10)
  40.            {
  41.              temp[i]=x%10;
  42.              x=x/10;
  43.              i++;
  44.            }
  45.          temp[i]=x;
  46.          for(i=0;i<6;i++)
  47.            {
  48.              dispbuf[i]=temp[i];
  49.            }
  50.          timecount=0;
  51.          T0count=0;
  52.          TH0=0;
  53.          TL0=0;
  54.          TR0=1;
  55.        }
  56.    }
  57. }
  58.   
  59. void t0(void) interrupt 1 using 0
  60. {
  61.   T0count++;
  62. }
  63.   
  64. void t1(void) interrupt 3 using 0
  65. {
  66.   TH1=(65536-5000)/256;
  67.   TL1=(65536-5000)%256;
  68.   timecount++;
  69.   if(timecount==200)
  70.     {
  71.       TR0=0;
  72.       timecount=0;
  73.       flag=1;
  74.     }
  75.   P2=0xff;
  76.   P0=dispcode[dispbuf[dispcount]];
  77.   P2=dispbit[dispcount];
  78.   dispcount++;
  79.   if(dispcount==8)
  80.     {
  81.       dispcount=0;
  82.     }
  83. }
復制代碼
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復 返回頂部 返回列表