STM32f107定时器应用

STM32f107定时器应用
STM32f107定时器应用

//

//

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

** 文件名称: STM32f107 T1定时器应用

** 功能描述:

** 参数: None

** 返回值: None

** 作者: 汪仁海

** 日期: 2012年2月17日

**---------------------------------------------------------------------------------------

** 修改人:

** 日期:

**---------------------------------------------------------------------------------------

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

#include "main.h"

int time1_NUM;

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

函数: void Timer1_Configuration(void)

功能: TIM1 配置

参数: 无

返回: 无

定时计算:(1 /(72 / (36 - 1 + 1))) * 2000 us = 1000us = 1ms

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

void Timer1_Configuration(void)

{

TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;

RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE); //打开TIM1定时器的时钟

TIM_DeInit(TIM1); //TIMx寄存器重设为缺省值

TIM_TimeBaseStructure.TIM_Period = 200; //自动重装载寄存器周期的值

TIM_TimeBaseStructure.TIM_Prescaler=36 - 1; //TIMx时钟频率除数的预分频值

TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1; //采样分频

TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up; //向上计数模式

TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStructure);

//清中断,以免一启用中断后立即产生中断

TIM_ClearFlag(TIM1, TIM_FLAG_Update);

TIM_ARRPreloadConfig(TIM1, ENABLE); //允许自动重装载寄存器(ARR)

TIM_ITConfig(TIM1,TIM_IT_Update,ENABLE); //允许TIM1溢出中断

TIM_Cmd(TIM1, ENABLE); //TIM1开启时钟

time1_NUM=0;

}

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

函数: void TIM1_IRQHandler(void)

功能: TIM1中断处理函数

参数: 无

返回: 无

说明:1ms中断1次

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

void TIM1_UP_IRQHandler(void)

{

if(TIM_GetITStatus(TIM1,TIM_IT_Update)!=RESET)

{

TIM_ClearITPendingBit(TIM1,TIM_IT_Update); //清除中断标志

if(time1_NUM<=900) //

{

time1_NUM++;

}

else

{

time1_NUM=0;

//Uart1_PutChar(0xfa);

//Uart5_PutChar(0x11);

//Uart3_PutChar(0xdd);

}

//

}

}

//

//

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

** 文件名称: STM32f107 T2定时器应用

** 功能描述:

** 参数: None

** 返回值: None

** 作者: 汪仁海

** 日期: 2012年2月17日

**---------------------------------------------------------------------------------------

** 修改人:

** 日期:

**---------------------------------------------------------------------------------------

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

#include "main.h"

int time2_NUM;

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

函数: void Timer2_Configuration(void)

功能: TIM2 配置

参数: 无

返回: 无

定时计算:(1 /(72 / (36 - 1 + 1))) * 2000 us = 1000us = 1ms

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

void Timer2_Configuration(void)

{

TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;

RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE); //打开TIM2定时器的时钟

TIM_DeInit(TIM2); //TIMx寄存器重设为缺省值

TIM_TimeBaseStructure.TIM_Period = 2000; //自动重装载寄存器周期的值

TIM_TimeBaseStructure.TIM_Prescaler=36 - 1; //TIMx时钟频率除数的预分频值

TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1; //采样分频

TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up; //向上计数模式

TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);

//清中断,以免一启用中断后立即产生中断

//TIM_ClearFlag(TIM2, TIM_FLAG_Update);

TIM_ARRPreloadConfig(TIM2, ENABLE); //允许自动重装载寄存器(ARR)

TIM_ITConfig(TIM2,TIM_IT_Update,ENABLE); //允许TIM2溢出中断

TIM_Cmd(TIM2, ENABLE); //TIM2开启时钟

time2_NUM=0;

}

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

函数: void TIM2_IRQHandler(void)

功能: TIM2中断处理函数

参数: 无

返回: 无

说明:1ms中断1次

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

void TIM2_IRQHandler(void)

{

if(TIM_GetITStatus(TIM2,TIM_IT_Update)!=RESET)

{

TIM_ClearITPendingBit(TIM2,TIM_IT_Update); //清除中断标志

if(time2_NUM<=80) //

{

time2_NUM++;

}

else

{

time2_NUM=0;

//Uart5_PutChar(0x22);

//Uart1_PutChar('2');

}

//

}

}

//

//

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

** 文件名称: STM32f107 T3定时器应用

** 功能描述:

** 参数: None

** 返回值: None

** 作者: 汪仁海

** 日期: 2012年2月17日

**---------------------------------------------------------------------------------------

** 修改人:

** 日期:

**---------------------------------------------------------------------------------------

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

#include "main.h"

int time3_NUM;

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

函数: void Timer3_Configuration(void)

功能: TIM3 配置

参数: 无

返回: 无

定时计算:(1 /(72 / (36 - 1 + 1))) * 2000 us = 1000us = 1ms

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

void Timer3_Configuration(void)

{

TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;

RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE); //打开TIM3定时器的时钟

TIM_DeInit(TIM3); //TIMx寄存器重设为缺省值

TIM_TimeBaseStructure.TIM_Period = 2000; //自动重装载寄存器周期的值

TIM_TimeBaseStructure.TIM_Prescaler=36 - 1; //TIMx时钟频率除数的预分频值

TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1; //采样分频

TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up; //向上计数模式

TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);

//清中断,以免一启用中断后立即产生中断

//TIM_ClearFlag(TIM3, TIM_FLAG_Update);

TIM_ARRPreloadConfig(TIM3, ENABLE); //允许自动重装载寄存器(ARR)

TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE); //允许TIM3溢出中断

TIM_Cmd(TIM3, ENABLE); //TIM3开启时钟

time3_NUM=0;

}

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

函数: void TIM2_IRQHandler(void)

功能: TIM3中断处理函数

参数: 无

返回: 无

说明:1ms中断1次

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

void TIM3_IRQHandler(void)

{

if(TIM_GetITStatus(TIM3,TIM_IT_Update)!=RESET)

{

TIM_ClearITPendingBit(TIM3,TIM_IT_Update); //清除中断标志

if(time3_NUM<=950) //

{

time3_NUM++;

}

else

{

time3_NUM=0;

//Uart5_PutChar(0x33);

//Uart1_PutChar('3');

}

}

}

//

//

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

** 文件名称: STM32f107 T4定时器应用

** 功能描述:

** 参数: None

** 返回值: None

** 作者: 汪仁海

** 日期: 2012年2月17日

**---------------------------------------------------------------------------------------

** 修改人:

** 日期:

