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

时间: 2024-10-07 13:11:39

STC51六中中断配置点亮一个LED的相关文章

从点亮一个LED开始,Cortex-A9裸机程序设计

电路原理图: 如何点亮一个LED? 通过对原理图进行分析,我们能够发现给三极管的基极加上一个高点平时,三级管be结导通构成通路,此时二极管就点亮了.若要将LED熄灭只需取消高电平输出. 如何使三级管基极获得一个高电平? 控制三极管基极的其实是exynos4412的一个引脚(忽略具体是怎么连接的),因此我们要做的就是: 配置相关寄存器使引脚变为输出功能(这里配置为输出功能 0x1) 配置上下拉(若需要) 操作寄存器改变引脚电平变化 配置带负载能力(若需要) 相关寄存器 配置引脚功能 获取或设置引脚

ESP8266-12F学习之点亮一个LED灯

点亮一个LED灯     上一篇文章,我们介绍了怎么在Windows系统下搭建一个SEP8266的开发环境,那在这一篇文章中我们要开始来编写一个硬件入门经典小程序,如何点亮一个LED小灯,同时在这一章中我们还会介绍怎么样将编译好的程序下载到ESP8266-12f中.  第一步:下载官方demo框架,从http://wiki.ai-thinker.com/esp8266/examples 下载,当然,也可以在文章最后下载我的附件,下载完后,我们将文件添加到SDK中进行编译,步骤如图: 点开C/C+

STM32学习笔记(一)——点亮一个LED

引言 最近报名了2017全国大学生电子设计竞赛,我们学校是第一次参加这个比赛,由于8/9月份就要比赛了,所以现在准备是比较晚的了,指导老师说只能做控制类的题目了,让我们学习一下STM32单片机,51到时候肯定不够用了,正好前几天买了一块STM32F103ZET6的最小系统,那就赶紧学习吧!从哪里学习呢?同样是从点亮一个小灯开始,就建个工程模板就让我没有耐心了,折腾了一上午终于把工程建立好了, 关于STM32 简介 STM32系列基于专为要求高性能.低成本.低功耗的嵌入式应用专门设计的ARM Co

6种中断点亮一个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; //下降沿触发

点亮一个LED灯

设计定义: 二选一多路器 两个输入IO,a.b.可以是高电平, 输入按键按下时,LED灯与a端口状态保持一致, 按键释放时,LED灯与b端口状态保持一致 设计输入:创建一个project 编写功能代码 module LED(a,b,key_in,led_out); input a;//输入端口a,b: input b; input key_in;//按键输入,实现输入通道的选择 output led_out;//led控制端口 assign led_out=(key_in==0)?a:b;//当

在 S5PV210 的 开发板上 点亮 一个 LED 灯

参考学习教程:周立功嵌入式Linux开发教程-(上册) 材料:首先 准备一个 安装好 Linux 的 开发板 使用  xshell 工具 连接 开发板  ,winscp 工具 连接 开发板  ,  准备 一个 Ubuntu  32位 ,装上 交叉编译链.. 使用下面 代码 和 Makefile 文件 进行编译  ,生成的  执行 文件  利用 winscp 软件复制到 Linux开发板上 ,利用 xshell 运行 这个可执行文件. 下面    代码的  功能  是   新建 一个 TCP 客户

树莓派点亮一个led灯

1. 访问网站:http://www.airspayce.com/mikem/bcm2835/, 该网站提供了一份针对树莓派的库文件,下载地址为:点击下载 点击下载.按照提示安装即可. 2. 在bcm2835-1.4.2 中的example文件夹中即为历程文件,打开其中的bink文件夹,使用gcc -o blink blink -l bcm2835 即可生成blink执行文件. 3. 在blink.c文件中,提示控制pin17引脚,即图中的绿色GPIO0,连接LED灯的正极:LED灯负极接树莓派

JZ2440点亮一个LED

点亮标号为D10的LED,其对应的GPIO为GPF4,即设置GPF4为输出口,并拉低为低电平[具体原理查看JZ2440原理图] 1 #define GPFCON (*(volatile unsigned long *)0X56000050) 2 #define GPFDAT (*(volatile unsigned long *)0X56000054) 3 4 #define GPF4_O (1<<(4*2)) 5 6 int main() 7 { 8 //设置GPF4为输出IO 9 GPFC

STC15F104W 点亮一个LED 上手初测

/* 工程创建MCU选取,Atmel 89C55 单片机:STC15f104W 功能:500M秒闪一次LED 连接说明:LED正极串接1K 电阻接VCC,负极接到 MCU的8脚 P3.3 */ #include <REG51.h> sbit LED = P3^3; void DELAY_MS (unsigned int a){     unsigned int i;     while ( --a != 0 )    {         for (i=0;i<=600;i++);