单片机中断程序大全Word格式文档下载.docx
《单片机中断程序大全Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《单片机中断程序大全Word格式文档下载.docx(13页珍藏版)》请在冰豆网上搜索。
![单片机中断程序大全Word格式文档下载.docx](https://file1.bdocx.com/fileroot1/2022-12/12/2a59bb91-8707-4941-832b-154b216beaa1/2a59bb91-8707-4941-832b-154b216beaa11.gif)
while(TF0==0)
P2=~P2;
//定时器T0的高8位赋初值
}
1KHz音频
//实例43:
用定时器T1查询方式控制单片机发出
sbitsound=P3^7;
//将sound位定义为引脚
**************************************************************/
TL1=(65536-921)%256;
//定时器T1的高8位赋初值TR1=1;
//启动定时器T1
TF1=0;
while
(1)//无限循环等待查询
{while(TF1==0)
J
sound=~sound;
//将引脚输出电平取反
TH1=(65536-921)/256;
//定时器T0的高8位赋初值}
while(TF0==0)//如果未计满就等待
if(S==0)//按键S按下接地,电平为0
P仁TL0;
//计数器TL0加1后送P1口显示
//计数器溢出后,将TF0清0
//实例45:
用定时器TO的中断控制1位LED闪烁
//包含51单片机寄存器定义的头文件sbitD1=P2A0;
//将D1位定义为引脚
**************************************************************/voidmain(void)
定时器TO中断允许使用定时器TO的模式2定时器TO的高8位赋初值
定时器TO的高8位赋初值启动定时器TO
EA=1;
ETO=1;
THO=(65536-46O83)/256;
TLO=(65536-46O83)%256;
TRO=1;
while
(1)//无限循环等待中断
定时器TO的中断服务程序
voidTimeO(void)interrupt1usingO//“interrupt”声明函数为中断服务
函数
//其后的1为定时器TO的中断编号;
0表示使用第0组工作
寄存器
D1=~D1;
//按位取反操作,将引脚输出电平取反
//定时器TO的高8位重新赋初值
//定时器TO的高8位重新赋初值
//实例46:
用定时器T0的中断实现长时间定时
sbitD1=P2A0;
//将D1位定义为引脚
unsignedcharCountor;
//设置全局变量,储存定时器TO中断次数
/**************************************************************
函数功能:
定时器T0中断允许使用定时器T0的模式2定时器TO的高8位赋初值
ET0=1;
TMOD=0x01;
Countor=O;
//从O开始累计中断次数
}/**************************************************************
函数功能:
定时器TO的中断服务程序
Countor++;
//中断次数自加1if(Countor==2O)//若累计满2O次,即计时满1s{
Countor=0;
//将Countor清0,重新从0开始计数}
//定时器T0的高8位重新赋初值
//定时器T0的高8位重新赋初值
//实例47:
用定时器T1中断控制两个LED以不同周期闪烁
sbitD2=P2A1;
//将D2位定义为引脚
unsignedcharCountor1;
//设置全局变量,储存定时器T1中断次数unsignedcharCountor2;
//设置全局变量,储存定时器T1中断次数/**************************************************************
************************************************************
定时器T1中断允许使用定时器T1的模式1定时器T1的高8位赋初值
定时器T1的高8位赋初值启动定时器T1
从0开始累计中断次数
ET1=1;
//TMOD=0x10;
TH1=(65536-46083)/256;
TL1=(65536-46083)%256;
TR1=1;
Countor1=0;
Countor2=0;
/**************************************************************函数功能:
定时器T1的中断服务程序
voidTime1(void)interrupt3using0//“interrupt”声明函数为中断服务
//其后的3为定时器T1的中断编号;
0表示使用第0组工作
Countor1++;
//Countor1自加1
Countor2++;
//Countor2自加1if(Countor1==2)//若累计满2次,即计时满100ms
//将Countor1清0,重新从0开始计数}
if(Countor2==8)//若累计满8次,即计时满400ms
D2=~D2;
//定时器T1的高8位重新赋初值
//实例50-1:
输出50个矩形脉冲
sbitu=P1A4;
//将u位定义为
/*************************************************
延时约30ms(3*100*100=30000卩s=30m
*************************************************/
voiddelay30ms(void)
unsignedcharm,n;
for(m=0;
m<
100;
m++)
for(n=0;
n<
n++)}
/*******************************************函数功能:
******************************************/
unsignedchari;
u=1;
//初始化输出高电平
for(i=0;
i<
50;
i++)//输出50个矩形脉冲
delay30ms();
u=0;
while
(1)
;
//无限循环,防止程序“跑飞”
//实例50-2:
计数器T0统计外部脉冲数
//包含51单片机寄存器定义的头文件/*******************************************函数功能:
while
(1)//无限循环,不停地将TL0计数结果送P1口P1=TL0;
//实例51-2:
定时器TO的模式2测量正脉冲宽度
sbitui=P3A2;
//将ui位定义为(INTO)弓1脚,表示输入电压
/*******************************************
TMOD=OxOa;
//TMOD=00001010B,使用定时器TO的模式2,GATE置1
//开总中断
ET0=0;
TH0=0;
TL0=0;
while
(1)//
不使用定时器TO的中断
启动T0
计数器TO高8位赋初值
计数器TO低8位赋初值
无限循环,不停地将TLO计数结果送P1口
while(ui==0)//INTO为低电平,TO不能启动
TLO=O;
//INTO为高电平,启动TO计时,所以将TLO清0
while(ui==1)//在INTO高电平期间,等待,计时
P仁TLO;
//将计时结果送P1口显示
//实例53:
用外中断O的中断方式进行数据采集
sbitS=P3A2;
//将S位定义为,
/*******************************************函数功能:
//开放总中断
EX0=1;
//允许使用外中断
IT0=1;
//选择负跳变来触发外中断
P1=0xff;
//无限循环,防止程序跑飞
外中断T0的中断服务程序
voidint0(void)interrupt0using0//外中断0的中断编号为0
P1=~P1;
//每产生一次中断请求,P1取反一次。
//实例54-1:
输出负脉宽为200微秒的方波
TMOD=0x02;
//TMOD=00000010B,使用定时器T0的模式2EA=1;
//定时器T0中断允许
TH0=256-200;
TL0=256-200;
while
(1)//无限循环,等待中断
定时器T0的中断服务程序
voidTime0(void)interrupt1using0//"
interrupt"
声明函数为中断服务函
数
u=~u;
//将引脚输出电平取反,产生方波
//实例54-2:
测量负脉冲宽度
sbitu=P3A2;
//TMOD=00000010B,使用定时器T0的模式2
//允许定时器T0中断
//定时器T0赋初值0
TR0=0;
//先关闭T0
//无限循环,不停检测输入负脉冲宽度
外中断0的中断服务程序
//外中断一到来,即启动T0计时
//从0开始计时
while(u==0)//低电平时,等待T0计时
P1=TL0;
//将结果送P1口显示
//关闭T0
//实例55:
方式0控制流水灯循环点亮
//包含函数_nop_()定义的头文件
unsignedcharcodeTab[]={0xFE,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF,0x7F};
//流水灯控制码,该数组被定义为全局变量
sbitP17=P1A7;
延时约150ms
voiddelay(void)
200;
250;
发送一个字节的数据
TI=0;
//发送完毕,TI被置“1”,需将其清0}
******************************************/voidmain(void)
SCON=0x00;
//SCON=00000000B,使串行口工作于方式0while
(1)
{for(i=0;
8;
i++)
发送数据
延时
{Send(Tab[i]);
delay();