单片机中断程序大全Word格式文档下载.docx

上传人:b****4 文档编号:17986488 上传时间:2022-12-12 格式:DOCX 页数:13 大小:116.68KB
下载 相关 举报
单片机中断程序大全Word格式文档下载.docx_第1页
第1页 / 共13页
单片机中断程序大全Word格式文档下载.docx_第2页
第2页 / 共13页
单片机中断程序大全Word格式文档下载.docx_第3页
第3页 / 共13页
单片机中断程序大全Word格式文档下载.docx_第4页
第4页 / 共13页
单片机中断程序大全Word格式文档下载.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

单片机中断程序大全Word格式文档下载.docx

《单片机中断程序大全Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《单片机中断程序大全Word格式文档下载.docx(13页珍藏版)》请在冰豆网上搜索。

单片机中断程序大全Word格式文档下载.docx

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();

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工作范文 > 制度规范

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1