定时器的应用---中断方式---让8个LED灯,左右各4个来回亮

/***************************
 中断方式 是主程序专注于其他的事情,
 待定时器中断时才执行中断子程序。

*****************************/

#include<reg51.h>

#define LED P1
#define count 50000  // 50000 * 1us = 0.05s 机器周期1us 12MH晶振
#define TH_M1 (65536-count)/256   //TMOD 寄存器 方式 1 , 2^8 = 256 THX跟TLX都是8位 除以256取商赋值高4位
#define TL_M1 (65536-count)%256   //将余数赋值低4位
int  Count=0;          //计算TO中断次数
main()
{
            IE   = 0x82;   // EA=1, 1000 0010      1000开启总中断    0010 T0中断
            TMOD = 0x01;   // 方式1
            TH0  = TH_M1;  // 设置T0计数值高8位,
            TL0  = TL_M1;  // 低8位
            TR0  = 1;       // 启动 T0
            LED  = 0xf0;   // 1111 ,0000 右边亮  共阳极
            while(1);       // 无穷循环
}
void timer0(void)interrupt 1     //定时器Timer0 中断 1
    {
            TH0 = TH_M1;         //设置TO 高4位
            TL0 = TH_M1;         //低4位
            if(++ Count==5)         //已经中断5次
        {
            Count=0;              //中断次数归0
            LED^=0xff;              // LED = LED ^ 0XFF  ^ 异或 1111 0000 ^ 1111 1111 = 0000 1111 LED取反
        }
    }

IE寄存器

时间: 2024-10-05 10:17:51

定时器的应用---中断方式---让8个LED灯,左右各4个来回亮的相关文章

定时器的应用---查询方式---让8个LED灯,左右各4个来回亮

定时器的应用,查询方式.让8个LED灯,左右各4个来回亮 代码: /********************** 查询方式是主程序不断的查询是否中断,而不需要准备子程序 ***********************/ #include<reg51.h> #define LED P1 #define COUNT 50000 // 50000 * 1us = 0.05s 50000计数次 #define TH_M1 (65536-COUNT)%256 //MODE 1 余数赋值给高4位 #dee

TI CC2530基础实验(定时器3中断方式——自由运行模式)

本实验实现通过CC2530的定时器3(8位)查询方式控制LED1以1S的周期性闪烁,此实验使用有关定时器3的2个寄存器T3CTL(定时器3控制寄存器),IEN1(中断使能1寄存器). 有关CC2530的GPIO基本知识.普通GPIO操作有关寄存器的介绍.IAR Embedded Workbench IDE软件使用:TI CC2530基础实验(普通GPIO操作--点亮led灯) 原理图: 寄存器分析: 程序: #include <ioCC2530.h> /********************

4、定时器T1通过查询方式控制LED1周期性闪烁(轮训方式)

定时器T1通过查询方式控制LED1周期性闪烁 1 /**************************************************************************** 2 * 文 件 名: main.c 3 * 作 者: Amo [ www.amoMcu.com 阿莫单片机] 4 * 修 订: 2014-04-08 5 * 版 本: 1.0 6 * 描 述: 定时器T1通过查询方式控制LED1周期性闪烁 7 *************************

单片机第12课:串口通信---中断方式--从计算机接收数据

JP3和P0口连接.用中断的方式来接收数据. #include<reg51.h> //声明初始化子函数 void initSer(); void main() { //初始化子函数调用 initSer(); while(1) { //一句话都没有 } } //定义初始化子函数 void initSer() { //定时器工作方式为2 TMOD = 0x20; //波特率9600,SMOD=0 TH1 = 0xfd; TL1 = 0xfd; //启动定时器 TR1 = 1; //串口工作方式1

在Linux下的中断方式读取按键驱动程序

// 在Linux下的中断方式读取按键驱动程序 //包含外部中断 休眠 加入poll机制 // 采用异步通知的方式 // 驱动程序发 ---> app接收 (通过kill_fasync()发送) // 为了使设备支持异步通知机制,驱动程序中涉及以下3项工作: // 1. 支持F_SETOWN命令,能在这个控制命令处理中设置filp->f_owner为对应进程ID. // 不过此项工作已由内核完成,设备驱动无须处理. // 2. 支持F_SETFL命令的处理,每当FASYNC标志改变时,驱动程序

【STM32H7教程】第60章 STM32H7的DAC应用之定时器触发实现DMA方式双通道波形

完整教程下载地址:http://www.armbbs.cn/forum.php?mod=viewthread&tid=86980 第60章       STM32H7的DAC应用之定时器触发实现DMA方式双通道波形 本章节为大家讲解DAC采用定时器触发方式实现DMA双通道波形输出,实际输出效果也比较好,项目使用价值也比较大. 60.1 初学者重要提示 60.2 H7和F4的DAC输出效果对比 60.3 DAC驱动设计 60.4 DAC驱动移植和使用 60.5 实验例程设计框架 60.6 实验例程

RTX——第19章 SVC 中断方式调用用户函数(后期补历程)

本章节为大家讲解如何采用 SVC 中断方式调用用户函数. 当用户将 RTX 任务设置为工作在非特权级模式时,任务中是不允许访问特权级寄存器的,这个时候使用 SVC 中断,此问题就迎刃而解了. SVC 功能介绍SVC 用于产生系统函数的调用请求.例如,操作系统通常不让用户程序直接访问硬件,而是通过提供一些系统服务函数,让用户程序使用 SVC 发出对系统服务函数的呼叫请求,以这种方法调用它们来间接访问硬件.因此,当用户程序想要控制特定的硬件时,它就要产生一个 SVC 异常,然后操作系统提供的SVC

iOS开发——实用OC篇&amp;定时器的几种方式

定时器的几种方式 在软件开发过程中,我们常常需要在某个时间后执行某个方法,或者是按照某个周期一直执行某个方法.在这个时候,我们就需要用到定时器. 然而,在iOS中有很多方法完成以上的任务,到底有多少种方法呢?经过查阅资料,大概有三种方法:NSTimer.CADisplayLink.GCD.接下来我就一一介绍它们的用法. 一.NSTimer 1. 创建方法 1 NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:s

DMA为什么比轮询、中断方式性能要卓越很多?(你不懂)

本文原创为freas_1990,转载请标明出处:http://blog.csdn.net/freas_1990/article/details/35735397 如果是计算机专业出身的同学,都听过一个概念,中断比轮询要好.DMA比中断要好. 中断比轮询要好,是容易理解的: 在轮询中,CPU是死循环执行对IO端口的检测,这种模式,大量的浪费了CPU(因为CPU除了处理外设之外,更多的时间应该用于对内存的操作,如计算等). 而中断方式,则没有死循环的浪费,CPU可以正常做别的事情,等到外部设备数据来