好文档 - 专业文书写作范文服务资料分享网站

C51单片机C语言程序100例 - Keil 

天下 分享 时间: 加入收藏 我要投稿 点赞

/********************************************************

*********中断、定时器********中断、定时器************

*********中断、定时器*********中断、定时器************

********************************************************/

//实例42:用定时器T0 查询方式P2口8 位控制LED闪烁

#include // 包含51单片机寄存器定义的头文件

/************************************************************** 函数功能:主函数

**************************************************************/ voidmain(void) {

// EA=1; //开总中断

// ET0=1; //定时器T0中断允许

TMOD=0x01; //使用定时器T0的模式1 TH0=(65536-46083)/256; //定时器T0的高8位赋初值 TL0=(65536-46083)%6; //定时器T0的高8 位赋初值 TR0=1; //启动定时器T0 TF0=0; P2=0xff;

while(1)//无限循环等待查询 {

while(TF0==0)

; TF0=0; P2=~P2;

TH0=(65536-46083)/256; //定时器T0的高8位赋初值 TL0=(65536-46083)%6; //定时器T0的高8 位赋初值 } }

//实例43:用定时器T1查询方式控制单片机发出1KHz音频

#include // 包含51单片机寄存器定义的头文件 sbitsound=P3^7; //将sound 位定义为P3.7引脚

331/ 192

/************************************************************** 函数功能:主函数

**************************************************************/ voidmain(void) {

// EA=1; //开总中断

// ET0=1; //定时器T0中断允许

TMOD=0x10; //使用定时器T1的模式1 TH1=(65536-921)/256; //定时器T1的高8位赋初值 TL1=(65536-921)%6; //定时器T1的高8位赋初值 TR1=1; //启动定时器T1 TF1=0;

while(1)//无限循环等待查询 {

while(TF1==0)

; TF1=0;

sound=~sound; //将P3.7引脚输出电平取反

TH1=(65536-921)/256; //定时器T0的高8位赋初值 TL1=(65536-921)%6; //定时器T0的高8位赋初值 } }

// 44 T0 P1 8 LED //实例44:将计数器T0 计数的结果送P1 口8 位LED显示

#include // 包含51单片机寄存器定义的头文件 sbitS=P3^4; //将S 位定义为P3.4引脚

/************************************************************** 函数功能:主函数

**************************************************************/ voidmain(void) {

// EA=1; //开总中断

// ET0=1; //定时器T0中断允许

TMOD=0x02; //使用定时器T0的模式2 TH0=256-156; //定时器T0 的高8位赋初值 TL0=256-156; //定时器T0的高8位赋初值 TR0=1; //启动定时器T0 while(1)//无限循环等待查询 {

while(TF0==0) //如果未计满就等待

332/ 192

{

if(S==0) //按键S按下接地,电平为0

P1=TL0;//计数器TL0加1后送P1口显示

}

TF0=0; //计数器溢出后,将TF0清0

} }

//实例45:用定时器T0的中断控制1位LED闪烁

#include // 包含51单片机寄存器定义的头文件 sbitD1=P2^0; //将D1位定义为P2.0引脚

/************************************************************** 函数功能:主函数

**************************************************************/ voidmain(void) {

EA=1; //开总中断

ET0=1; //定时器T0中断允许

TMOD=0x01; //使用定时器T0的模式2 TH0=(65536-46083)/256;//定时器T0的高8位赋初值 TL0=(65536-46083)%6;//定时器T0的高8位赋初值 TR0=1; //启动定时器T0 while(1)//无限循环等待中断

; }

/************************************************************** 函数功能:定时器T0的中断服务程序

**************************************************************/ voidTime0(void)interrupt1using0//“interrupt”声明函数为中断服务函数

//其后的1为定时器T0的中断编号;0表示使用第0组工作

寄存器 {

D1=~D1; //按位取反操作,将P2.0引脚输出电平取反 TH0=(65536-46083)/256;//定时器T0的高8位重新赋初值 TL0=(65536-46083)%6;//定时器T0的高8位重新赋初值 }

33/ 192 3

// 46 T0

//实例46:用定时器T0 的中断实现长时间定时

#include // 包含51单片机寄存器定义的头文件 sbitD1=P2^0; //将D1位定义为P2.0引脚

unsignedcharCountor;//设置全局变量,储存定时器T0 中断次数

/************************************************************** 函数功能:主函数

**************************************************************/ voidmain(void) {

EA=1; //开总中断

ET0=1; //定时器T0中断允许

TMOD=0x01; //使用定时器T0的模式2 TH0=(65536-46083)/256;//定时器T0的高8位赋初值 TL0=(65536-46083)%6;//定时器T0的高8位赋初值 TR0=1; //启动定时器T0

Countor=0; //从0开始累计中断次数 while(1)//无限循环等待中断

; }

/************************************************************** 函数功能:定时器T0的中断服务程序

**************************************************************/ voidTime0(void)interrupt1using0//“interrupt”声明函数为中断服务函数

//其后的1为定时器T0的中断编号;0表示使用第0组工作

寄存器 {

Countor++; //中断次数自加1

if(Countor==20) //若累计满20次,即计时满1s {

D1=~D1; //按位取反操作,将P2.0引脚输出电平取反 Countor=0; //将Countor清0,重新从0开始计数 }

TH0=(65536-46083)/256;//定时器T0的高8位重新赋初值 TL0=(65536-46083)%6;//定时器T0的高8位重新赋初值 }

//实例47:用定时器T1 中断控制两个LED以不同周期闪烁

#include // 包含51单片机寄存器定义的头文件 sbitD1=P2^0; //将D1位定义为P2.0引脚

334/ 192

sbit D2=P2^1; //将D2位定义为P2.1引脚

unsignedcharCountor1;//设置全局变量,储存定时器T1中断次数 unsignedcharCountor2;//设置全局变量,储存定时器T1中断次数

/************************************************************** 函数功能:主函数

**************************************************************/ voidmain(void) {

EA=1; //开总中断

ET1=1; //定时器T1中断允许

TMOD=0x10; //使用定时器T1的模式1 TH1=(65536-46083)/256;//定时器T1的高8位赋初值 TL1=(65536-46083)%6;//定时器T1的高8位赋初值 TR1=1; //启动定时器T1

Countor1=0; //从0开始累计中断次数 Countor2=0; //从0开始累计中断次数 while(1)//无限循环等待中断

; }

/************************************************************** 函数功能:定时器T1的中断服务程序

**************************************************************/ voidTime1(void)interrupt3using0//“interrupt”声明函数为中断服务函数

//其后的3为定时器T1的中断编号;0表示使用第0组工作

寄存器 {

Countor1++; //Countor1自加1 Countor2++; //Countor2自加1

if(Countor1==2) //若累计满2 次,即计时满100ms

{

D1=~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)%6;//定时器T1的高8位重新赋初值 }

33/ 192 5

C51单片机C语言程序100例 - Keil 

/*****************************************************************中断、定时器********中断、定时器*********************中断、定时器*********中断、定时器************
推荐度:
点击下载文档文档为doc格式
8pn4b0vxbc6m3qp9xkwe9ersa9pruq00xab
领取福利

微信扫码领取福利

微信扫码分享