首页 > 代码库 > STC51六中中断配置点亮一个LED

STC51六中中断配置点亮一个LED

一.外部中断0、1(分别點亮一個LED)

 /********************************************************************************  标题:                  计数器中断实验                                       *#include <reg52.h>#include<intrins.h>sbit led1 = P0^0;sbit led2 = P0^1;void main(void){  // IT0=0;       //低电平触发   IT0=1;       //下降沿触发   EX0=1;   // IT1=0;       //低电平触发   IT1=1;       //下降沿触发   EX1=1;   EA=1;   while(1); }/********************************************************* INT0中断函数                                          *********************************************************/void  counter0(void) interrupt 0  using 1{     EX0=0;     led1=~led1;   EX0=1;}/********************************************************* INT1中断函数                                          *********************************************************/void  counter1(void) interrupt 2 using 2{      EX1=0;   led2=~led2;   EX1=1;}/********************************************************/

 

 

二.定时器计算器中断 0 (1S,LED灯闪烁)

 

#include <reg52.h>#include <intrins.h>typedef unsigned char uchar;typedef unsigned char uint;uint num1,num2;sbit led1=P2^2;void system_Ini(){     TMOD = 0x00; //选择模式0  13位计数 最大计数8192     // TH0=0x1C;   //12.000M  预装初值    //TL0=0x18;         TH0 = (8192 - 1000)/32;     TL0 = (8192 - 1000)%32    ;     IE = 0x8A;   //中断         TR0  = 1;    //开启T0定时器}void main(){    system_Ini();    while(1);    }void T0zd(void) interrupt 1      //3定时器1的中断号  1定时器0的中断号 0外部中断1 2外部中断2  4串口中断{     //TH0 = 0xFc;    //12.000     //TL0 = 0x18;    TH0 = (8192 - 1000)/32    ;    TL0 = (8192 - 1000)%32;    num1++;    if(num1>100)    {        num1=0;        num2++;        if(num2>10)        {num2=0;P2=~P2;}        }     } 

 

三.定时器计算器中断 1(1S,LED灯闪烁)

  #include <reg52.h>#include <intrins.h>typedef unsigned char uchar;typedef unsigned char uint;uint USE_C;void  main(){    TMOD=0x10;   //定时/计数器1工作于方式1    TH0=0x4C;     //定时器初始值    TL0=0x00;    //50ms定时常数    //THO=(65536-45872)/256;   11.0592MHZ    //TLO=(65536-45872)%256;    EA=1;        //开总中断    ET1=1;       //允许定时/计数器1 中断    TR1=1;       //启动定时/计数器1 中断     while(1);} /*********************************************************  中断服务函数**********************************************************/void Time1(void) interrupt 3 // using 0{   TH1=0x4c;               //50ms定时   TL1=0x00;   if (++USE_C == 20)      //每隔1秒发声   { P2=~P2;     USE_C = 0;   }   }

 

四.定时器计算器中断 2(1S,LED灯闪烁)

 

 #include <reg52.h>#include <intrins.h>typedef unsigned char uchar;typedef unsigned int uint;uint num;void main()             // 该中断计数循环3686(晶振11.0592MHZ)次是一秒4000次(12MHZ){    TMOD=0x02;    TH0=6;    TL0=6;         //当低八位记满溢出 TF0标指位为 1 反应给    CPU 申请中断 同时TH0 中数组                       //自动装入(复制)TL0中    EA=1;    ET0=1;    TR0=1;    while(1)    {      if(num==4000)    //     若为11.0592 num=3686      { P2=~P2;        num=0;      }    }}void T0_time() interrupt 1 using 2    {        num++;    }    

 

 

五.定时器计算器中断 3(1S,0.5s,LED灯闪烁)

 

#include <reg52.h>#include <intrins.h>typedef unsigned char uchar;typedef unsigned int uint;sbit led1=P2^1;sbit led2=P2^2;uint num1,num2;void main(){    TMOD=0X03;    TH0=6;    TL0=6;    EA=1;    ET0=1;    ET1=1;    TR0=1;    TR1=1;     while(1)    {        if(num1>=4000)//3686 11.0592         {            num1=0;            led1=~led1;        }        if(num2>=2000)//1843 11.0592         {            num2=0;            led2=~led2;        }                }    }void TLO_time() interrupt 1     //低八位用定时器计数器中断0的中断源{    TL0=6;    num1++;}void TH0_time() interrupt 3    //高八位用定时器计数器中断1的中断源{    TH0=6;    num2++;}     

 

六.定时器计数器中断 0 (计数器中断)

/********************************************************************************  标题:                  计数器中断实验                                       **                                                                               **                                                                               **  实验说明:用单片机产生的脉冲波,作为T0外部事件的脉冲输入,对于HC6800EM3的型 **            号,可以自带的脉冲发生器作为T0外部事件的脉冲输入                    **  连接方法:参开图片或视频                                                       **********************************************************************************                                                                                   ** 请学员认真消化本例程,掌握定时器/计数器中断使用                              *********************************************************************************/#include <reg52.h>#include<intrins.h>sbit LED = P0^0;sbit Pulse = P1^0;void Timer0() interrupt 1{   TH0 = 0Xa0;  //给计数器装初值   TL0 = 0X00;      LED = ~LED;    //LED灯取反}void main(){  P0 = 0XFF;                    TMOD = 0X05;    //选用计数模式和 选用模式1  TH0 = 0Xa0;   //给计数器装初值  TL0 = 0x00;  EA = 1;         //开发所有中断  ET0 = 1;       //开启定时器T0中断  TR0 = 1;         //启动T0定时器    while(1)    {     Pulse = 0 ;           _nop_();   //空指令函数 用于产生方波    _nop_();    _nop_();    _nop_();    Pulse = 1 ;    _nop_();    _nop_();    _nop_();    _nop_();    }}

 

写于2012年年末

 

 

 

 

 

 

 


 

STC51六中中断配置点亮一个LED