单片机中断程序
单⽚机中断程序1单⽚机外部中断应⽤
#include "reg51.h"
typedef unsigned int u8;
#define led P2  //整个P2⼝都被定义为led
sbit k3=P3^2;
sbit k4=P3^3;
void yanshi(u8 z)
{
while(z--);
}
void Int_Init()////外部中断配置
{
EA=1;        //打开中断允许总控制位
EX0=1;        //外部中断0中断允许位
IT0=1;        //设置为脉冲触发,下降沿有效
}
void main()            //主函数执⾏
{
led=0xff;          //设置状态为全亮
Int_Init();
while(1);            //while(1);是⼀条指令,它让单⽚机停在这个位置道
//⼀般⽤来检测中断,只有cpu收到中断指令,才会跳出while(1)
/
/进⼊中断服务⼦程序;
}
void int0 () interrupt 0 using  0//2.写此程序的时候要注意中断标准和中断号是否是对应的
{                                //这⾥为外部中断0的中断函数
yanshi(1000);
if(k3==0)
{
led=~led;                  //这⾥将⼩灯的状态反转
}
}
写外部中断时应该看清楚电路图 P32,P33⼝是外部中断0和1的位置
2蜂鸣器
#include "reg51.h"
sbit fen=P1^5;
sbit k2=P3^0;
void dealy(int x)
{
while(x--);
}
void main()
{
while(1)
{
if(k1==0)//判断按键是否按下
{
dealy(100);
if(k1==0)//判断按键是否按下
{
fen=~fen;//执⾏蜂鸣器状态的反转,如果按键⼀直按,那么⼀直延时反转,就会响
dealy(10);
}
}
}
}
按照开发板的图⽚来蜂鸣器接的⼝为p1.5;
1.此时将外部中断与蜂鸣器连起来综合运⽤
#include "reg51.h"
typedef unsigned int u8;
sbit fen=P1^5;
sbit led=P2^0;
sbit k3=P3^2;
u8 z=0;
void dealy(u8 x)
{
while(x--);
}
柿子的营养价值及功效与作用void Int_Init()
{
EA=1;        //打开中断允许总控制位
EX0=1;        //外部中断0中断允许位
IT0=1;        //设置为脉冲触发,下降沿有效
}
void main()
{
led=0;
Int_Init();    //调⽤外部中断的函数
while(1);
}
void int0 () interrupt 0
{
dealy(1000);
if(k3==0)
{
for(z=0;z<10000;z++)
{
fen=~fen;
dealy(10);
}
}
}
此时只需要按下k3将会有⼤约1s的蜂鸣器的叫声
3.按下k3闪烁不按⾼四位亮的中断应⽤#include "reg51.h"
typedef unsigned int u8;
#define led P2 //定义整个2脚
sbit key=P3^2;
u8 z;
yanshi(u8 x)
中国橱柜十大品牌{
while(x--);
}
void Int_Init()
{
EA=1;
EX0=1;
IT0=1;
}
void main()
{
led=0xf0;
Int_Init();
while(1);
}
void int0 () interrupt 0 using  0
{
yanshi(1000);
if(key==0)
{
for(z=0;z<8;z++)
{
yanshi(5000);
led=~led;
yanshi(5000);
}
}
}
4.定时器的⼀些⽤法解析
4.定时器中断的⼀些详解(带程序)
#include "reg52.h"
typedef unsigned char u8;鸯组词组两个词
typedef unsigned int u16;
u8 wei[3];
sbit LSA = P2^2;//138译码器端⼝定义
80年代经典老歌sbit LSB = P2^3;
sbit LSC = P2^4;
u8 code smgduan[16]= {0x3f, 0x06, 0x5b, 0x4f,0x66, 0x6d, 0x7d, 0x07,0x7f, 0x6f, 0x77, 0x7c,    0x39, 0x5e, 0x79, 0x71}; //0~F数码
u8 ge,shi=0,bai=0,c,z=1;
void delay(u8 x){while(x--);}
void Timer0_Init() //初始化定时器
{
TMOD = 0x01;  //定时器0⽅式1
TH0 = 0;
TL0 = 0;  //定时器的计数起点为0
TR0 = 1; //启动定时器0
}
void weishu()//各个位的位数显⽰
{
wei[0]=smgduan[ge];
wei[1]=smgduan[shi];
wei[2]=smgduan[bai];
}
void xs()//数字显⽰
{
u8 i;
for(i=0;i<z;i++)
{
switch(i)
{
抖音张同学真实身份case 0:
LSC = 0;LSB = 0;LSA = 0;break; //显⽰第1个数码管
case 1:
LSC = 0;LSB = 0;LSA = 1;break; //显⽰第2个数码管
case 2:
LSC = 0;LSB = 1;LSA = 0;break; //显⽰第3个数码管
}
P0=wei[i];//显⽰0-9的数值
delay(10); //延时,造成视觉暂留现象
P0 = 0x00; //数码管消隐
}
}
void main()
{
Timer0_Init();
while(1)
{
if(TF0 == 1) //检测定时器0是否溢出,每到65535次
{
TF0=0;
c++;
if(c==14)  //71ms乘以14为1s
{
c=0;
ge++;
if(ge==10){ge=0;shi++;z=2;}//3个判断分别包含开启3个数码管显⽰
if(shi==10){shi=0;bai++;}
if(bai>0){z=3;}
}
}
weishu();//调⽤位数数字
xs();//显⽰数字
}
}
⼀个0-999的⼀秒加数器。
5.利⽤定时器中断调制输出占空⽐为0.3的pwm波#include "reg52.h"
typedef unsigned int u8;
u8 z=0,x=0;
sbit pwm=P2^0;//定义pwm输出⼝
void Timer1Init()
{
TMOD|=0X10;//选择为定时器1模式,⼯作⽅式1,仅⽤TR1打开启动。
TH1 = 0xFF;
TL1 = 0xff;  //1us
ET1=1;//打开定时器1中断允许
EA=1;//打开总中断
TR1=1;//打开定时器
}
void main()
{
Timer1Init();
while(1)
{
if(z>10000)//⼀个周期
{
z=0;
x=0;
}
if(x<=3000)//⾼电平的持续时间
{
pwm=1;
}else//低电平的持续时间
{
pwm=0;
}
}
}
void Time1(void) interrupt 3    //3 为定时器1的中断号
{
TH1 = 0xFF;
TL1 = 0xff;  //1us
z++;
x++;
竹石 古诗}

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。