**---------------------------------------------------------------------------------------

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

#include "main.h"

int time4_NUM;

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

函数: void Timer4_Configuration(void)

功能: TIM4 配置

参数: 无

返回: 无

定时计算:(1 /(72 / (36 - 1 + 1))) * 2000 us = 1000us = 1ms

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

void Timer4_Configuration(void)

{

TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;

RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4, ENABLE); //打开TIM4定时器的时钟

TIM_DeInit(TIM4); //TIMx寄存器重设为缺省值

TIM_TimeBaseStructure.TIM_Period = 2000; //自动重装载寄存器周期的值

TIM_TimeBaseStructure.TIM_Prescaler=36 - 1; //TIMx时钟频率除数的预分频值

TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1; //采样分频

TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up; //向上计数模式

TIM_TimeBaseInit(TIM4, &TIM_TimeBaseStructure);

//清中断,以免一启用中断后立即产生中断

TIM_ClearFlag(TIM4, TIM_FLAG_Update);

TIM_ARRPreloadConfig(TIM4, ENABLE); //允许自动重装载寄存器(ARR)

TIM_ITConfig(TIM4,TIM_IT_Update,ENABLE); //允许TIM4溢出中断

TIM_Cmd(TIM4, ENABLE); //TIM4开启时钟

time4_NUM=0;

}

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

函数: void TIM2_IRQHandler(void)

功能: TIM4中断处理函数

参数: 无

返回: 无

说明:1ms中断1次

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

void TIM4_IRQHandler(void)

{

if(TIM_GetITStatus(TIM4,TIM_IT_Update)!=RESET)

{

TIM_ClearITPendingBit(TIM4,TIM_IT_Update); //清除中断标志

if(time4_NUM<=970) //

{

time4_NUM++;

}

else

{

time4_NUM=0;

//Uart5_PutChar(0x44);

//Uart1_PutChar('4');

}

}

}

//

//

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

** 文件名称: STM32f107 T5定时器应用

** 功能描述:

** 参数: None

** 返回值: None

** 作者: 汪仁海

** 日期: 2012年2月17日

**---------------------------------------------------------------------------------------

** 修改人:

** 日期:

**---------------------------------------------------------------------------------------

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

#include "main.h"

int time5_NUM;

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

函数: void Timer5_Configuration(void)

功能: TIM5 配置

参数: 无

返回: 无

定时计算:(1 /(72 / (36 - 1 + 1))) * 2000 us = 1000us = 1ms

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

void Timer5_Configuration(void)

TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;

RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM5, ENABLE); //打开TIM5定时器的时钟

TIM_DeInit(TIM5); //TIMx寄存器重设为缺省值

TIM_TimeBaseStructure.TIM_Period = 2000; //自动重装载寄存器周期的值

TIM_TimeBaseStructure.TIM_Prescaler=36 - 1; //TIMx时钟频率除数的预分频值

TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1; //采样分频

TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up; //向上计数模式

TIM_TimeBaseInit(TIM5, &TIM_TimeBaseStructure);

//清中断,以免一启用中断后立即产生中断

TIM_ClearFlag(TIM5, TIM_FLAG_Update);

TIM_ARRPreloadConfig(TIM5, ENABLE); //允许自动重装载寄存器(ARR)

TIM_ITConfig(TIM5,TIM_IT_Update,ENABLE); //允许TIM5溢出中断

TIM_Cmd(TIM5, ENABLE); //TIM5开启时钟

time5_NUM=0;

}

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

函数: void TIM2_IRQHandler(void)

功能: TIM5中断处理函数

参数: 无

返回: 无

说明:1ms中断1次

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

void TIM5_IRQHandler(void)

{

if(TIM_GetITStatus(TIM5,TIM_IT_Update)!=RESET)

{

TIM_ClearITPendingBit(TIM5,TIM_IT_Update); //清除中断标志

if(time5_NUM<=990) //1000US

{

time5_NUM++;

}

else

{

time5_NUM=0;

//Uart1_PutChar('5');

//Uart5_PutChar(0x55);

}

}

}

定时器、计数器操作与应用实验报告

实验三 定时器、计数器操作与应用实验报告 、实验目的 1、 了解和熟悉FX 系列可编程序控制器的结构和外 部接线方法; 2、 了解 和熟 悉 GX Developer Version 7.0 软件的 使用 方法 ; 3、 掌握 可编 程序 控制器 梯形 图程 序的 编制 与调 试。 二、实验要求 仔 细阅 读实 验指 导书 中关 于编 程软 件的 说明 ,复习 教材 中有 关内 容 , 分 析程 序运 行结 果。 三、实验设备 2 、 开关 量输 入 / 输出 实验 箱 3、 计算 机 4、 编程 电缆 注 意: 1) 开关量输入/输出实验 箱内的钮子开关用来产生模拟的 开关量输入 信 号; 2) 开关量输入/输出实验箱内的LED 用来指示开关 量输出信号; 3) 编程电缆在连接PLC 与计算机时请注意方向。 四、实验内容 1 、梯形图 1 、 FX 系列可 编程 序控 制器 一只 一套 5、 GX Developer Version 7.0 软件 一套

2、梯形图程序 0LD xooo 1OUT YOOO X001 2LD 3OR¥001 4AN I X002 5OUT Y001 6OUT TO K50 9MPS 10AHI TO 11OUT Y002 12MPP 13ASD TO 14OUT¥003 15LD X003 16RST CO 18LD X004 19OUT CO K5 22LD CO 23OUT Y004 24END 3、时序图

r 时序10 □ ?Si 正在进荷囲1SL 金冃勖厂手祜r XI广X3厂X5厂K1Q拧应C 40 J2fl MIB -380 .360 '340 -33 MW 脚 M 创Q,220,200,13Q -1?-14D ,1如■!? 如也 40 如厂「 五、实验步骤 1、程序的编辑、检查和修改; 2、程序的变换; 3、程序的离线虚拟设备仿真测试; 4、程序写入PLC; 5、用PLC运行程序; 6、比较程序的分析结果与实际运行结果。 六、实验报告 1、实验梯形图程序的编写; 2、梯形图程序的理论分析与结果; 3、梯形图程序的实际运行结果; 4、结论。 七、实验心得 通过这样一次实验,我对GX Developer Version 7.0 软件的使用方 法更加的熟悉了,也了解到在实验中需要我们集中精力,仔细认真地完成■XDU "Tlr-.Ll-t-1!- D LJ D-IT--1 z?E I4J 一 — Ti ll IL — 」 ill-t-ll-r — 1

