找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

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

單片機(jī)實(shí)驗(yàn) 定時(shí)器中斷程序和原理圖

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
原理圖
  1. include "reg52.h"                         //此文件中定義了單片機(jī)的一些特殊功能寄存器
  2. #include<intrins.h>         



  3. typedef unsigned int u16;          //對(duì)數(shù)據(jù)類(lèi)型進(jìn)行聲明定義
  4. typedef unsigned char u8;
  5. #define left 0
  6. #define right 1


  7. void switch_direction(u8 x);

  8. sbit k1=P3^2;  //定義按鍵K1
  9. sbit k2=P3^3;  //定義按鍵K2
  10. sbit k3=P3^5;  //定義按鍵K2
  11. u8 xianshi[8] = {0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
  12. char i;
  13. u16 j,m,flag_led,s_key;

  14. #define LED P2         


  15. void delay(u16 i)
  16. {
  17.         while(i--);        
  18. }


  19. void Int_Init()         //中斷配置                        外部中斷
  20. {
  21.         //設(shè)置INT0
  22.         IT0=1;//跳變沿出發(fā)方式(下降沿)
  23.         EX0=1;//打開(kāi)INT0的中斷允許。
  24.         
  25.         //設(shè)置INT1
  26.         IT1=1;//跳變沿出發(fā)方式(下降沿)
  27.         EX1=1;//打開(kāi)INT1的中斷允許。
  28.         
  29.                
  30.         EA=1;//打開(kāi)總中斷        
  31. }

  32. //定時(shí)器0中斷
  33. void Timer0Init()
  34. {
  35.         TMOD|=0X01;//選擇為定時(shí)器0模式,工作方式1,僅用TR0打開(kāi)啟動(dòng)。

  36.         TH0=0XFC;        //給定時(shí)器賦初值,定時(shí)1ms
  37.         TL0=0X18;        
  38.         ET0=1;//打開(kāi)定時(shí)器0中斷允許
  39.         EA=1;//打開(kāi)總中斷
  40.         TR0=1;//打開(kāi)定時(shí)器                        
  41. }

  42. void TIM1init(void)
  43. {     
  44.    TMOD=0x21;    //設(shè)置定時(shí)器1為工作方式2     
  45.    TH1=0xff;   //裝入初值     
  46.    TL1=0xff;         
  47.    EA=1;    //開(kāi)總中斷     
  48.    ET1=1;   //開(kāi)定時(shí)器中斷     
  49.    TR1=1;   //啟動(dòng)定時(shí)器1
  50. }



  51. void main()
  52. {        
  53.     LED = 0XFF;
  54.         flag_led = 0;
  55.         s_key = right;
  56.         Int_Init();  //        設(shè)置外部中斷1
  57.         Timer0Init();
  58.         TIM1init();
  59.         while(1)
  60.         {
  61.            if(flag_led == 0)
  62.            {
  63.              LED = xianshi[i];
  64.            }
  65.            else
  66.            {
  67.                      LED = 0xff;
  68.            }
  69.         }               
  70. }




  71. void Int0()        interrupt 0                //外部中斷0的中斷函數(shù)
  72. {
  73.         delay(1000);         //延時(shí)消抖
  74.         if(k1==0)
  75.         {
  76.                 s_key = left;
  77.         }
  78. }

  79. void Timer0() interrupt 1  //定時(shí)器1中斷服務(wù)函數(shù)
  80. {
  81.         static u16 j;
  82.         TH0=0XFC;        //給定時(shí)器賦初值,定時(shí)1ms
  83.         TL0=0X18;
  84.         j++;
  85.         if(j==1000)
  86.         {
  87.                 j=0;
  88.           switch_direction(s_key);        
  89.         }        
  90. }


  91. void Int1()        interrupt 2                //外部中斷1的中斷函數(shù)
  92. {
  93.         delay(1000);         //延時(shí)消抖
  94.         if(k2==0)
  95.         {
  96.                 s_key = right;
  97.         }
  98. }

  99. void Timer1() interrupt 3  //定時(shí)器1中斷服務(wù)函數(shù)
  100. {
  101.         TH1=0xff;
  102.         TL1=0xff;
  103.         if(k3==0)
  104.         {
  105.                 delay(1000);
  106.                 if(k3==0)
  107.                 {
  108.                     EX0 = ~EX0;
  109.                         EX1 = ~EX1;
  110.                         TR0 = ~TR0;
  111.                         flag_led = ~flag_led;
  112.                 }
  113.         }
  114.                  
  115.         
  116. }


  117. void switch_direction(u8 x)
  118. {
  119.   if(x == 0)
  120.   {
  121.     i--;
  122.   }
  123.   else
  124.   {
  125.     i++;
  126.   }
  127.   if(i==8)
  128.    {
  129.            i = 0;
  130.    }
  131.   if(i == -1)
  132.    {
  133.           i = 7;
  134.    }

  135. }
復(fù)制代碼





分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表