单片机中断程序大全.docx
- 文档编号:8924984
- 上传时间:2023-05-16
- 格式:DOCX
- 页数:13
- 大小:23.65KB
单片机中断程序大全.docx
《单片机中断程序大全.docx》由会员分享,可在线阅读,更多相关《单片机中断程序大全.docx(13页珍藏版)》请在冰点文库上搜索。
单片机中断程序大全
单片机中断程序大全
公司内部编号:
(GOOD・TMMT・MMUT・UUPTY・UUYYDTTI-
//实例42:
用定时器
TO査询方式P2口8位控制LED闪烁
#include
//包含51单片机寄存器定义的头文件
voidmain(void)
//EA二1;
//开总中断
//ETO二1;
//定时器T0中断允许
TMOD^OxOl;
//使用定时器T0的模式1
THO二(65536-46083)/256;//定时器TO的高8位赋初值
TLO二(65536-46083)%256;//定时器TO的高8位赋初值
TRO二1;
〃启动定时器T0
TFO二0;
P2二Oxff;
while
(1)//无限循环等待查询
{
while(TF0==0)
TFO二0;
P2二、P2;
THO=(65536-46083)/256;//定时器TO的高8位赋初值
TLO二(65536-46083)%256;//定时器T0的高8位赋初值
〃实例43:
用定时器T1査询方式控制单片机发出lKHz音频
#include
//包含51单片机寄存器定义的头文件
sbitsound二P37;//将sound位定义为P3.7引脚
voidmain(void)
{//EA=1;〃开总中断
//ET0二1;//定时器TO中断允许
TMOD二0x10;//使用定时器T1的模式1
TH1=(65536-921)/256;//定时器T1的高8位赋初值
TL1=(65536-921)%256;//定时器T1的高8位赋初值
TR1二1;//启动定时器T1
TF1二0;
while
(1)//无限循环等待查询
{
while(TF1==O);
TF1=O;
sound=~sound;//将P3.7引脚输出电平取反
TH1二(65536-921)/256;//定时器T0的高8位赋初值
TL1=(65536-921)%256;//定时器T0的高8位赋初值
}
}
〃实例44:
将计数器T0计数的结果送Pl口8位LED显示
#include
//包含51单片机寄存器定义的头文件
voidmain(void)
//EA二1;
//开总中断
//ET0二1;
//定时器T0中断允许
TM0D二0x02;
//使用定时器T0的模式2
TH0二256-156;
//定时器T0的高8位赋初值
TL0二256-156;
//定时器T0的高8位赋初值
TR0二1;
〃启动定时器T0
while
(1)//无限循环等待查询
while(TFO二二0)//如果未计满就等待
辻(S二二0)〃按键S按下接地,电平为0
P1二TL0;//计数器TL0加1后送P1口显示
}
TF0二0;〃计数器溢出后,将TF0清0}}
〃实例45:
用定时器T0的中断控制1位LED闪烁
ftinclude
voidmain(void)
EA二1;
//开总中断
TM0D=0x01;//使用定时器TO的模式2
THO=(65536-46083)/256;//定时器TO的高8位赋初值
TLO=(65536-46083)%256;//定时器T0的高8位赋初值
TRO二1;//启动定时器T0
while
(1):
}
函数功能:
定时器T0的中断服务程序
•丄■wx■丄"■丄"■丄"■丄"■卜■士■丄"•丄"■丄"wx■丄Q■丄■/
voidTimeO(void)interrupt1using0寄存器
D1「D1;〃按位取反操作,将P2.0引脚输出电平取反
THO=(65536-46083)/256;//定时器T0的高8位重新赋初值
TLO二(65536-46083)%256;//定时器T0的高8位重新赋初値
〃实例46:
用定时器T0的中断实现长时间定时
#include
sbitD1二P2P;〃将D1位定义为P2.0引脚
unsignedcharCountor;//设置全局变量,储存定时器TO中断次数voidmain(void)
{
EA二1;〃开总中断
THO二(65536-46083)/256;//定时器TO的高8位赋初値
TLO二(65536-46083)%256;//定时器T0的高8位赋初值
TRO二1;
//启动定时器T0
Countor二0;
〃从0开始累计中断次数
while
(1);}
:
■尢•丄"KW•丄"■丄"%Lz■尢■丄■•丄"%fx■尢
函数功能:
定时器TO的中断服务程序
•>■丄"■丄"■丄"■丄"■丄"0丄"■丄"■丄"■丄"■["■>£"■丄"■["•丄"•丄"■"■"■"■>■丄"■丄"■["■丄"■丄"%lx■>■尢vlxWX■["•丄"/
voidTimeO(void)interrupt1using0
{
Countor卄;//中断次数自加1
辻(Countor==20)//若累计满20次,即计时满Is
{
D1「D1;〃按位取反操作,将P2.0引脚输出电平取反
Countor=0;//将Countor清0,重新从0开始计数
}
THO=(65536-46083)/256;//定时器T0的高8位重新赋初值
TLO=(65536-46083)%256;//定时器T0的高8位重新赋初值}〃实例47:
用定时器T1中断控制两个LED以不同周期闪烁
ttinclude
sbitD1二P2"0;〃将D1位定义为P2.0引脚
sbitD2二P2'l;〃将D2位定义为P2.1引脚unsignedcharCountor1:
//设置全局变量,储存定时器T1中断次数
unsignedcharCountor2;//设置全局变量,储存定时器T1中断次数
voidmain(void)
EA二1;
〃开总中断
ET1二1;
//定时器T1中断允许
TM0D=0xl0;
〃使用定时器T1的模式1
TH1二(65536-46083)/256;//定时器T1的高8位赋初值
TL1=(65536-46083)%256;//定时器T1的高8位赋初值
TR1二1;
//启动定时器T1
Countorl二0;
〃从0开始累计中断次数
Countor2=0;
〃从0开始累计中断次数
while
(1);
}
voidTimel(void)interrupt3using0
{
Countorl++;//Countorl自加1
Countor2++;
//Countor2自加1
辻(Countorl=2)//若累计满2次,即计时满100ms
D1「D1;〃按位取反操作,将P2.0引脚输出电平取
Countorl=0;//将Countorl清0,重新从0开始计
}
辻(Countor2==8)//若累计满8次,即计时满400ms
{
D2二、D2;//按位取反操作,将P2.1引脚输出电平取
Countor2=0;//将Countorl清0,重新从0开始计
}
TH1二(65536-46083)/256;//定时器T1的高8位重新赋初值
TL1=(65536-46083)%256;//定时器T1的高8位重新赋初值
〃实例50-1:
输出50个矩形脉冲
#include
sbitu二P「4;//将11位定义为戸1.4
:
■尢•丄"KW•丄"■丄"■尢■丄■•丄"
函数功能:
延时约30ms(3*100*100二30000us二30m
■丄"■丄"%fx■丄"wx■丄"■丄"■丄"kw•["■丄"■丄"wx■丄"%fx■丄"%fx%Lr/
voiddelay30ms(void)
{unsignedcharm,n;
for(m二0;m<100;m++)
for(n=0;n<100;n++);}
voidmain(void)
{
unsignedchari;
u=l;//初始化输出高电平
for(i=0;i<50;i++)〃输出50个矩形脉冲{u二1;
delay30ms();
u二0;
delay30ms();}
while
(1):
}
〃实例50-2:
计数器TO统计外部脉冲数
ftinclude
//包含51单片机寄存器定义的头文件
voidmain(void)
1
TMOD二0x06;
//TMOD二00000110B,使用计数器TO的模式2
EA=1;
〃开总中断
ET0=0;
//不使用定时器T0的中断
TRO=1;
//启动T0
THO-O;
//计数器TO高8位赋初值
TLO二0;
//计数器TO低8位赋初值
while
(1)
〃无限循环,不停地将TLO计数结果送P1口
Pl二TLO;
}
〃实例51-2:
定时器TO的模式2测量正脉冲宽度
ftinclude
sbitui二P3~2;//将ui位定义为P3.0(INTO)引脚,表示输入电压
voidmain(void)
{
TMOD二0x0a;//TMOD二00001010B,使用定时器TO的模式2,GATE
置1
EA=1;//开总中断
ETO二0;//不使用定时器TO的中断
TRO二1;〃启动T0
THO二0;//计数器T0高8位赋初值
TLO二0;//计数器T0低8位赋初值
while
(1)//无限循环,不停地将TLO计数结果送P1口
{
wh订e(ui==0):
//INT0为低电平,T0不能启动
TLO二0;//INTO为高电平,启动T0计
时,所以将TLO清0
while(ui==l):
〃在INTO高电平期间,等待,计时
P1二TLO;//将计时结果送P1口显示
〃实例53:
用外中断0的中断方式进行数据釆集
#include
sbitS=P3~2;//将S位定义为P3.2,
voidmain(void)
{EA二1;
〃开放总中断
EXO=1;
//允许使用外中断
IT0=l;
//选择负跳变來触发外中断
Pl二Oxff;
while
(1);}
voidintO(void)interrupt0using0//外中断0的中断编号为0
{P1=>1;〃每产生一次中断请求,Pl取反一次。
}
〃实例54-1:
输出负脉宽为200微秒的方波
#include
sbitu二P「4;//将11位定义为戸1・4voidmain(void)
TM0D=0x02;
//TM0D-00000010B,使用定时器TO的模式
2
EA二1;
//开总中断
ETO二1;
//定时器T0中断允许
THO二256-200;
//定时器TO的高8位赋初值
TRO二1;〃启动定时器TO
while
(1):
}//无限循环,等待中断
voidTimeO(void)interrupt1using0//"interrupt"声明函数为中
断服务函数
{u「u;〃将Pl.4引脚输出电平取反,产生方波
}
〃实例54-2:
测量负脉冲宽度
ttinclude
sbitu二P3"2;//将u位定义为P3.2
voidmain(void)
{
TMOD二0x02;//TMOD二00000010B,使用定时器TO的模式2
EA=1;//开放总中断
EXO二1;〃允许使用外中断
IT0二1;〃选择负跳变来触发外中断
ETO二1;//允许定时器T0中断
THO二0;//定时器T0赋初值0
TLO二0;//定时器T0赋初值0
TRO二0;//先关闭T0
while
(1);//无限循环,不停检测输入负脉冲宽度
}voidintO(void)interrupt0using0//外中断0的中断编号为0
{TRO二1;//外中断一到来,即启动TO计时
TLO二0;//从0开始计时
while(u~0)//低电平时,等待T0计时
P1二TLO;//将结果送P1口显示
TRO二0;//关闭T0
〃实例55:
方式0控制流水灯循环点亮
#include
#include
Tab□二{OxFE,OxFD,OxFB,0xF7,OxEF,OxDF,OxBF,0x7F};//流水灯控制码,该数组被定义为全局变量
sbitP17二P「7;
:
■丄"■丄"■丄■■士■丄"■丄"■丄"■丄"■丄"kIx■丄"WX■丄"■丄"■丄"■丄"■尢vlx■丄"■丄"
函数功能:
延时约150ms
■]“■>■丄"■丄"kIx■丄"%tx■>•["■丄"%Lz•丄"■丄"W>■["■丄"■"WX■”•丄"■丄"/
voiddelay(void)unsignedcharm,n;
for(m=0;m<200;m++)
/KWWX■丄"■尢■”■>%fx■“■丄"■"K^ZWX■”WX■丄"■"•丄"^fx%f>>A^■丄■%lz£"%fx■>■丄■%fx%txWX■”xl^•>■丄"■丄"W>
<1^*1^
函数功能:
发送一个字节的数据
%f>•>■丄"■丄"■丄"■丄"■丄"0丄"■丄"■丄"■丄"■["■>£"■丄"■["•丄"•丄"■"・丄"■"■>■丄"■丄"■["■丄"■丄"%lx■>K^■尢vlxWX■["•丄"/
voidSend(unsignedchardat)
P17二0;
//Pl.7引脚输出清0信号,对74LS164清0
_nop_();
//延时一个机器周期
_nop_();
//延时一个机器周期,保证清0完成
P17=l;
〃结束对74LS164的清0
SBUF二dat;
//将数据写入发送缓冲器,启动发送
while(TI=0)//若没有发送完毕,等待
TI=0;//发送完毕,TI被置“1”,需将其清0
}
:
•丄"■丄"■”■丄"■”■丄"■"■丄"■”■丄"■"■>•丄"■["■>%fx■尢■丄"■丄"■"■>■丄"■"v^z•丄"■丄"
函数功能: 主函数 %! >%tzKW%f>%lz%^Z%f>%l^kL^^tz%f>■丄"%fx■卜%tz voidmain(void) unsignedchari; SCON二0x00;//SCON二00000000B,使串行口工作于方式0 while (1) for(i=0;i<8;i++) Send(Tab[i]);//发送数据 delay();//延时 }}
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 中断 程序 大全