篇首语:本文由小编为大家整理,主要介绍了51单片机中断程序大全相关的知识,希望对你有一定的参考价值。
#include<reg51.h> // 包含51单片机寄存器定义的头文件sbit sound=P3^7; //将sound位定义为P3.7引脚void main(void) EA=1; //开总中断ET0=1; //定时器T0中断允许 TMOD=0x10; //使用定时器T1的模式1TH1=(65536-921)/256; //定时器T1的高8位赋初值TL1=(65536-921)%256; //定时器T1的高8位赋初值TR1=1; //启动定时器T1TF1=0;while(1)//无限循环等待查询 while(TF1==0); TF1=0;sound=~sound; //将P3.7引脚输出电平取反 TH1=(65536-921)/256; //定时器T0的高8位赋初值 TL1=(65536-921)%256; //定时器T0的高8位赋初值
#include<reg51.h> // 包含51单片机寄存器定义的头文件sbit S=P3^4; //将S位定义为P3.4引脚void main(void) EA=1; //开总中断 ET0=1; //定时器T0中断允许 TMOD=0x02; //使用定时器T0的模式2TH0=256-156; //定时器T0的高8位赋初值TL0=256-156; //定时器T0的高8位赋初值TR0=1; //启动定时器T0while(1)//无限循环等待查询 while(TF0==0) //如果未计满就等待 if(S==0) //按键S按下接地,电平为0 P1=TL0; //计数器TL0加1后送P1口显示 TF0=0; //计数器溢出后,将TF0清0
#include<reg51.h> // 包含51单片机寄存器定义的头文件sbit D1=P2^0; //将D1位定义为P2.0引脚void main(void) EA=1; //开总中断ET0=1; //定时器T0中断允许 TMOD=0x01; //使用定时器T0的模式2TH0=(65536-46083)/256; //定时器T0的高8位赋初值TL0=(65536-46083)%256; //定时器T0的高8位赋初值TR0=1; //启动定时器T0while(1);//函数功能:定时器T0的中断服务程序**************************************************************/void Time0(void) interrupt 1 using 0 //寄存器 D1=~D1; //按位取反操作,将P2.0引脚输出电平取反 TH0=(65536-46083)/256; //定时器T0的高8位重新赋初值TL0=(65536-46083)%256; //定时器T0的高8位重新赋初值
#include<reg51.h> // 包含51单片机寄存器定义的头文件sbit D1=P2^0; //将D1位定义为P2.0引脚unsigned char Countor; //设置全局变量,储存定时器T0中断次数void main(void) EA=1; //开总中断ET0=1; //定时器T0中断允许 TMOD=0x01; //使用定时器T0的模式2TH0=(65536-46083)/256; //定时器T0的高8位赋初值TL0=(65536-46083)%256; //定时器T0的高8位赋初值TR0=1; //启动定时器T0Countor=0; //从0开始累计中断次数while(1);/**************************************************************函数功能:定时器T0的中断服务程序**************************************************************/void Time0(void) interrupt 1 using 0 Countor++; //中断次数自加1if(Countor==20) //若累计满20次,即计时满1s D1=~D1; //按位取反操作,将P2.0引脚输出电平取反Countor=0; //将Countor清0,重新从0开始计数 TH0=(65536-46083)/256; //定时器T0的高8位重新赋初值TL0=(65536-46083)%256; //定时器T0的高8位重新赋初值
#include<reg51.h> // 包含51单片机寄存器定义的头文件sbit D1=P2^0; //将D1位定义为P2.0引脚sbit D2=P2^1; //将D2位定义为P2.1引脚unsigned char Countor1; //设置全局变量,储存定时器T1中断次数unsigned char Countor2; //设置全局变量,储存定时器T1中断次数void main(void) EA=1; //开总中断ET1=1; //定时器T1中断允许 TMOD=0x10; //使用定时器T1的模式1TH1=(65536-46083)/256; //定时器T1的高8位赋初值TL1=(65536-46083)%256; //定时器T1的高8位赋初值TR1=1; //启动定时器T1Countor1=0; //从0开始累计中断次数Countor2=0; //从0开始累计中断次数 while(1);// 定时器1void Time1(void) interrupt 3 using 0 Countor1++; //Countor1自加1Countor2++; //Countor2自加1if(Countor1==2) //若累计满2次,即计时满100msD1=~D1; //按位取反操作,将P2.0引脚输出电平取反 Countor1=0; //将Countor1清0,重新从0开始计数if(Countor2==8) //若累计满8次,即计时满400ms D2=~D2; //按位取反操作,将P2.1引脚输出电平取反 Countor2=0; //将Countor1清0,重新从0开始计数 TH1=(65536-46083)/256; //定时器T1的高8位重新赋初值TL1=(65536-46083)%256; //定时器T1的高8位重新赋初值
#include<reg51.h> //包含51单片机寄存器定义的头文件sbit u=P1^4; //将u位定义为P1.4/*************************************************函数功能:延时约30ms (3*100*100=30 000μs =30m*************************************************/void delay30ms(void) unsigned char m,n; for(m=0;m<100;m++) for(n=0;n<100;n++);void main(void) unsigned char i; u=1; //初始化输出高电平 for(i=0;i<50;i++) //输出50个矩形脉冲 u=1; delay30ms(); u=0; delay30ms(); while(1) :
#include<reg51.h> //包含51单片机寄存器定义的头文件void main(void) TMOD=0x06; // TMOD=0000 0110B,使用计数器T0的模式2 EA=1; //开总中断 ET0=0; //不使用定时器T0的中断 TR0=1; //启动T0 TH0=0; //计数器T0高8位赋初值 TL0=0; //计数器T0低8位赋初值 while(1) //无限循环,不停地将TL0计数结果送P1口 P1=TL0;
#include<reg51.h> //包含51单片机寄存器定义的头文件sbit ui=P3^2; //将ui位定义为P3.0(INT0)引脚,表示输入电压void main(void) TMOD=0x0a; // TMOD=0000 1010B,使用定时器T0的模式2,GATE置1 EA=1; //开总中断 ET0=0; //不使用定时器T0的中断 TR0=1; //启动T0 TH0=0; //计数器T0高8位赋初值 TL0=0; //计数器T0低8位赋初值 while(1) //无限循环,不停地将TL0计数结果送P1口 while(ui==0) : //INT0为低电平,T0不能启动 TL0=0; //INT0为高电平,启动T0计时,所以将TL0清0 while(ui==1): //在INT0高电平期间,等待,计时 P1=TL0; //将计时结果送P1口显示
#include<reg51.h> //包含51单片机寄存器定义的头文件sbit u=P1^4; //将u位定义为P1.4void main(void) TMOD=0x02; //TMOD=0000 0010B,使用定时器T0的模式2 EA=1; //开总中断ET0=1; //定时器T0中断允许 TH0=256-200; //定时器T0的高8位赋初值TL0=256-200; //定时器T0的高8位赋初值TR0=1; //启动定时器T0while(1) : //无限循环,等待中断void Time0(void) interrupt 1 using 0 //"interrupt"声明函数为中断服务函数 u=~u; //将P1.4引脚输出电平取反,产生方波
#include<reg51.h> //包含51单片机寄存器定义的头文件sbit u=P3^2; //将u位定义为P3.2void main(void) TMOD=0x02; //TMOD=0000 0010B,使用定时器T0的模式2 EA=1; //开放总中断 EX0=1; //允许使用外中断 IT0=1; //选择负跳变来触发外中断 ET0=1; //允许定时器T0中断 TH0=0; //定时器T0赋初值0 TL0=0; //定时器T0赋初值0 TR0=0; //先关闭T0 while(1) ; //无限循环, 不停检测输入负脉冲宽度void int0(void) interrupt 0 using 0 //外中断0的中断编号为0 TR0=1; //外中断一到来,即启动T0计时 TL0=0; //从0开始计时 while(u==0) //低电平时,等待T0计时 ; P1=TL0; //将结果送P1口显示 TR0=0; //关闭T0
#include<reg51.h> //包含51单片机寄存器定义的头文件#include<intrins.h> //包含函数_nop_()定义的头文件unsigned char code Tab[]=0xFE,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF,0x7F;//流水灯控制码,该数组被定义为全局变量sbit P17=P1^7;/**************************************************************函数功能:延时约150ms**************************************************************/void delay(void) unsigned char m,n; for(m=0;m<200;m++) for(n=0;n<250;n++); /**************************************************************函数功能:发送一个字节的数据**************************************************************/void Send(unsigned char dat) P17=0; //P1.7引脚输出清0信号,对74LS164清0 _nop_(); //延时一个机器周期 _nop_(); //延时一个机器周期,保证清0完成 P17=1; //结束对74LS164的清0 SBUF=dat; //将数据写入发送缓冲器,启动发送 while(TI==0) //若没有发送完毕,等待 ; TI=0; //发送完毕,TI被置“1”,需将其清0/*******************************************函数功能:主函数******************************************/void main(void) unsigned char i; SCON=0x00; //SCON=0000 0000B,使串行口工作于方式0 while(1) for(i=0;i<8;i++) Send(Tab[i]); //发送数据 delay(); //延时
以上是关于51单片机中断程序大全的主要内容,如果未能解决你的问题,请参考以下文章