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

  • 格式:doc
  • 大小:51.00 KB
  • 文档页数:7

下载文档原格式

  / 7
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
case 0X20: {while((P2&0X30)!=0X30); return(2);} break;//减键按下时,返回2
default: return(0); break;//其他情况,返回0
}
else
return(0);
}
else
return(0);
}
void main()
{
unsigned int num=0;//
break;
default: break;
}
while(TF1==1)
{
TF1=0;
TR1 = 0;//暂时停止定时器(在重新设置初值之前必须暂停)
TH1 = 0xfc;
TL1 = 0x66;//重新设置定时器初值,设置时间为1ms
TR1 = 1;//重新启动定时器
num++;
P1=total;
if(num<total) //是否定时了10次,10ms的时间
k=P2&0X30;
if(k!=0x30)//是否有键按下?
{
delay();//有键按下,延时一段时间
k=P2&0X30; ///检测按键引脚状态
if(k!=0x30)//是否有键按下?
switch(k)//是那个键按下?
{
case 0X10: {while((P2&0X30)!=0X30); return(1);} break;//加键按下时,返回1
{
P3=1;//P3高电平
}
else
{
if(num==255)
{
num=0;
}
P3=0; //P3低电平
}
}
}
}
TR1 = 1;//重新启动定时器
P3=~P3;
}
}
}
//二极管安设定的频率(1Hz)闪烁(用示波器观察)即输出方波
#include <reg51.h>
void main()
{
unsigned int num=0;//
EA = 0;//EA=0中断总禁止,禁止所有中断。
TMOD &= 0x0F;//
unsigned char key;//键盘值
unsigned char total=0;
EA = 0;//EA=0中断总禁止,禁止所有中断。
TMOD &= 0x0F;//
TMOD |= 0x10;/*
GATE=0以运行控制位TR启动定时器
C/T=0定时工作方式
M1、M0=01方式1
*/
TH1 = 0xfc;//给定时器计数器的高八位赋值
{
unsigned char i,j;
for(i=0;i<50;i++)
for(j=0;j<100;j++);//软件延时
}
////////////////////////////////////////////////
unsigned char key_scan()
{
unsigned char k=0;
switch(key)//判断是那个键按下
{
case 1: //当是加键按下时,
if(total==250)//
{
total=0;
}
else
total=total+10;
break;
case 2://当时减键按下时
if(total==0)
{
total=250;
}பைடு நூலகம்
else
total=total-10;
{
P3=1;//P3高电平
}
else
{
if(num==10)
{
num=0;
}
P3=0; //P3低电平
}
}
}
}
//改变波形占空比,通过按键实现。
#include <reg51.h>
sbit key0 = P2^4;//减
sbit key1 = P2^5;//加
//////////////
void delay()
*/
TR1 = 1;//定时器1开始计时
while(1)
{
while(TF1==1)
{
TF1=0;
TR1 = 0;//暂时停止定时器(在重新设置初值之前必须暂停)
TH1 = 0xfc;
TL1 = 0x66;//重新设置定时器初值,设置时间为1ms
TR1 = 1;//重新启动定时器
if(num==1000) //是否定时了1000次,1ms的时间
/*
计算方法:
定时时间=(2exp16一计数初值)×晶振周期×12
*/
TR1 = 1;//定时器1开始计时
while(1)
{
while(TF1==1)
{
TF1=0;
TR1 = 0;//暂时停止定时器(在重新设置初值之前必须暂停)
TH1 = 0xfc;
TL1 = 0x66;//重新设置定时器初值,设置时间为1ms
TMOD |= 0x10;/*
GATE=0以运行控制位TR启动定时器
C/T=0定时工作方式
M1、M0=01方式1
*/
TH1 = 0xfc;//给定时器计数器的高八位赋值
TL1 = 0x66;//给定时器计数器的低八位赋值
/*
计算方法:
定时时间=(2exp16一计数初值)×晶振周期×12
采用11.0592MHz的晶振,定时时间1ms
TL1 = 0x66;//给定时器计数器的低八位赋值
/*
计算方法:
定时时间=(2exp16一计数初值)×晶振周期×12
采用11.0592MHz的晶振,定时时间1ms
*/
TR1 = 1;//定时器1开始计时
while(1)
{
key=key_scan();//调用键盘扫描程序,扫描那个键按下,并将返回值传给key.
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;//给定时器计数器的低八位赋值
//实验一:定时器使用
//基本要求:
1.学会使用PROTEUS软件
2.学会单片机的定时器使用,验证定时器的功能
//较高要求
能用单片机完成一些较综合的程序编写,如:
1.二极管安设定的频率(1Hz)闪烁(用示波器观察)即输出方波
2.输出占空比为40%的方波。
3.改变波形占空比,通过按键实现。
//二极管安设定的频率(1KHz)闪烁(用示波器观察)即输出方波
C/T=0定时工作方式
M1、M0=01方式1*/
TH1 = 0xfc;//给定时器计数器的高八位赋值
TL1 = 0x66;//给定时器计数器的低八位赋值
/*计算方法:
定时时间=(2exp16一计数初值)×晶振周期×12
采用11.0592MHz的晶振,定时时间1ms*/
TR1 = 1;//定时器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工作方式选择位
//////////////////////////////////////定时1ms,晶振的频率为11.0592MHZ
#include <reg51.h>
void main()
{
EA = 0;//EA=0中断总禁止,禁止所有中断。
//EA=1中断总允许,总允许后中断的禁止或允许由各中断源的中断允许控制位进行设里。
while(1)
{
while(TF1==1)
{
TF1=0;
TR1 = 0;//暂时停止定时器(在重新设置初值之前必须暂停)
TH1 = 0xfc;
TL1 = 0x66;//重新设置定时器初值,设置时间为1ms
TR1 = 1;//重新启动定时器
num++;
if(num<5) //是否定时了10次,10ms的时间
{
num=0;
P3=~P3;//P3取反
}
else
num++;
}
}
}
//2.输出占空比为40%的方波。
#include <reg51.h>
void main()
{
unsigned int num=0;//
EA = 0;//EA=0中断总禁止,禁止所有中断。
TMOD &= 0x0F;//
TMOD |= 0x10;/*GATE=0以运行控制位TR启动定时器