实验目的:
- 掌握定时器的原理及常用工作方式;
- 能够根据特定任务需求选择合适的工作方式实现定时
实验要求:
1、采用51单片机定时器0或定时1实现定时,注释清楚TMOD及初值来源;(40分)s
2、要求定时器每50毫秒P2.0引脚输出一次5毫秒的高电平脉冲;(30分)
3、第5次50毫秒完成后,在P2.0引脚输出5毫秒的高电平脉冲同时在P2.1引脚也输出10毫秒的高电平脉冲。(30分)
提交材料:
源代码:
#include "reg52.h" //此文件中定义了单片机的一些特殊功能寄存器
typedef unsigned int u16; //对数据类型进行声明定义
typedef unsigned char u8;
sbit led1=P2^0;
sbit led2=P2^1;
u8 n1,n2;
u8 DisplayData[8];
//延时函数,当i=1时,延时10us/
void delay(u16 i)
{
while(i--);
}
//定时器0初始化
void Timer0Init()
{
TMOD|=0X01;//设置定时器0模式为工作方式1(M1M0为01),仅用TR0打开启动。
TH0=(65536-9174)/256; //因初值11.0592M晶振,定时10ms数为9174
TL0=(65536-9174)%256;
ET0=1;//打开定时器0中断允许
EA=1;//打开总中断
TR0=1;//打开定时器
}
void main()
{
Timer0Init(); //定时器0初始化
while(1);
}
//定时器0中断函数
void Timer0() interrupt 1
{
TH0=(65536-9174)/256; //给定时器赋初值,定时10ms数为9174
TL0=(65536-9174)%256;
n1++;
if(n1==5)//亮led1
{
led1=0;
delay(500); //亮5ms
led1=1;
}
if(n1>=5)
{
n1=0;
n2++;
if(n2==5)//亮led2
{
led2=0;
delay(1000);//亮10ms
led2=1;
n2=0;
}
}
}
实验心得
通过本次实验设计使我感受到它是一门综合性、实践性较强的课程,使我体,会到要想综合运用所学的理论知识,提高我的设计能力,必须增加实际操作的环节。这次课程设计不仅培养了我们的实际动手能力,更检验了我们对本门课学习的情况,培养我们严肃认真的学习态度。真正做到理论联系实际,提高动手能力和分析问题、解决问题的能力,并能用设计报告表达设计思想和结果的能力正是我这次课程的目的。在定时器计数度器模式寄存器里M1M0:定时/计数器一共有四种工作方式,就是用M1M0来控制的,2位正好是四种组合。我们知道定时器的工作方式1是16位的定时/计数方式,将M1M0设为01即可,其它特性与工作方式0相同。
该实验旨在掌握51单片机定时器原理,利用定时器0或1设置50毫秒周期,使得P2.0引脚每50毫秒输出5毫秒高电平。在第5次周期后,P2.1引脚额外输出10毫秒高电平。实验要求注释TMOD寄存器配置和初值设定,通过实际操作提升理论与实践结合能力,检验学习效果。

1816

被折叠的 条评论
为什么被折叠?



