大家好,又见面了,我是你们的朋友全栈君。
实验名称:单片机定时器实验
实验环境:普中实验系统;Keil μVision 4软件; 实验目的: (1)掌握单片机定时器的原理和控制方法。 (2)通过编程利用定时器实现定时功能,并利用该定时功能实现时钟分、秒的功能。 硬件连线: P2^1口连接led1 P2^3 口连接led3 P2^5 口连接led5 P2^7 口连接led7
实验主要代码: /**************************************************************************************
代码语言:javascript复制 定时器0实验
***************************************************************************************/
代码语言:javascript复制#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.cn/158876.html原文链接:https://javaforall.cn