当前位置: 首页 > news >正文

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年年末

 

 

 

 

 

 

 


 

转载于:https://www.cnblogs.com/Ph-one/p/4234356.html

相关文章:

  • STC51几种简单的延时函数
  • GSM900TCP/UDP连接
  • arm-linux工具
  • 盎司
  • Win7下硬盘安装fedora17
  • sudo fdisk -l
  • 硬盘
  • 开发人员不可不看的 OBD通讯协议知识
  • Ubuntu 12.10 用wubi安装到硬盘中
  • ubuntu 12.04网络设置
  • ubuntu 12.04及12.10无法安装 ia32-libs
  • ubuntu文字界面与图形界面切换
  • Android下点亮LED
  • MiniTools在ubuntu下快捷方式
  • linux 下各个头文件的作用[典]
  • “大数据应用场景”之隔壁老王(连载四)
  • css属性的继承、初识值、计算值、当前值、应用值
  • Docker入门(二) - Dockerfile
  • Eureka 2.0 开源流产,真的对你影响很大吗?
  • HTML-表单
  • Java 网络编程(2):UDP 的使用
  • Java|序列化异常StreamCorruptedException的解决方法
  • jquery ajax学习笔记
  • nginx(二):进阶配置介绍--rewrite用法,压缩,https虚拟主机等
  • nodejs实现webservice问题总结
  • npx命令介绍
  • overflow: hidden IE7无效
  • Python socket服务器端、客户端传送信息
  • react 代码优化(一) ——事件处理
  • Spring声明式事务管理之一:五大属性分析
  • ViewService——一种保证客户端与服务端同步的方法
  • 初探 Vue 生命周期和钩子函数
  • 创建一种深思熟虑的文化
  • 观察者模式实现非直接耦合
  • 函数式编程与面向对象编程[4]:Scala的类型关联Type Alias
  • 两列自适应布局方案整理
  • 深入体验bash on windows,在windows上搭建原生的linux开发环境,酷!
  • 学习HTTP相关知识笔记
  • postgresql行列转换函数
  • ​LeetCode解法汇总2808. 使循环数组所有元素相等的最少秒数
  • #宝哥教你#查看jquery绑定的事件函数
  • (env: Windows,mp,1.06.2308310; lib: 3.2.4) uniapp微信小程序
  • (NSDate) 时间 (time )比较
  • (二)正点原子I.MX6ULL u-boot移植
  • (一)插入排序
  • (一)基于IDEA的JAVA基础1
  • (转)Unity3DUnity3D在android下调试
  • (转)机器学习的数学基础(1)--Dirichlet分布
  • .bat批处理(三):变量声明、设置、拼接、截取
  • .equals()到底是什么意思?
  • .net 发送邮件
  • .net 写了一个支持重试、熔断和超时策略的 HttpClient 实例池
  • .Net8 Blazor 尝鲜
  • .NET上SQLite的连接
  • .Net下C#针对Excel开发控件汇总(ClosedXML,EPPlus,NPOI)