C51单片机实验——定时器实验

C51单片机实验——定时器实验实验名称:单片机定时器实验实验环境:普中实验系统;KeilμVision4软件;实验目的:(1)掌握单片机定时器的原理和控制方法。(2)通过编程利用定时器实现定时功能,并利用该定时功能实现时钟分、秒的功能。硬件连线:P2^1口连接led1P2^3口连接led3P2^5口连接led5P2^7口连接led7实验主要代码:/********************************************************************************

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

实验名称:单片机定时器实验

实验环境:普中实验系统;Keil μVision 4软件;
实验目的:
(1)掌握单片机定时器的原理和控制方法。
(2)通过编程利用定时器实现定时功能,并利用该定时功能实现时钟分、秒的功能。
硬件连线:
P2^1口连接led1
P2^3 口连接led3
P2^5 口连接led5
P2^7 口连接led7

实验主要代码:
/**************************************************************************************

  •                 定时器0实验											
    

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

#include "reg52.h" //此文件中定义了单片机的一些特殊功能寄存器

typedef unsigned int u16;	  //对数据类型进行声明定义
typedef unsigned char u8;

sbit led1=P2^1;	 //定义P2^1口是led1
sbit led3=P2^3;	 //定义P2^3口是led3
sbit led5=P2^5;	 //定义P2^5口是led5
sbit led7=P2^7;	 //定义P2^7口是led7

/******************************************************************************* * 函 数 名 : Timer0Init * 函数功能 : 定时器0初始化 * 输 入 : 无 * 输 出 : 无 *******************************************************************************/
void Timer0Init()
{ 
   
	TMOD|=0X01;//选择为定时器0模式,工作方式1,仅用TR0打开启动。

	TH0=0XE6;	//给定时器赋初值,定时7ms 高位
	TL0=0XCC;				  //低位,计算初值 方式0,16位计数2^16=65535us
	ET0=1;//打开定时器0中断允许
	EA=1;//打开总中断
	TR0=1;//打开定时器 
}

/******************************************************************************* * 函 数 名 : main * 函数功能 : 主函数 * 输 入 : 无 * 输 出 : 无 *******************************************************************************/
void main()
{ 
   	
	Timer0Init();  //定时器0初始化
	while(1);		
}

/******************************************************************************* * 函 数 名 : void Timer0() interrupt 1 * 函数功能 : 定时器0中断函数 * 输 入 : 无 * 输 出 : 无 *******************************************************************************/
void Timer0() interrupt 1			 //中断号1,定时器1
{ 
   
	static u16 i;
	TH0=0XE6;	//给定时器赋初值,定时1ms
	TL0=0XCC;
	i++;
	if(i==1000)
	{ 
   
		i=0;
		led1=~led1;	
		led3=~led3;
		led5=~led5;
		led7=~led7;
	}	
}

实验结果与心得:
实验结果:定时7s,小灯1,3,5,7实现闪烁的效果

心得:1.采用定时器T0的方式1的定时中断方式时,需要先设置TOMD寄存器,定时器T0工作在方式1,M1,M0=01,C/T=0为定时器工作模式,GATE=0.所以TMOD初始化值为00×01.
2.计算定时器T0的计数初值
计算过程:7ms=7000us
7000=(2^16-计数初值)*12/11.0592
得计数初值X为59084.8
转换十六进制E6CCH
TH0=0XE6H
TL0=0XCCH
3.毫秒与秒的转换,进制1000
7ms循环1000次为定时7s
4.定时器模式是对单片机系统时钟信号经片内12分频后的内部脉冲信号(脉冲信号周期=机器周期)计数。由于系统时钟频率是定值,所以可根据计数值计算出准确的定时时间。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/158876.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Linux三剑客(grep、sed、awk)

    下面所说的是Linux中最重要的三个命令在业界被称为“三剑客”,它们是awk,sed,grep。我们现在知道Linux下一切皆文件,对Linux的操作就是对文件的处理,那么怎么能更好的处理文件呢?这就要用到我们上面的三剑客命令。在说这三个命令前我们要插入一个小插曲就是“正则表达式”。一、正则表达式所谓的正则表达式我个人理解就是正规的表示方法。他是用简…

    2022年4月4日
    83
  • gear s3刷android wear,【干货】三星Gear S3/Gear S3 classic 智能手表刷机教程「建议收藏」

    gear s3刷android wear,【干货】三星Gear S3/Gear S3 classic 智能手表刷机教程「建议收藏」今年九月在IFA电子展正式亮相的三星GearS3在本月即将在国内开卖,目前不少电商的商家已经为这款新品进行预热,从电商的价格来看这两款定位不同的智能手表(经典款/先锋款)的价格都为3599元,三星GearS3支持IP68级别防水,兼容Android4.4以及之后的安卓系统版本以及运存1.5GB以上的安卓智能手机。与苹果AppleWatch有诊断接口但是无法刷机不同,三星GearS系列手表支…

    2022年7月21日
    64
  • GridData

    GridDataGridLayout//容器下面元素的列数,makeColumnsEqualWidth是否相同大小单元格publicGridLayout(intnumColumns,booleanmakeColumnsEqualWidth);GridData类可以与GridLayout类配合使用,其中构造函数有:[code="java"]publicGridData();…

    2022年5月9日
    80
  • 个人整理的一些net 开源项目

    个人整理的一些net 开源项目net开源商城:BrnMall地址 http://www.brnshop.com/ 技术架构很不错;官方提供技术支持,有博客有视频介绍;官方技术博客:http://www.cnblogs.com/wheretime/官方视频下载地址:http://pan.baidu.com/s/1dDCKQXj真乃业界良心之作;风格和天猫京东各大商城接近;后台都很好;

    2022年7月15日
    13
  • Java面试基本问题

    点击上方“全栈程序员社区”,星标公众号 重磅干货,第一时间送达 Q1。解释JDK,JRE和JVM? JDK JRE JVM Java开发工具包。 Java运行时环境。 Java虚拟…

    2021年6月23日
    106
  • oracle获取当前系统时间的函数_oracle数据库系统时间查询

    oracle获取当前系统时间的函数_oracle数据库系统时间查询selectto_char(sysdate,’yyyy-mm-ddhh24:mi:ss’)fromdual;ORACLE里获取一个时间的年、季、月、周、日的函数selectto_char(sysdate,’yyyy’)fromdual;–年selectto_char(sysdate,’MM’)fromdual;–月selectto_ch

    2022年10月9日
    3

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号