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

專注電子技術學習與研究
當前位置:單片機教程網 >> MCU設計實例 >> 瀏覽文章

定時計數器T0作定時使用技術(閃爍燈)

作者:89s51   來源:不詳   點擊數:  更新時間:2007年05月16日   【字體:

1.      實驗任務

用AT89S51的定時/計數器T0產生2秒鐘的定時,每當2秒定時到來時,更換指示燈閃爍,每個指示閃爍的頻率為0.2秒,也就是說,開始L1指示燈以0.2秒的速率閃爍,當2秒定時到來之后,L2開始以0.2秒的速率閃爍,如此循環下去。0.2秒的閃爍速率也由定時/計數器T0來完成,也就是一個閃爍燈。

2.      電路原理圖

圖4.16.1

3.      系統板硬件連線

(1.       把“單片機系統”區域中的P1.0-P1.3用導線連接到“八路發光二極管指示模塊”區域中的L1-L4上

4.      程序設計內容

(1.       由于采用中斷方式來完成,因此,對于中斷源必須它的中斷入口地址,對于定時/計數器T0來說,中斷入口地址為000BH,因此在中斷入口地方加入長跳轉指令來執行中斷服務程序。書寫匯編源程序格式如下所示:

                            ORG 00H

                            LJMP START

                            ORG 0BH        ;定時/計數器T0中斷入口地址

                            LJMP INT_T0

START:               NOP          ;主程序開始

                            .

                            .

 

INT_T0:             PUSH ACC                  ;定時/計數器T0中斷服務程序

                            PUSH PSW

                            .

                            .

                            POP PSW

                            POP ACC

                            RETI                   ;中斷服務程序返回

                            END

(2.       定時2秒,采用16位定時50ms,共定時40次才可達到2秒,每50ms產生一中斷,定時的40次數在中斷服務程序中完成,同樣0.2秒的定時,需要4次才可達到0.2秒。對于中斷程序,在主程序中要對中斷開中斷。

(3.       由于每次2秒定時到時,L1-L4要交替閃爍。采用ID來號來識別。當ID=0時,L1在閃爍,當ID=1時,L2在閃爍;當ID=2時,L3在閃爍;當ID=3時,L4在閃爍

5.      程序框圖

T0中斷服務程序框圖

 

 

 

 

 

 

 

 

 

主程序框圖

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

圖4.16.2

6.      匯編源程序

TCOUNT2S                EQU 30H

TCNT02S                    EQU 31H

ID                                 EQU 32H

                                      ORG 00H

                                      LJMP START

                                      ORG 0BH

                                      LJMP INT_T0

START:                        MOV TCOUNT2S,#00H

                                     MOV TCNT02S,#00H

                                     MOV ID,#00H

                                      MOV TMOD,#01H

                                      MOV TH0,#(65536-50000) / 256

                                      MOV TL0,#(65536-50000) MOD 256

                                      SETB TR0

                                      SETB ET0

                                      SETB EA

                                      SJMP $

INT_T0:                      MOV TH0,#(65536-50000) / 256

                                      MOV TL0,#(65536-50000) MOD 256

                                      INC TCOUNT2S

                                      MOV A,TCOUNT2S

                                      CJNE A,#40,NEXT

                                      MOV TCOUNT2S,#00H

                                      INC ID

                                      MOV A,ID

                                      CJNE A,#04H,NEXT

                                      MOV ID,#00H

NEXT:                          INC TCNT02S

                                      MOV A,TCNT02S

                                      CJNE A,#4,DONE

                                      MOV TCNT02S,#00H

                                      MOV A,ID

                                      CJNE A,#00H,SID1

                                      CPL P1.0

                                      SJMP DONE

SID1:                            CJNE A,#01H,SID2

                                      CPL P1.1

                                      SJMP DONE

SID2:                           CJNE A,#02H,SID3

                                      CPL P1.2

                                      SJMP DONE

SID3:                            CJNE A,#03H,SID4

                                      CPL P1.3

SID4:                            SJMP DONE

DONE:                        RETI

                                      END

7.      C語言源程序

#include <AT89X51.H>

 

unsigned char tcount2s;

unsigned char tcount02s;

unsigned char ID;

 

void main(void)

{

  TMOD=0x01;

  TH0=(65536-50000)/256;

  TL0=(65536-50000)%6;

  TR0=1;

  ET0=1;

  EA=1;

 

  while(1);

}

void t0(void) interrupt 1 using 0

{

  tcount2s++;

  if(tcount2s==40)

    {

      tcount2s=0;

      ID++;

      if(ID==4)

        {

          ID=0;

        }

    }

  tcount02s++;

  if(tcount02s==4)

    {

      tcount02s=0;

      switch(ID)

        {

          case 0:

            P1_0=~P1_0;

            break;

          case 1:

            P1_1=~P1_1;

            break;

          case 2:

            P1_2=~P1_2;

            break;

          case 3:

            P1_3=~P1_3;

            break;

        }

    }

關閉窗口
主站蜘蛛池模板: 三级av在线 | 欧美精品久久久久 | 国产一区二区 | 日韩中文一区二区三区 | 精品综合久久 | 精品久久久久久久人人人人传媒 | 一级黄色片日本 | 国产91精品在线 | 一二三区av | 国产精品一区二区三区在线 | 欧美八区 | 亚洲精品一区二区三区蜜桃久 | 国产精品视频区 | 精品视频一区二区三区在线观看 | 青青草视频网 | 91天堂 | 人人九九精 | 伦理一区二区 | 久久精品网 | 久久精品91久久久久久再现 | 欧美精品网站 | 日本人爽p大片免费看 | 色综合久久天天综合网 | 精品www | 日日骚视频 | 日中文字幕在线 | 在线黄 | 91影片| 青青草视频网站 | 日日骚网 | 国产成人免费一区二区60岁 | 国产乱人伦精品一区二区 | 一二三区在线 | 精品一区二区三区在线观看国产 | 中文字字幕一区二区三区四区五区 | 国产一区二区三区在线视频 | 久久久久国产一区二区三区 | 97久久精品午夜一区二区 | 亚洲成人国产综合 | 激情欧美一区二区三区中文字幕 | 五月激情婷婷六月 |