555定时器的典型应用电路

555定时器的典型应用电路 单稳态触发器 555定时器构成单稳态触发器如图22-2-1所示,该电路的触发信号在2脚输入,R和C是外接定时电路。单稳态电路的工作波形如图22-2-2所示。 在未加入触发信号时,因u i=H,所以u o=L。当加入触发信号时,u i=L,所以u o=H,7脚内部的放电管关断,电源经电阻R向电容C充电,u C按指数规律上升。当u C上升到2V CC/3时,相当输入是高电平,5 55定时器的输出u o=L。同时7脚内部的放电管饱和导通是时,电阻很小,电容C经放电管迅速放电。从加入触发信号开始,到电容上的电压充到2V CC/3为止,单稳态触发器完成了一个工作周期。输出脉冲高电平的宽度称为暂稳态时间,用t W表示。 图22-2-1 单稳态触发器电路图 图22-2-2 单稳态触发器的波形图 暂稳态时间的求取: 暂稳态时间的求取可以通过过渡过程公式,根据图22-2-2可以用电容器C上的电压曲线确定三要素,初始值为u c(0)=0V,无穷大值u c(∞)=V CC,τ=RC,设暂稳态的时间为t w,当t= t w时,u c(t w)=2 V CC/3时。代入过渡过程公式[1-p205]

几点需要注意的问题: 这里有三点需要注意,一是触发输入信号的逻辑电平,在无触发时是高电平,必须大于2 V CC/3,低电平必须小于 V CC/3,否则触发无效。 二是触发信号的低电平宽度要窄,其低电平的宽度应小于单稳暂稳的时间。否则当暂稳时间结束时,触发信号依然存在,输出与输入反相。此时单稳态触发器成为一个反相器。 R的取值不能太小,若R太小,当放电管导通时,灌入放电管的电流太大,会损坏放电管。图22-2-3是555定时器单稳态触发器的示波器波形图,从图中可以看出触发脉冲的低电平和高电平的位置,波形图右侧的一个小箭头为0电位。 图22-2-3 555定时器单稳态触发器的示波器波形图 [动画4-5] 多谐振荡器 555定时器构成多谐振荡器的电路如图22-2-4所示,其工作波形如图22-2-5所示。 与单稳态触发器比较,它是利用电容器的充放电来代替外加触发信号,所以,电容器上的电压信号应该在两个阈值之间按指数规律转换。充电回路是R A、R B和C,此时相当输入是低电平,输出是高电平;当电容器充电达到2 V CC/3时,即输入达到高电平时,电路的状态发生翻转,输出为低电平,电容器开始放电。当电容器放电达到2V CC/3时,电路的状态又开始翻转。如此不断循环。电容器之所以能够放电,是由于有放电端7脚的作用,因7脚的状态与输出端一致,7脚为低电平电容器即放电。

定时器中断程序设计实验

实验一定时器/中断程序设计实验 一、实验目的 1、掌握定时器/中断的工作原理。 2、学习单片机定时器/中断的应用设计和调试 二、实验仪器和设备 1、普中科技单片机开发板; 2、Keil uVision4 程序开发平台; 3、PZ-ISP 普中自动下载软件。 三、实验原理 805l 单片机内部有两个 16 位可编程定时/计数器,记为 T0 和 Tl。8052 单片机内除了 T0 和 T1 之外,还有第三个 16 位的定时器/计数器,记为 T2。它们的工作方式可以由指令编程来设定,或作定时器用,或作外部脉冲计数器用。定时器 T0 由特殊功能寄存器 TL0 和 TH0 组成,定时器 Tl 由特殊功能寄存器 TLl 和 TH1 组成。定时器的工作方式由特殊功能寄存器 TMOD 编程决定,定时器的运行控制由特殊功能寄存器 TCON 编程控制。T0、T1 在作为定时器时,规定的定时时间到达,即产生一个定时器中断,CPU 转向中断处理程序,从而完成某种定时控制功能。T0、T1 用作计数器使用时也可以申请中断。作定时器使用时,时钟由单片机内部系统时钟提供;作计数器使用时,外部计数脉冲由 P3 口的 P3.4(或 P3.5)即 T0(或 T1)引脚输入。 方式控制寄存器 TMOD 的控制字格式如下: 低 4 位为 T0 的控制字,高 4 位为 T1 的控制字。GATE 为门控位,对定时器/计数器的启动起辅助控制作用。GATE=l 时,定时器/计数器的计数受外部引脚输入电平的控制。由由运行控制位 TRX (X=0,1)=1 和外中断引脚(0INT 或 1INT)上的高电平共同来启动定时器/计数器运行;GATE=0时。定时器/计数器的运行不受外部输入引脚的控制,仅由 TRX(X=0,1)=1 来启动定时器/计数器运行。 C/-T 为方式选择位。C/-T=0 为定时器方式,采用单片机内部振荡脉冲的 12 分频信号作为时钟计时脉冲,若采用 12MHz 的振荡器,则定时器的计数频率为 1MHZ,从定时器的计数值便可求得定时的时间。 C/-T=1 为计数器方式。采用外部引脚(T0 为 P3.4,Tl 为 P3.5)的输入脉冲作为计数脉冲,当 T0(或 T1)输入信号发生从高到低的负跳变时,计数器加 1。最高计数频率为单片机时钟频率的 1/24。 M1、M0 二位的状态确定了定时器的工作方式,详见表。

555定时器及其应用

实验六 555定时器及其应用 一.实验目的 1.熟悉555定时器的组成及功能。 2.掌握555定时器的基本应用。 3.进一步掌握用示波器测量脉冲波形的幅值和周期。 二.实验原理 555定时器(又称时基电路)是一个模拟与数字混合型的集成电路。按其工艺分双极型

该端不用时,应将该端串入一只0.01μF 电容接地,以防引入干扰。 7脚:放电端。该端与放电管集电极相连,用做定时器时电容的放电。 在1脚接地,5脚未外接电压,两个比较器A 1、A 2基准电压分别为CC CC V 3 1 ,V 32的情况下,555时基电路的功能表如表6—1示。

输出高电平时间

