单片机定时器使用程序及实验 

loading 分享 2026-10-17 下载文档

//实验一:定时器使用 //基本要求:

1.学会使用PROTEUS软件

2.学会单片机的定时器使用,验证定时器的功能 //较高要求

能用单片机完成一些较综合的程序编写,如:

1.二极管安设定的频率(1Hz)闪烁(用示波器观察)即输出方波 2.输出占空比为40%的方波。

3.改变波形占空比,通过按键实现。

//二极管安设定的频率(1KHz)闪烁(用示波器观察)即输出方波 //////////////////////////////////////定时1ms,晶振的频率为11.0592MHZ #include void main() { EA = 0;//EA=0 中断总禁止,禁止所有中断。 //EA=1 中断总允许,总允许后中断的禁止或允许由各中断源的中断允许控制位进行设里。 TMOD &= 0x0F;// /* TMOD的高四位对应定时器1,将高四位清零 1、GATE 门控位 GATE=0以运行控制位TR启动定时器 GATE=1以外中断请求信号(/IMT0或/INT1)启动定时器 2、C/T 定时方式或计数方式选择位 C/T=0定时工作方式 C/T=l计数工作方式 3、M1、M0 工作方式选择位 M1、M0=00 方式0 M1、M0=01 方式1 M1、M0=10 方式2 M1、M0=11 方式3 */ TMOD |= 0x10; /* TMOD的第五位置一 即选择工作方式一搞:16位定时器模式 M1、M0=01 方式1 */ TH1 = 0xfc;//给定时器计数器的高八位赋值

}

TL1 = 0x66;//给定时器计数器的低八位赋值 /* 计算方法: 定时时间=(2exp16一计数初值)×晶振周期×12 */

TR1 = 1;//定时器1开始计时

while(1) { while(TF1==1) { TF1=0; TR1 = 0; //暂时停止定时器(在重新设置初值之前必须暂停) TH1 = 0xfc; TL1 = 0x66; //重新设置定时器初值,设置时间为1ms TR1 = 1; //重新启动定时器 P3=~P3; } }

//二极管安设定的频率(1Hz)闪烁(用示波器观察)即输出方波

#include void main() { unsigned int num=0;// EA = 0;//EA=0 中断总禁止,禁止所有中断。 TMOD &= 0x0F;// TMOD |= 0x10;/* GATE=0以运行控制位TR启动定时器 C/T=0定时工作方式 M1、M0=01 方式1 */ TH1 = 0xfc;//给定时器计数器的高八位赋值 TL1 = 0x66;//给定时器计数器的低八位赋值 /* 计算方法: 定时时间=(2exp16一计数初值)×晶振周期×12 采用11.0592MHz的晶振,定时时间1ms */ TR1 = 1;//定时器1开始计时 while(1) { while(TF1==1) { TF1=0; TR1 = 0; //暂时停止定时器(在重新设置初值之前必须暂停) TH1 = 0xfc; TL1 = 0x66; //重新设置定时器初值,设置时间为1ms TR1 = 1; //重新启动定时器 if(num==1000) //是否定时了1000次,1ms的时间 { num=0; P3=~P3; //P3取反 } else num++; } } }

//2.输出占空比为40%的方波。

#include void main() { unsigned int num=0;// EA = 0;//EA=0 中断总禁止,禁止所有中断。 TMOD &= 0x0F;// TMOD |= 0x10;/* GATE=0以运行控制位TR启动定时器 C/T=0定时工作方式 M1、M0=01 方式1 */ TH1 = 0xfc;//给定时器计数器的高八位赋值 TL1 = 0x66;//给定时器计数器的低八位赋值 /* 计算方法: 定时时间=(2exp16一计数初值)×晶振周期×12 采用11.0592MHz的晶振,定时时间1ms */ TR1 = 1;//定时器1开始计时 while(1) { while(TF1==1) { TF1=0; TR1 = 0; //暂时停止定时器(在重新设置初值之前必须暂停) TH1 = 0xfc; TL1 = 0x66; //重新设置定时器初值,设置时间为1ms TR1 = 1; //重新启动定时器 num++; if(num<5) //是否定时了10次,10ms的时间 { P3=1; //P3高电平 } else {

if(num==10) {

num=0; }

P3=0; //P3低电平 } } } }

//改变波形占空比,通过按键实现。 #include sbit key0 = P2^4;//减 sbit key1 = P2^5;//加

////////////// void delay() { unsigned char i,j; for(i=0;i<50;i++) for(j=0;j<100;j++);//软件延时 }

//////////////////////////////////////////////// unsigned char key_scan() {

unsigned char k=0; k=P2&0X30;

if(k!=0x30)//是否有键按下? { delay(); //有键按下,延时一段时间 k=P2&0X30; ///检测按键引脚状态 if(k!=0x30)// 是否有键按下? switch(k)//是那个键按下? { case 0X10: {while((P2&0X30)!=0X30); return(1);} 下时,返回1 case 0X20: {while((P2&0X30)!=0X30); return(2);} 下时,返回2 default: return(0); break;//其他情况,返回0 } else return(0); } else return(0); }

void main() { unsigned int num=0;// unsigned char key;//键盘值 unsigned char total=0;

break;//加键按break;//减键按


单片机定时器使用程序及实验 .doc 将本文的Word文档下载到电脑
搜索更多关于: 单片机定时器使用程序及实验  的文档
相关推荐
相关阅读