首页 > 代码库 > 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
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。