×
单片机 > 单片机程序设计 > 详情

C51入门2,定时器和中断应用

发布时间:2020-06-19 发布时间:
|
实验一:定时器中断闪灯

程序:

#define uchar unsigned char
#define uint unsigned int
#define ulong unsigned long

#include
//端口设置
sbit P10=P1^0;

sbit K1=P3^2;
char code dx516[3] _at_ 0x003b;
//主函数
void main(void)
{   
   TMOD=0x01;  //设置定时器0工作再方式1
   TR0=1;  //启动定时器0,TR0必须置1
   ET0=1;  //开定时器中断
   EA=1;   //开总中断
   while(1)  //死循环
  {
  ;
  }
}
  timer0() interrupt 1 //定时器0工作再方式1
  {TH0=0x00;   //写入定时器初始值0x0005
   TL0=0x01;
   P10=~P10;   //取反
}

实验二:精确定时1秒闪烁LED

程序:

//精确定时1秒闪烁LED
#define uchar unsigned char
#define uint unsigned int
#define ulong unsigned long

#include
//端口设置
sbit P10=P1^0;

sbit K1=P3^2;
char code dx516[3] _at_ 0x003b; //这是为了仿真设置
//主函数
void main(void)
{   
   RCAP2H=0x10;  //赋T2的预初值为0x1000,溢出30次就是1秒
   RCAP2L=0x00; 
   TR2=1;   //启动定时器
   ET2=1;   //打开定时器中断2
   EA=1;    //开总中断
   while(1)
  {
  ;
  }
}
 //定时器2中断 
timer2() interrupt 5
  {
  static uchar t;
  TF2=0;
   t++;
   if (t==10)
   {
   t=0;
   P10=~P10;
   }
   }

实验三:用外中断控制方式读按键,控制灯的亮和灭

程序:

//用外中断控制方式读按键,控制灯的亮和灭
#define uchar unsigned char
#define uint unsigned int
#define ulong unsigned long

#include

sbit P10=P1^0;
sbit P11=P1^1;
sbit P12=P1^2;
sbit P13=P1^3;
sbit K1=P3^2;

bit light;
int i;


char code dx516[3] _at_ 0x003b;
//主函数
void main(void)
{   
   IT0=1;   //外部中断跳变产生中断
   EX0=1;   //外部中断0允许位
   EA=1;    //开总中断
   while(1)
  {
  if (!K1)
  {
  for (i=0;i<10000;i++);
   light=~light;
   while (!K1);
   for (i=0;i<10000;i++);
}
}
}
//外部中断0
  timer0() interrupt 0
  {
  P10=light;
   }

实验四:模拟PWM输出控制灯的10个亮度级别

程序:

//模拟PWM输出控制灯的10个亮度级别
#define uchar unsigned char
#define uint unsigned int
#define ulong unsigned long

#include
//端口设置
sbit P10=P1^0; //要控制的LED灯
sbit K1=P3^2; //按键K1
uchar scale; //用于保存占空比的输出0的时间分额,总共10份

char code dx516[3] _at_ 0x003b;
//主函数
void main(void)
{  
   uint i;

   RCAP2H=0xF3;   //赋T2的预置值,溢出1次是1/1200秒钟
   RCAP2L=0x98; 
   TR2=1;    //启动定时器
   ET2=1;    //开定时器中断
   EA=1;     //打开总中断
   while(1)
  {
  for (i=0;i<50000;i++); //延时
   scale++;    //亮度自动加
    if (scale==10)  //加到10清零
       scale=0;

}
}
  timer2() interrupt 5
  {
   static uchar tt;  //用来保存当前时间在1秒钟的比例位置
   TF2=0;
   tt++;
   if (tt==10)   //每1/120秒输出低电平
  { tt=0;
    if (scale!=0)  //消除灭灯产生的幻影
    P10=0;
   }
   if (scale==tt)  //按照当前比例切换输出电平
  P10=1;
   }

关键字:C51入门  定时器  中断应用

『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
51单片机CO2检测显示程序解析