2)Vi接连续脉冲f = 512HZ,用示波器观察、记录Vi、V2、V C及V O的波形(以Vi为触发信号),测出V O的脉冲宽度t W,且与理论值相比较。 4.设计一个用555定时器构成的方波发生器,要求方波的周期为1ms,占空比为5%。 四.预习要求 1.搞清555定时器的功能和应用 2.理论计算出实验内容1多谐振荡器的输出方波的周期T 3.理论计算实验内容3 中2)输出脉冲宽度t W。 4.搞清图6—5中R1、C1微分电路的作用。V i为连续脉冲,对应地分析、画出V2的波形。 五.思考题 1.用两片555定时器设计一个间歇单音发生电路,要求发出单音频率约为1KHZ,发音时间约为0.5S,间歇时间约为0.5S。 2.图6—4电路中指出电容C充电途径、放电途径。写出振荡周期T和占空比表达式。理论计算出实验内容2、3两种情况下的占空比。 3.图6—5中,设微分电路的输入连续脉冲周期为T i,R1、C1的参数应如何选择? 4.实验内容3中,如果不采用R1、C1微分电路,即V i直接接至定时器的2脚,是否还能得到原来脉冲宽度t w的输出脉冲。 六.实验仪器与器材 1.电子技术实验箱MS-ⅢA型1台 2.直流电源(+5V)DS-2B-12型1台 3.示波器5020B型1台 4.万用表MF-47型1只 5.555定时器1只

51单片机外部中断与定时器的实用

中断使能寄存器 通过设置中断使能寄存器 IE 的 EA 位 使能所有中断 每个中断源都有单独的使能位 可通过软件设置 IE 中相应的使能位在任何时候使能或禁能中断 中断使能寄存器 IE 的各 位如下所示 中断使能寄存器IE 位地址 0AFH 0AEH 0ADH 0ACH 0ABH 0AAH 0A9H 0A8H 位符号 EA / ET2 ES ET1 EX1 ET0 EX0 EA 使能标志位 置位则所有中断使能 复位则禁止所有中断保留 ET2 定时器2 中断使能 ES 串行通信中断使能 ET1 定时器 1 中断使能 EX1 外部中断 1 使能 ET0 定时器0 中断使能 EX0 外部中断 0使能 8051 支持两个中断优先级 有标准的中断机制, 低优先级的中断只能被高优先级的中断所中断 ,而高优先级的中断不能被中断。 中断优先级寄存器 每个中断源都可通过设置中断优先级寄存器IP 来单独设置中断优先级 如果每个中断源的相应位被置位 则该中断源的优先级为高,如果相应的位被复位, 则该中断源的优先级为低, 如果你觉得两个中断源不够用 ,别急以后我会教你如何增加中断优先级 表 A-5 示出了 IP 寄存器的各位 此寄存器可位寻址 IP 寄存器 位地址 0BFH 0BEH 0BDH 0BCH 0BBH 0BAH 0B9H 0B8H 位符号 / / / PS PT1 PX1 PT0 PX0 编号 中断源 中断向量 上电复位 0000H 0 外部中断0 0003H 1 定时器0溢出 000BH 2 外部中断1 0013H 3 定时器1溢出 001BH 4 串行口中断 0023H 5 定时器2溢出 002BH PT2 定时器 2中断优先级 PS 串行通信中断优先级 PT1 定时器 1中断优先级 PX1 外部中断1 优先级 PT0 定时器0中断优先级 PX0 外部中断0 优先级

定时器中断产生方波源程序

①fangbo.asm。利用定时器Timer0在XF脚产生周期1s的的方波 .title "fangbo.asm" .mmregs .def CodeStart ;程序入口 .def TINT0_ISR ;Timer0中断服务程序 STACK .usect "STACK",10H ;分配堆栈空间 ;设定定时器0控制寄存器的内容 K_TCR_SOFT .set 0B<<11 ;TCR第11位soft=0 K_TCR_FREE .set 0B<<10 ;TCR第10位free=0 K_TCR_PSC .set 0B<<6 ;TCR第9-6位,可跟TDDR一样,也可不设自动加载 K_TCR_TRB .set 1B<<5 ;TCR第5位TRB=1此位置1,PSC会自动加载的 K_TCR_TSS .set 0B<<4 ;TCR第4位TSS=0 K_TCR_TDDR .set 1001B<<0 ;TCR第3-0位TDDR=1001B K_TCR .set K_TCR_SOFT|K_TCR_FREE|K_TCR_PSC|K_TCR_TRB|K_TCR_TSS|K_TCR_TDDR K_TCR_STOP .set 1B<<4 ;TSS=1时计数器停止 .data DATA_DP: XF_Flag: .word 1 ;当前XF的输出电平标志,如果XF_Flag=1,则XF=1 ;================================================ ;主程序: ;================================================ .text CodeStart: STM #STACK+10H,SP ;设堆栈指针SP LD #DATA_DP,DP ;设数据地址DP STM #XF_Flag,AR2 ;AR指向XF标志 ;改变中断向量表位置 K_IPTR .set 0080h ;指向0080H,默认是FF80 LDM PMST,A AND #7FH,A ;保留低7位,清掉高位 OR #K_IPTR,A ; STLM A,PMST ;初始化定时器0 ;f=100Mhz,定时最大是:10ns*2^4*2^16=10ms, ;要输出1s的方波,可定时5ms,再在中断程序中加个100计数器 ;Tt=10ns*(1+9)*(1+49999)=5ms ;f=50M, Tt=20ns*(1+9)*(1+49999)=10ms ;再加50计数器 CounterSet .set 49 ;定义计数次数 PERIOD .set 49999 ;定义计数周期 .asg AR1,Counter ;AR1做计数指针,重新命名以便识别 STM #CounterSet,Counter ;设计数器初值 STM K_TCR_STOP,TCR ;停止计数器0 ; STM #PERIOD,TIM ;可设成跟PRD一样,也可不设自动加载STM #PERIOD,PRD ;设定计数周期 STM #K_TCR,TCR ;开始Timer0 stm #0008h,IMR ;允许Timer0中断 STM #0008h,IFR ;清除挂起的中断 RSBX INTM ;开中断 end: nop B end ;================================================ ;Timer0中断服务程序:TIN0_ISR ;================================================

单片机实验之定时器计数器应用实验二

