《单片机中断程序大全.pdf》由会员分享,可在线阅读,更多相关《单片机中断程序大全.pdf(15页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、单单片片机机中中断断程程序序大大全全公司内部编号:(GOOD-TMMT-MMUT-UUPTY-UUYY-DTTI-/实实例例 4 42 2:用用定定时时器器 T T0 0 查查询询方方式式 P P2 2 口口 8 8 位位控控制制 L LE ED D 闪闪烁烁#include /包含 51 单片机寄存器定义的头文件void main(void)/EA=1;/开总中断/ET0=1;/定时器 T0 中断允许TMOD=0 x01;/使用定时器 T0 的模式 1TH0=(65536-46083)/256;/定时器 T0 的高 8 位赋初值TL0=(65536-46083)%256;/定时器 T0 的高
2、 8 位赋初值TR0=1;/启动定时器 T0TF0=0;P2=0 xff;while(1)/无限循环等待查询 while(TF0=0);TF0=0;P2=P2;TH0=(65536-46083)/256;/定时器 T0 的高 8 位赋初值 TL0=(65536-46083)%256;/定时器 T0 的高 8 位赋初值/实例实例 4343:用定时器:用定时器 T1T1 查询方式控制单片机发出查询方式控制单片机发出 1KHz1KHz 音频音频#include /包含 51 单片机寄存器定义的头文件sbit sound=P37;/将 sound 位定义为 P3.7 引脚void main(void)
3、/EA=1;/开总中断/while(TF1=0);TF1=0;sound=sound;/将 P3.7 引脚输出电平取反ET0=1;/定时器 T0 中断允许TMOD=0 x10;/使用定时器 T1 的模式 1TH1=(65536-921)/256;/定时器 T1 的高 8 位赋初值TL1=(65536-921)%256;/定时器 T1 的高 8 位赋初值TR1=1;/启动定时器 T1TF1=0;while(1)/无限循环等待查询 TH1=(65536-921)/256;/定时器 T0 的高 8 位赋初值/实例实例 4444:将计数器:将计数器 T0T0 计数的结果送计数的结果送 P1P1 口口
4、8 8 位位 LEDLED 显示显示#include /包含 51 单片机寄存器定义的头文件sbit S=P34;/将 S 位定义为 P3.4 引脚 TL1=(65536-921)%256;/定时器 T0 的高 8 位赋初值 void main(void)/EA=1;/开总中断/while(TF0=0)/如果未计满就等待 ET0=1;/定时器 T0 中断允许TMOD=0 x02;/使用定时器 T0 的模式 2TH0=256-156;/定时器 T0 的高 8 位赋初值TL0=256-156;/定时器 T0 的高 8 位赋初值TR0=1;/启动定时器 T0while(1)/无限循环等待查询 if(
5、S=0)/按键 S 按下接地,电平为 0 P1=TL0;/计数器 TL0 加 1 后送 P1 口显示 TF0=0;/计数器溢出后,将 TF0 清 0/实例实例 4545:用定时器:用定时器 T0T0 的中断控制的中断控制 1 1 位位 LEDLED 闪烁闪烁#include /包含 51 单片机寄存器定义的头文件sbit D1=P20;/将 D1 位定义为 P2.0 引脚void main(void)EA=1;/开总中断ET0=1;/定时器 T0 中断允许TMOD=0 x01;/使用定时器 T0 的模式 2TH0=(65536-46083)/256;/定时器 T0 的高 8 位赋初值TL0=(
6、65536-46083)%256;/定时器 T0 的高 8 位赋初值TR0=1;/启动定时器 T0while(1);函数功能:定时器 T0 的中断服务程序*/void Time0(void)interrupt 1 using 0 寄存器 D1=D1;/按位取反操作,将 P2.0 引脚输出电平取反/实例实例 4646:用定时器:用定时器 T0T0 的中断实现长时间定时的中断实现长时间定时#include /包含 51 单片机寄存器定义的头文件sbit D1=P20;/将 D1 位定义为 P2.0 引脚unsigned char Countor;/设置全局变量,储存定时器 T0 中断次数void
7、main(void)EA=1;/开总中断TH0=(65536-46083)/256;/定时器 T0 的高 8 位重新赋初值TL0=(65536-46083)%256;/定时器 T0 的高 8 位重新赋初值ET0=1;/定时器 T0 中断允许TMOD=0 x01;/使用定时器 T0 的模式 2TH0=(65536-46083)/256;/定时器 T0 的高 8 位赋初值TL0=(65536-46083)%256;/定时器 T0 的高 8 位赋初值TR0=1;/启动定时器 T0Countor=0;/从 0 开始累计中断次数while(1);/*函数功能:定时器 T0 的中断服务程序*/void T
8、ime0(void)interrupt 1 using 0 Countor+;/中断次数自加 1if(Countor=20)/若累计满 20 次,即计时满 1s D1=D1;/按位取反操作,将 P2.0 引脚输出电平取反TH0=(65536-46083)/256;/定时器 T0 的高 8 位重新赋初值TL0=(65536-46083)%256;/定时器 T0 的高 8 位重新赋初值/实例实例 4747:用定时器:用定时器 T1T1 中断控制两个中断控制两个 LEDLED 以不同周期闪烁以不同周期闪烁#include /包含 51 单片机寄存器定义的头文件sbit D1=P20;/将 D1 位定
9、义为 P2.0 引脚Countor=0;/将 Countor 清 0,重新从 0 开始计数sbit D2=P21;/将 D2 位定义为 P2.1 引脚unsigned char Countor1;/设置全局变量,储存定时器 T1 中断次数unsigned char Countor2;/设置全局变量,储存定时器 T1 中断次数void main(void)EA=1;/开总中断 void Time1(void)interrupt 3 using 0 Countor1+;/Countor1 自加 1Countor2+;/Countor2 自加 1if(Countor1=2)/若累计满 2 次,即计时
10、满 100msET1=1;/定时器 T1 中断允许TMOD=0 x10;/使用定时器 T1 的模式 1TH1=(65536-46083)/256;/定时器 T1 的高 8 位赋初值TL1=(65536-46083)%256;/定时器 T1 的高 8 位赋初值TR1=1;/启动定时器 T1Countor1=0;/从 0 开始累计中断次数Countor2=0;/从 0 开始累计中断次数while(1);反数反数 D1=D1;/按位取反操作,将 P2.0 引脚输出电平取Countor1=0;/将 Countor1 清 0,重新从 0 开始计if(Countor2=8)/若累计满 8 次,即计时满 4
11、00ms D2=D2;/按位取反操作,将 P2.1 引脚输出电平取Countor2=0;/将 Countor1 清 0,重新从 0 开始计TH1=(65536-46083)/256;/定时器 T1 的高 8 位重新赋初值TL1=(65536-46083)%256;/定时器 T1 的高 8 位重新赋初值/实例实例 50-150-1:输出:输出 5050 个矩形脉冲个矩形脉冲#include /包含 51 单片机寄存器定义的头文件sbit u=P14;/将 u 位定义为 P1.4/*函数功能:延时约 30ms(3*100*100=30 000s=30m*/void delay30ms(void)u
12、nsigned char m,n;for(m=0;m100;m+)for(n=0;n100;n+);void main(void)unsigned char i;u=1;/初始化输出高电平 for(i=0;i50;i+)/输出 50 个矩形脉冲 u=1;delay30ms();u=0;delay30ms();while(1):/实例 50-2:计数器 T0 统计外部脉冲数#include /包含 51 单片机寄存器定义的头文件void main(void)TMOD=0 x06;/TMOD=0000 0110B,使用计数器 T0 的模式 2 EA=1;/开总中断 ET0=0;/不使用定时器 T0
13、 的中断 TR0=1;/启动 T0 TH0=0;/计数器 T0 高 8 位赋初值 TL0=0;/计数器 T0 低 8 位赋初值 while(1)/无限循环,不停地将 TL0 计数结果送 P1 口 P1=TL0;/实例实例 51-251-2:定时器:定时器 T0T0 的模式的模式 2 2 测量正脉冲宽度测量正脉冲宽度#include /包含 51 单片机寄存器定义的头文件sbit ui=P32;/将 ui 位定义为 P3.0(INT0)引脚,表示输入电压void main(void)TMOD=0 x0a;/TMOD=0000 1010B,使用定时器 T0 的模式 2,GATE置 1 EA=1;/
14、开总中断 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 口显示/实例实例 5353:用外中断:用外中断 0 0 的中断方式进行数据采集的中断方式进行数据采集#include /包含
15、51 单片机寄存器定义的头文件sbit S=P32;/将 S 位定义为 P3.2,void main(void)EA=1;/开放总中断 EX0=1;/允许使用外中断 IT0=1;/选择负跳变来触发外中断P1=0 xff;while(1);void int0(void)interrupt 0 using 0/外中断 0 的中断编号为 0P1=P1;/每产生一次中断请求,P1 取反一次。/实例实例 54-154-1:输出负脉宽为:输出负脉宽为 200200 微秒的方波微秒的方波#include /包含 51 单片机寄存器定义的头文件sbit u=P14;/将 u 位定义为 P1.4void mai
16、n(void)TMOD=0 x02;/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 引脚输出电平取反,产生方波/实例实例 54-254-2:测量负脉冲宽度:测量负脉冲宽度#include /包含 51 单片机寄
17、存器定义的头文件sbit u=P32;/将 u 位定义为 P3.2void main(void)TMOD=0 x02;/TMOD=0000 0010B,使用定时器 T0 的模式 2 EA=1;/开放总中断 EX0=1;/允许使用外中断 IT0=1;/选择负跳变来触发外中断void int0(void)interrupt 0 using 0/外中断 0 的中断编号为 0ET0=1;/允许定时器 T0 中断TH0=0;/定时器 T0 赋初值 0TL0=0;/定时器 T0 赋初值 0TR0=0;/先关闭 T0while(1);/无限循环,不停检测输入负脉冲宽度 TR0=1;/外中断一到来,即启动 T
18、0 计时/实例实例 5555:方式:方式 0 0 控制流水灯循环点亮控制流水灯循环点亮#include /包含 51 单片机寄存器定义的头文件#include/包含函数_nop_()定义的头文件unsigned char codeTab=0 xFE,0 xFD,0 xFB,0 xF7,0 xEF,0 xDF,0 xBF,0 x7F;/流水灯控制码,该数组被定义为全局变量sbit P17=P17;/*函数功能:延时约 150ms*/void delay(void)unsigned char m,n;TL0=0;/从 0 开始计时while(u=0)/低电平时,等待 T0 计时 ;P1=TL0;/
19、将结果送 P1 口显示TR0=0;/关闭 T0 for(m=0;m200;m+)for(n=0;n250;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=0 x00;/SCON=0000 0000B,使串行口工作于方式 0while(1)for(i=0;i8;i+)Send(Tabi);/发送数据 delay();/延时