一、实验目的 1、掌握定时器/计数器计数功能的使用方法。 2、掌握定时器/计数器的中断、查询使用方法。 3、掌握Proteus软件与Keil软件的使用方法。 4、掌握单片机系统的硬件和软件设计方法。 二、设计要求 1、用Proteus软件画出电路原理图,单片机的定时器/计数器以查询方式工作,设定计数功能,对外部连续周期性脉冲信号进行计数,每计满100个脉冲,则取反P1.0口线状态,在P 1.0口线上接示波器观察波形。 2、用Proteus软件画出电路原理图,单片机的定时器/计数器以中断方式工作,设定计数功能,对外部连续周期性脉冲信号进行计数,每计满200个脉冲,则取反P1.0口线状态,在P 1.0口线上接示波器观察波形。 三、电路原理图 六、实验总结 通过本实验弄清楚了定时/计数器计数功能的初始化设定(TMOD,初值的计算,被计数信号的输入点等等),掌握了查询和中断工作方式的应用。 七、思考题 1、利用定时器0,在P1.0口线上产生周期为200微秒的连续方波,利用定时器1,对 P1.0口线上波形进行计数,满50个,则取反P1.1口线状态,在P 1.1口线上接示波器观察波形。 答:程序见程序清单。

四、实验程序流程框图和程序清单。 1、定时器/计数器以查询方式工作,对外部连续周期性脉冲信号进行计数, 每计满100个脉冲,则取反P1.0口线状态。 汇编程序: START: LJMP MAIN ORG 0100H MAIN: MOV IE, #00H MOV TMOD, #60H MOV TH1, #9CH MOV TL1, #9CH SETB TR1 LOOP: JNB TF1, LOOP CLR TF1 CPL P1.0 AJMP LOOP END C语言程序: #include sbit Y=P1^0; void main() { EA=0; ET1=0; TMOD=0x60; TH1=0x9C; TL1=0x9C; while(1) { TR1=1; while(!TF1); TF1=0; Y=!Y; } }

器件实验报告八—555集成定时器及其应用

555集成定时器及其应用实验报告 一、实验内容与目的 1.单稳态触发器功能的测试,对于不同的外界元件参数,测定输出信号幅度和暂稳时间。 2.多谐振荡器功能的测试与验证,给定一个外界元件,测量输出波形的频率、占空比,并且计算理论值,算出频率的相对误差。 实验仪器: 自制硬件基础电路实验箱,双踪示波器,数字万用表,集成定时器NE555 2片;电阻100kΩ、10kΩ各2只;51kΩ、5.1kΩ、4.7kΩ各1只;电容30μF、10μF、0.1μF、2200pF各1只;电位器100kΩ1只; 元器件:LM555。 二、实验预习内容: 本实验旨在了解555定时器的内部结构和工作原理:单稳态触发器、多谐振荡器的工作原理。 实验资料: (1)构成单稳态触发器 电路如下图所示,接通电源→电容C充电(至2/3Vcc)→RS触发器置0→Vo =0,T导通,C放电,此时电路处于稳定状态。当2加入VI<1/3Vcc时,RS触发器置1,输出Vo=1,使T 截止。电容C开始充电,按指数规律上升,当电容C 充电到2/3Vcc时,A1翻转,使输出Vo=0。此时T又重新导通,C很快放电,暂稳态结束,恢复稳态,为下一个触发脉冲的到来作好准备。其中输出Vo脉冲的持续时间tw=1.1RC,一般取R=1kΩ--10MΩ,C>1000PF,只要满足VI的重复周期大于tp0 ,电路即可工作,实现较精确的定时。 (2) 多谐振荡器 电路如下图所示,电路无稳态,仅存在两个暂稳态,亦不需外加触发信号,即可产生振荡(振荡过程自行分析)。电容C在1/3Vcc--2/3Vcc之间充电和放电,输出信号的振荡参数为:

周期T=0.7 C(R1+2R2) 频率f=1/T=1.44/(R1+2R2)C, 占空比D=( R1+R2 )/( R1+2R2)。 555电路要求R1与R2 均应大于或等于1kΩ ,使R1+R2 应小于或等于3.3MΩ。 三、实验过程与数据分析 1.单稳态触发器逻辑功能的测试。 连接电路如下:

实验三定时器计数器应用实验一

定时器/计数器应用实验一 设计性试验 2012年11月14日星期三第三四节课 一、实验目的 1、掌握定时器/计数器定时功能的使用方法。 2、掌握定时器/计数器的中断、查询使用方法。 3、掌握Proteus软件与Keil软件的使用方法。 4、掌握单片机系统的硬件和软件设计方法。 二、设计要求 1、用Proteus软件画出电路原理图,单片机的定时器/计数器以查询方式工作,在P1.0口线上产生周期为200μS的连续方波,在P 1.0口线上接示波器观察波形。 2、用Proteus软件画出电路原理图,单片机的定时器/计数器以中断方式工作,在P1.1口线上产生周期为240μS的连续方波,在P 1.1口线上接示波器观察波形。 三、电路原理图

四、实验程序流程框图和程序清单及实验结果 /********* 设计要求:(a)单片机的定时器/计数器以查询方式工作, 在P1.0口线上产生周期为200us的连续方波 编写:吕小洋 说明:用定时器1的方式1以查询方式工作 时间:2012年11月10日 ***************/ ORG 0000H 开始 系统初始化

START: LJMP MAIN ORG 0100H MAIN: MOV SP, #2FH CLR EA ;关总中断 CLR ET1 ;禁止定时器1中断 MOV TMOD, #00010000B ;设置定时器1为工作方式1 MOV TH1, #0FFH ;设置计数初值 MOV TL1, #9CH SETB TR1 ;启动定时器 LOOP: JNB TF1, LOOP ;查询计数是否溢出 MOV TH1, #0FFH ;重置计数初值 MOV TL1, #9CH CLR TF1 ;清除计数溢出标志 CPL P1.0 ;输出取反 LJMP LOOP ;重复取反 END

最新555定时器及基本应用汇总

555定时器及基本应 用

毕业论文 论文题目 555定时器及其基本应用 系别物电系 专业物理教育 班级 08级物理教育班 学号 130809066 姓名李小沙 指导教师袁乐民 二O一一年五月一日

555定时器及基本应用 摘要:555定时器是一种模拟和数字功能相结合的中规模集成器件。一般用双极性工艺制作的称为555,用CMOS工艺制作的称为 7555,除单定时器外,还有对应的双定时器556/7556。555定时器的电源电压范围宽,可在5~16V工作,最大负载电流可达200mA,7555可在3~18V工作,最大负载电流可达4mA,因而其输出可与TTL、CMOS或者模拟电路电平兼容。555定时器成本低,性能可靠,只需要外接几个电阻、电容,就可以实现多谐振荡器、单稳态触发器及施密特触发器等脉冲产生与变换电路。它也常作为定时器广泛应用于仪器仪表、家用电器、电子测量及自动控制等方面。 关键词:555定时器,施密特触发器,多谐振荡器,单稳态触发器引言:随着电子技术的发展,尤其是消费类电子的日益普及,555定时器的使用量也在飞速增长。在购买和使用555定时器时,人们对555定时器的性能要求也逐渐提高。555定时器最重要的两个性能为电池的容量和电池的内阻,电池容量与电池内阻存在密切的关系。一般而言, 电池的容量越大, 内阻就越小。电池内阻的大小及其变化可反应电池内部的变化。电池内阻大,电池放电电压平台低,电池输出功率小,电池充电时电压高,高倍率快速充电时,电池会产生大量的热,使充电效率降低,降低电池性能。可见电池内阻的大小是衡量电池性能好坏的重要指标, 准确测量电池内阻具有重要意义。目前,测量电池内阻的方法主要有加载降压法、短路电流法、电桥法、交流电流法、双量程测量法、电位差计法等。这些方法各有利弊, 普遍问题是测量步骤较繁琐, 有些测量方法存在着不可忽视的测量误差, 甚至某些测量方法(因电池放电时间过长等)对电池的寿命有一定影响。本文将以论证的方式介绍一种较容易、准确测量电池内阻和电池容量的方法。 一、 555定时器简介

实验08 555定时器及其应用

实验八 555定时器及其应用 一、实验目的 1.熟悉并掌握555时基电路的工作原理; 2.熟悉并掌握555构成的单稳态触发器、多谐振荡器、占空比可调的多谐振荡器三种典型电路结构及工作原理; 3.学会应用555时基集成电路。 二、实验任务(建议学时:4学时) (一)基本实验任务 1. NE555构成的单稳态触发器逻辑功能测试; 2. NE555构成的多谐振荡器及参数测试; 3. NE555构成的占空比可调的多谐振荡器及参数测试; (二)扩展实验任务() 1. 555构成的脉冲宽度调制(PWM —Pulse Width Modulation )器。 2. 利用555时基电路设计一个驱动电路,能够实现对LED 灯的亮度调节。 3. 利用555时基电路设计一个线性斜坡电压(Linear Ramp )发生器。 三、实验原理 1.555定时器又称为时基电路,由于它的内部使用了三个5K 的电阻,故取名555。 NE555引脚功能说明: GND :电源地;TRIG :触发端;OUT :输出端;RESET :清零端,低电平有效; CONT :控制端;THRES :阈值电压输入端;DISCH :放电端;Vcc :电源正极; 5K 5K 5K R S RE S Vcc CONT RESET THRES TRIG GND DISCH OUT 12 6 5 84 3 7 (a )引脚排列 (b )内部框图 图8-1 NE555引脚排列及内部框图

555定时器集成芯片型号很多,例如LM555、NE555、SA555、CB555、ICM7555、LMC555等等,尽管型号繁多,但它们的引脚功能是完全兼容的,在使用中可以彼此替换,大多数双极型芯片最后3位数码都是555,大多数CMOS型芯片最后4位数码都是7555(还有部分定时器芯片的命名采用C555来表示CMOS型555定时器,例如LMC555)。另外,还有双定时器型芯片双极型的556和CMOS型的7556、四定时器NE558。 555的引脚排列和内部框图见图8-1,556的引脚排列见图8-2。 图8-2 NE556双定时器引脚排列 2.双极型与CMOS型555定时器芯片的区别 1)双极型555定时器工作电压范围5~15V,其驱动能力强,最大负载电流达±200mA,其构成的多谐振荡器工作频率较低,极限大约为300kHz(不同厂商生产的555定时器其最高振荡频率不一定相同,具体值需要通过查阅厂商提供的芯片参数手册); 2)CMOS型555定时器工作电压范围3~16V,其驱动能力弱,最大负载电流仅有±4mA,其构成的多谐振荡器工作频率较高,可达500kHz(不同厂商生产的555定时器其最高振荡频率不一定相同,具体值需要通过查阅厂商提供的芯片参数手册); 由于CMOS型的555定时器驱动能力很弱,因此,使用CMOS型的555定时器时,当负载工作电流最大值超过±4mA时,需要在CMOS型555定时器的Out端和负载之间加一级缓冲电路以提高CMOS型555定时器的驱动能力。 注意,这里的负载电流正负表示的含义为:负载电流为正时,表示电流由Out端流出,负载电流为负时,表示电流流入Out端。

51单片机定时中断C语言的写法步骤

51单片机定时中断C语言的写法步骤 程序说明:51单片机定时器0工作于方式一,定时50ms中断一次 晶振为12M #include void main { TOMD = 0X01;//配置定时器0工作于方式一 TH1 = (65536-50000)/256; //高八位装入初值 TL1 = (65536-50000)%256; //低八位装入初值 ET0 = 1; //开定时器0中断 EA = 1; //开总中断 TR0 = 1; //启动定时器0 while(1) { ; } } void Timer0_int() interrupt 1 { //重新装初值 TH1 = (65536-50000)/256; //高八位装入初值 TL1 = (65536-50000)%256; //低八位装入初值 } /****************************************************************************** *********************************/ 上面是比较好理解的。如果实在要求简洁的话,看下面的,跟上面功能一样 #include void main { TOMD = 0X01;//配置定时器0工作于方式一 TH1 = 0x3c; //高八位装入初值 TL1 = 0xb0; //低八位装入初值 IE = 0x82;//开总中断并开定时器0中断 TR0 = 1; //启动定时器0 while(1) { ; } }

void Timer0_int() interrupt 1 { //重新装初值 TH1 = 0x3c; //高八位装入初值TL1 = 0xb0; //低八位装入初值}

电子技术实验报告8—555定时器及其应用

学生实验报告 系别电子信息学院课程名称电子技术实验 班级10通信A班实验名称实验八 555定时器及其应用 姓名葛楚雄实验时间2012年5月30日 学号20指导教师文毅 报告内容 一、实验目的和任务 1.熟悉555型集成时基电路的电路结构、工作原理及其特点。 2.掌握555型集成时基电路的基本应用。 二、实验原理介绍 555集成时基电路称为集成定时器,是一种数字、模拟混合型的中规模集成电路,其应用十分广泛。该电路使用灵活、方便,只需外接少量的阻容元件就可以构成单稳、多谐和施密特触发器,因而广泛用于信号的产生、变换、控制与检测。它的内部电压标准使用了三个5K的电阻,故取名555电路。其电路类型有双极型和CMOS型两大类,两者的工作原理和结构相似。几乎所有的双极型产品型号最后的三位数码都是555或556;所有的CMOS产品型号最后四位数码都是7555或7556,两者的逻辑功能和引脚排列完全相同,易于互换。555和7555是单定时器,556和7556是双定时器。双极型的电压是+5V~+15V,最大负载电流可达200mA,CMOS型的电源电压是+3V~+18V,最大负载电流在4mA以下。 1、555电路的工作原理 555电路的内部电路方框图如图20-1所示。它含有两个电压比较器,一个基本RS触发器,一个放电开关Td,比较器的参考电压由三只5KΩ的电阻器构成分压,它们分别使低电平比较器Vr1反相输入

端和高电平比较器Vr2的同相输入端的参考电平为2/3VCC和1/3VCC。Vr1和Vr2的输出端控制RS触发器状态和放电管开关状态。当输入信号输入并超过2/3VCC时,触发器复位,555的输出端3脚输出低电平,同时放电,开关管导通;当输入信号自2脚输入并低于1/3VCC时,触发器置位,555的3脚输出高电平,同时充电,开关管截止。 R是异步置零端,当其为0时,555输出低电平。平时该端开路或接VCC。Vro是控制电压端(5脚),D 平时输出2/3VCC作为比较器Vr1的参考电平,当5脚外接一个输入电压,即改变了比较器的参考电平,从而实现对输出的另一种控制,在不接外加电压时,通常接一个的电容器到地,起滤波作用,以消除外来的干扰,以确保参考电平的稳定。Td为放电管,当Td导通时,将给接于脚7的电容器提供低阻放电电路。 2、555定时器的典型应用 (1)构成单稳态触发器 上图20-2为由555定时器和外接定时元件R、C构成的单稳态触发器。D为钳位二极管,稳态时555电路输入端处于电源电平,内部放电开关管T导通,输出端Vo输出低电平,当有一个外部负脉冲触发信号加到Vi端。并使2端电位瞬时低于1/3VCC,单稳态电路即开始一个稳态过程,电容C开始充电,Vc按指数规律增长。当Vc充电到2/3VCC时,输出Vo从高电平返回低电平,放电开关管Td重新导通,电容C上的电荷很快经放电开关管放电,暂态结束,恢复稳定,为下个触发脉冲的来到作好准备。波形图见图20-3。

单片机定时器中断时间误差的分析及补偿(精)

单片机定时器中断时间误差的分析及补偿作者冰晓日期 2009-1-8 8:09:00 推荐 摘要:本文分析了单片机定时器溢出中断与CPU响应中断的时间误差,并给出了补偿误差的方法和实例。 关键词:单片机; 定时器; 中断; 误差 1前言 单片机内部一般有若干个定时器。如8051单片机内部有定时器0和定时器1。在定时器计数溢出时,便向CPU发出中断请求。当CPU正在执行某指令或某中断服务程序时,它响应定时器溢出中断往往延迟一段时间。这种延时虽对单片机低频控制系统影响甚微,但对单片机高频控制系统的实时控制精度却有较大的影响,有时还可能造成控制事故。为扩大单片机的应用范围,本文介绍它的定时器溢出中断与CPU响应中断的时间误差、补偿误差的方法和实例。 2误差原因、大小及特点 产生单片机定时器溢出中断与CPU响应中断的时间误差有两个原因。一是定时器溢出中断信号时,CPU正在执行某指令;二是定时器溢出中断信号时,CPU正在执行某中断服务程序。 2.1.CPU正在执行某指令时的误差及大小 由于CPU正在执行某指令,因此它不能及时响应定时器的溢出中断。当CPU执行此指令后再响应中断所延迟的最长时间为该指令的指令周期,即误差的最大值为执行该指令所需的时间。由于各指令都有对应的指令周期,因此这种误差将因CPU正在执行指令的不同而不同。如定时器溢出中断时,CPU正在执行指令MOVA,Rn,其最大误差为1个机器周期。而执行指令MOVRn, direct时,其最大误差为2个机器周期。当CPU正在执行乘法或除法指令时,最大时间误差可达4个机器周期。在8051单片机指令系统中,多数指令的指令周期为1~2个机器周期,因此最大时间误差一般为1~2个机器周期。若振荡器振荡频率为fosc,CPU正在执行指令的机器周期数为Ci,则最大时间误差为Δtmax1=12/fosc×Ci(us)。例如fosc=12MHZ,CPU正在执行乘法指令(Ci=4),此时的最大时间误差为: Δtmax1=12/fosc×Ci=12/(12×106)×4=4×10-6(s)=4(μs) 2.2CPU正在执行某中断服务的程序时的误差及大小 定时器溢出中断信号时,若CPU正在执行同级或高优先级中断服务程序,则它仍需继续执行这些程序,不能及时响应定时器的溢出中断请求,其延迟时间由中断转移指令周期T1、中断服务程序执行时间T2、中断返回指令的指令周期T3及中断返回原断点后执行下一条指令周期T4(如乘法指令)组成。中断转移指令和中断返回指令的指令周期都分别为2个机器周期。中断服务程序的执行时间为该程序所含指令的指令周期的总和。因此,最大时间误差Δtmax2为: Δtmax2=(T1+T2+T3+T4)12/fosc=(2+T2+2+4)12/fosc=12(T2+8)/fosc

定时器中断—频率计程序

/*注:定时器中断的例子,简单的频率计,初学者留意各引脚电压极性和电压值,不可超出5V,我们只是做学习实验,不要 超出51hei单片机学习板的承受范围,否则要求对电子非常熟悉,不然会烧坏芯片, 版权:,注意:P1.3与P1.7要相连接 如果是测量外部频率要共地. */ #include //头文件 #include #define uchar unsigned char//宏定义 #define uint unsigned int sbit Fin=P1^3; //测量频率管脚 sbit Fout=P1^7; //发生频率管脚 uchar code table[]={0x3f,0x06,0x5b,//数码管显示的数值 0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,}; void display(uchar *lp,uchar lc); //显示子函数 void delay(); //延时子函数 void mee_F(); //测频率子函数 void mee_T(); //测周期子函数 void Fry_mee(); //测频测周选择的子函数 uchar l_tmpdata[8]; //程序显示的缓冲区 bit int_flag; //中断事件相应的标志 uint fry; //保存的频率值 void init() ; void main() //主函数 { init(); // 调用初始化函数 } void init() //初始化函数 {

uint tmp; //数据转换缓冲区 uint i=2000;//显示延时,提高亮度 EA=1; //打开总中断 TMOD=0x11;//工作方式3 TH0=256-(50000/256); //装入初值 TL0=256-(50000%256); TH1=256-500/256; TL0=256-500%256; ET0=1; //定时器0开 ET1=1; //定时器1开 TR1=1; //启动定时器1 while(1) { Fry_mee();//开始测量 l_tmpdata[0]=tmp/10000; //测量完后将整数分离出来 tmp=tmp%10000; //进行显示 l_tmpdata[1]=tmp/1000; tmp=tmp%1000; l_tmpdata[2]=tmp/100; tmp=tmp%100; l_tmpdata[3]=tmp/10; l_tmpdata[4]=tmp%10; while(i--) //显示延时,提高亮度 { display(l_tmpdata,5); //用数字显示频率 } i=2000; //从新装入初值 } }

单片机实验-定时器计数器应用实验二

定时器/计数器应用实验二 一、实验目的和要求 1、掌握定时器/计数器计数功能的使用方法。 2、掌握定时器/计数器的中断、查询使用方法。 3、掌握Proteus软件与Keil软件的使用方法。 4、掌握单片机系统的硬件和软件设计方法。 二、实验内容或原理 1、利用单片机的定时器/计数器以查询方式计数外 部连续周期性矩形波并在单片机口线上产生某一 频率的连续周期性矩形波。 2、利用单片机的定时器/计数器以中断方式计数外 部连续周期性矩形波并在单片机口线上产生某一 频率的连续周期性矩形波。 三、设计要求 1、用Proteus软件画出电路原理图,单片机的定时 器/计数器以查询方式工作,设定计数功能,对 外部连续周期性脉冲信号进行计数,每计满100 个脉冲,则取反P1.0口线状态,在P 1.0口线上 接示波器观察波形。 2、用Proteus软件画出电路原理图,单片机的定时 器/计数器以中断方式工作,设定计数功能,对 外部连续周期性脉冲信号进行计数,每计满200 个脉冲,则取反P1.0口线状态,在P 1.0口线上 接示波器观察波形。 四、实验报告要求 1、实验目的和要求。 2、设计要求。 3、电路原理图。 4、实验程序流程框图和程序清单。 5、实验结果(波形图)。 6、实验总结。 7、思考题。 五、思考题 1、利用定时器0,在P1.0口线上产生周期为200微秒的连续 方波,利用定时器1,对P1.0口线上波形进行计数,满 50个,则取反P1.1口线状态,在P 1.1口线上接示波器 观察波形。 原理图:

程序清单: /*功能:用计数器1以工作方式2实现计数(查询方式)每计满100个脉冲,则取反P1.0口线状态*/ ORG 0000H START:MOV TMOD,#60H MOV TH1,#9CH MOV TL1,#9CH MOV IE,#00H SETB TR1 LOOP:JBC TF1,LOOP1 AJMP LOOP LOOP1:CPL P1.0

按键和定时器中断综合应用-秒表计时器

& INT1按键中断INT0# 和T0中断的综合应用 ‐简易秒表计时器 范例1:汇编源代码 范例2:C51源代码

P7 EQU 0F8H ORG 0100H #60H P6 EQU 0E8H D1 EQU 0FEH //数码管个位EQU 0FDH MAIN: MOV SP ,#60H //设置堆栈 MOV P2,#0FFH //关P2口LED MOV TMOD,#00H D2 //十位D3 EQU 0FBH // 百位 VARX DATA 30H //计数变量DATA 31H MOV TH0,#4BH MOV TL0,#0FDH //设置T0MOV R7,#20MOV VARX,#0 //置计数变量0DIG1 //BCD 个位DIG2 DATA 32H //BCD 十位DIG3 DATA 33H //BCD ,SETB ET0SETB EX0SETB IT0//百位ORG 0000H LJMP MAIN SETB EX1SETB IT1 SETB EA //允许相关中断 ORG 0003H LJMP KY1INT //KY1中断ORG 000BH LJMP T0INT //T0中断ORG 0013H KY2INT //KY2LJMP 中断

CONV: MOV A,VARX //读计数变量MOV A,DIG2 //读十位BCD MOV B,#100DIV AB DIG3A MOVC A,@A+DPTR MOV P7,A P6#D2//MOV DIG3,A MOV A,B MOV B,#10MOV P6,#D2 查表送显示ACALL DELAY //扫描延时A,DIG3//DIV AB MOV DIG2,A DIG1B MOV 读百位BCD MOVC A,@A+DPTR MOV P7,A MOV DIG1,B //转换为3位BCD DISP: MOV A,DIG1 //读个位BCD MOV DPTR,#SEGTBL MOV P6,#D3 //查表送显示ACALL DELAY CONV //MOVC A,@A+DPTR MOV P7,A P6,#D1//LJMP 返回读取VARX MOV 查表送显示 ACALL DELAY //扫描延时

嵌入式定时器基本功能(定时器中断)c语言代码

定时器基本功能实验(定时器中断) 1.实验内容 使用定时器0 实现1 秒定时,控制蜂鸣器蜂鸣。采用中断方式实现定时控制。 备注:EasyARM2131实验板上的系统时钟默认为11.0592MHz;系统中已定义了符号常量Fpclk = 11059200 ; 2.实验步骤 ①启动ADS 1.2,使用ARM Executable Image for lpc2131工程模板建立一个工程 TimeOut_C。 ②在user 组中的main.c 中编写主程序代码。 ③主程序中使用IRQEnable( )使能IRQ 中断。 ④选用DebugInExram 生成目标,然后编译连接工程。 ⑤将LPC2131实验板上的Beep跳线短接到P0.7。 ⑥选择【Project】->【Debug】,启动AXD 进行JTAG 仿真调试。 ⑦全速运行程序,蜂鸣器会响一秒,停一秒,然后再响一秒……依次循环。 3.实验参考程序 程序清单错误!文档中没有指定样式的文字。-1 定时器实验参考程序 #include "config.h" #define BEEP 1 << 7 /* P0.7控制BEEP,低电平蜂鸣 */ /***************************************************************************************** ** 函数名称:IRQ_Timer0() ** 函数功能:定时器0中断服务程序,取反LED9控制口。 ** 入口参数:无 ** 出口参数:无 ****************************************************************************************** */ void __irq IRQ_Timer0 (void) { if ((IO0SET & BEEP) == 0) IO0SET = BEEP; /* 关闭BEEP */ else IO0CLR = BEEP; T0IR = 0x01; /* 清除中断标志*/ VICVectAddr = 0x00; /* 通知VIC中断处理结束*/ } /* ***************************************************************************************** ** 函数名称:main()

相关文档
最新文档