定时器中断程序设计实验

合集下载

DSP实验四、TMS320F28335 定时器 中断 IO中断 控制LED亮灭

DSP实验四、TMS320F28335 定时器 中断 IO中断 控制LED亮灭

继续我的第四个实验;实现定时器中断函数处理LD4翻转、按键IO中断控制LD3翻转;学习目的:中断寄存器的设置,IO中断、定时器中断的使用,F28335共有三个定时器:timer0、timer1、timer2(timer2也可用于DSP/BIOS);功能描述:上电默认LD3、LD4灭;初始化完成后,LD4以1HZ(1S)频率做状态翻转;LD3接受按键控制,每触发一次按键,状态翻转一次。

电路连接说明:LD4、LD3设置为通用GPIO 上拉输出初始化后默认为输出LED灯灭状态;LD4、LD3控制LED灯的负极,如下图;本次实验选用定时器0,程序时刻读取计数器的值,当值为0时,产生定时器0中断,LD4状态翻转;IO按键SW12中断控制LD3状态翻转。

定时器0中断程序设计说明:步骤一、定时器0的预定标寄存器和计数器设置:定时器输入时钟为sysclkout(=135MHz),1、如果定时1S(即1Hz)中断一次(即计数结束),1Hz=135Mhz/1350/100000预定标寄存器(即分频器)设为1350,计数器设为100000;2、如果定时1ms(即1000Hz)中断一次,计算公式为:1000Hz=135Mhz/1350/100预定标寄存器同样设为1350,计数器设为100;赋值语句如下://定时器0 设为1Hz = 135MHz/(1350*100000)CpuTimer0Regs.PRD.all= 100000;//计数周期寄存器,100000周期后计数器减为0CpuTimer0Regs.TPR.bit.TDDR= 1350& 0xFF;//0x546 预定标寄存器(预分频器)CpuTimer0Regs.TPRH.bit.TDDRH = (1350>>8) & 0x00FF;//0x546 预定标寄存器(预分频器)步骤二、a)设置定时器0相关中断寄存器使能定时器0中断,即CpuTimer0Regs.TCR.bit.TIE= 1; //使能定时器0中断b)设置PIE级相关中断寄存器定时器0中断所在PIE组使能,即PIEIERx寄存器设置c)设置CPU级中断相关寄存器CPU级使能上述PIE对应的通道,即IER寄存器设置步骤三、中断向量入口映射位置设置,如下:EALLOW; // This is needed to write to EALLOW protected registersPieVectTable.TINT0 = &cpu_timer0_isr; //将中断函数物理地址赋值给中断向量入口PieVectTable.XINT3 = &key_GPIO50_isr;EDIS; // This is needed to disable write to EALLOW protected registersIO中断程序设计说明:步骤一、设置IO引脚功能复用寄存器为普通IO、设为上拉、输入状态、使能引脚滤波功能;外部中断源选择寄存器设置:如GpioIntRegs.GPIOXINT3SEL.bit.GPIOSEL=50;//按键引脚编号设置步骤二、使能外部中断源中断;XIntruptRegs.XINT3CR.bit.ENABLE=1;//使能中断设置触发方式:XIntruptRegs.XINT3CR.bit.POLARITY=0;//下降沿触发剩余步骤同定时器0中断的设置。

C语言测控系统程序设计实验报告

C语言测控系统程序设计实验报告

C语⾔测控系统程序设计实验报告Harbin Institute of TechnologyC语⾔在测量与控制中的应⽤实验报告专业:⾃动化班级:1104104学号:姓名:设计时间:2014/3/29实验⼀定时中断程序设计实验的⽬的:1.掌握定时器/计数器8254的⼯作原理与编程。

2.熟悉中断控制器8259A的⼯作原理与使⽤⽅法。

3.掌握硬件中断程序设计的原理与编程⽅法。

实验条件:PC机,WinXP操作系统,Turbo C 2.0程序设计要求:程序运⾏⾸先提⽰输⼊中断服务的时间间隔T和中断服务次数N,正确输⼊后,回车,则每间隔指定的时间T会在屏幕上显⽰⼀些字符,显⽰N次后,则不再显⽰,如果N=0,则会⽆限显⽰下去,直到在键盘上按下指定的按键,才停⽌显⽰。

停⽌显⽰后,按任意键程序结束运⾏。

1.时间间隔T为以毫秒为单位浮点数,可处理范围⾄少要0.001毫秒到5000毫秒。

2.屏幕上的显⽰信息要有助于验证程序运⾏结果的正确。

3.输⼊错误信息要有提⽰,并允许重新输⼊。

4.编程时要尽量把具有独⽴功能的代码写成⼦程序。

5.注意变量的命名要清晰,代码的注释要丰富。

6.后⾯的三个实验均要在此程序基础上编程、添加代码,注意程序的结构。

设计思路1.如何实现任意时间间隔?(附程序流程图)时间间隔的选取是根据⽤户的需要来进⾏的,因此程序⾸先应该是要求⽤户输⼊时间间隔T(ms),设定了8254的通道0定时器的计数初值,再通过将计数初值先写低8位后写⾼8位的⽅式来初始化通道0。

代码实现为:通过CalIPara()函数来计算计数初值的⾼低8位:void CalIPara(double DTimeI,int *ILongCount,unsigned char *CL8,unsigned char *CH8){double TotalCounter=DTimeI*1193;int Residue;ILongCount[0]=TotalCounter/65536;Residue=TotalCounter-65536*ILongCount[0];CH8[0]=Residue>>8;CL8[0]=Residue&0x0FF;}通过SetupTimerInterrupt()函数来对8254的通道0定时器的初始化:void SetupTimerInterrupt(void){disable();oldint8=getvect(0x08);outportb(0x43,0x36);if(LongCount==0){outportb(0x40,L8);outportb(0x40,H8);}else{outportb(0x40,0x00);outportb(0x40,0x00);}setvect(0x08,myint8);enable();}这样,每隔T(ms)时间,8259A的中断请求信号引起中断服务的执⾏。

裸机定时器中断控制LED灯程序设计实验报告

裸机定时器中断控制LED灯程序设计实验报告

裸机定时器中断控制LED灯程序设计一、实验要求:基于mini2440开发板,设计裸机定时器中断控制LED灯闪烁的程序。

二.设计目的1,巩固学习嵌入式软件方面的基本知识,进一步熟悉基本概念。

2,熟练常用控件,文件,图形等方面的操作了解基本的流程。

3,运用所用学的嵌入式知识,编写出较为实用的小软件,增进对一些实际问题的软,硬件知识的掌握。

4,培养查阅资料,独立思考问题的能力。

三. 实验步骤:四.基本思路及关键问题的解决方法;基本思路:1. 按照步骤程序设计原理说明,使用”CodeWarrior for ARM Developer Suite”软件编写程序并进行编译,建立一个新的文件单击【File】菜单中的【New File】选项,然后出现下面的对话框,输入文件名(加上后缀“.c”),单击保存按钮,在编译过程中如果出现错误,修改程序直到没有错误为止,编译过程中出现警告一般可以不必考虑,但特殊时也要通过修改程序消除警告。

程序编写完成后,将程序所在文件保存到2440test.mcp中,如图所示:2.用开发板测试程序代码:(1)首先设置开发板的拨动开关S2 为Nor Flash 启动,连接好附带的USB 线和电源(可以不必连接串口线)。

(2)设置超级终端(3)开机进入BIOS 模式,此时开发板上的绿色LED1 会呈现闪烁状态,其启动界面,如下图:输入”d”(4)安装USB 下载驱动(5)点击DNW 程序的“USB Port” “Transmit”,选择这个2440test.mcp文件,接着点“打开”,这样就开始下载了五.流程图及电路原理图1.绘制所需的流程图,如图所示:六.课程设计心得体会此次课程设计中我们的收获:我了解到了和小组成员合作的愉快,我意识到了知识的乐趣性,并感觉到当知识运用于实践的时候是一件多么幸福的事情。

我也发现自己的知识功底还远远不够。

平时不仅要将知识点理解掌握,还得勤动手做实验。

在以后的学习中我会更努力,在掌握理论知识的基础上,提高自己的动手能力。

实验二定时器和中断应用程序设计与调试3页

实验二定时器和中断应用程序设计与调试3页

实验二定时器和中断应用程序设计与调试3页一、实验目的1. 掌握定时器的工作原理和应用;2. 掌握中断的工作原理和应用;3. 结合定时器和中断设计应用程序。

二、实验器材1. 现成的定时器和中断资源(例如 STM32F103C8T6 单片机板);2. 电脑、USB 电缆、串口调试工具、杜邦线等。

三、实验原理与步骤1. 定时器首先,定时器是一种计时装置,它能够在设定的时间间隔内,发出一个固定的时钟脉冲信号,用于控制外部器件的时间。

定时器通常由计数器和时钟源两部分组成,计数器用于计数,时钟源则提供时钟脉冲。

在 STM32F103C8T6 单片机中,STM32F1 系列具有三个基本定时器,包括 TIM2、TIM3 和 TIM4,以及一个高级定时器 TIM1,这些定时器都是 16 位计数器。

下面以 TIM2 为例,介绍定时器的工作原理和使用方法。

STM32F103C8T6 的时钟系统图如下图所示:![image.png](attachment:image.png)其中,HCLK(高速时钟)的频率为 72MHz。

TIM2 的时钟源为:TIM2 的计数器是一个 16 位的寄存器,它的计数范围为 0-65535。

当计数器计数到最大值 65535 后,会自动从 0 开始重新计数。

TIM2 的数据和控制寄存器如下表所示:TIM2 的工作模式有四种,分别为向上计数、向下计数、向上/向下计数和单脉冲模式。

在本次实验中,我们选择向上计数模式,即计数器从 0 开始计数,当计数器计数到设定的值时,触发中断。

2. 中断中断是指由外部事件、硬件故障或软件请求而引起 CPU 暂停正在执行的当前程序,并转去执行一个特殊函数的程序执行机制。

中断是实现系统交互的重要手段,能够提高系统的响应速度和可靠性。

STM32F103C8T6 支持多种类型的中断,包括外部中断、定时器中断、USART 中断和 DMA 中断等。

在 STM32F103C8T6 中,各个中断向量表的地址为 0x0800 0000,STM32F1 系列的中断向量表共有 61 个中断向量,如下图所示:当有中断事件触发时,会自动跳转到相应的中断向量表所存的中断服务函数。

定时器中断程序设计实验

定时器中断程序设计实验

定时器中断程序设计实验定时器中断程序设计实验简介定时器中断是嵌入式系统中的常见应用之一,通过配置定时器的相关寄存器,可以定时产生中断信号,从而实现定时功能。

本文档将介绍定时器中断的基本概念和在实验中如何设计和实现定时器中断程序。

一、定时器中断的概念定时器中断是通过硬件定时器产生的中断信号,可以用于在嵌入式系统中实现定时功能。

定时器中断的原理是定时器内部的计数器自动递增,并在计数到一个特定值时产生中断信号。

通过配置定时器的相关寄存器,可以设置定时器的计数范围、计数速度和中断触发条件等参数。

二、定时器中断的实验设计步骤以下是一个基本的定时器中断程序设计实验的步骤:1. 确定定时器的类型和工作模式根据实际需求和硬件平台的支持情况,选择合适的定时器类型和工作模式。

常见的定时器类型包括定时器/计数器和看门狗定时器,常见的工作模式包括定时模式和计数模式。

2. 配置定时器的相关寄存器根据定时器的类型和工作模式,配置定时器的相关寄存器。

主要包括计数范围、计数速度和中断触发条件等参数的设置。

3. 初始化中断控制器如果使用的嵌入式系统具有中断控制器,需要初始化中断控制器,并使能相应的中断通道。

4. 编写中断服务程序通过注册中断处理函数,并在其中编写中断服务程序。

中断服务程序主要包括对中断标志位的清除、中断处理、中断函数返回等操作。

5. 启动定时器配置完成后,启动定时器开始计数。

定时器将根据配置的参数自动递增,并在计数到设定的特定值时产生中断信号。

6. 整合定时器中断功能到主程序在主程序中,可以使用定时器中断提供的功能来实现定时任务。

可以通过在中断服务程序中设置标志位,并在主循环中检测该标志位来执行相应的任务。

三、实验注意事项在设计和实现定时器中断程序时,需要注意以下事项:1. 根据实际需求进行定时器的配置,确保定时器的参数设置合理。

2. 在中断服务程序中应尽量减少对全局变量和共享资源的访问,以避免竞态条件和数据不一致等问题的发生。

中断与定时器和计数器实验

中断与定时器和计数器实验

中断与定时器和计数器实验一、实验目的:1.掌握单片机的中断的原理、中断的设置,掌握中断的处理及应用2.掌握单片机的定时器/计数器的工作原理和工作方式,学会使用定时器/计数器二、实验内容:(一)、定时器/计数器应用程序设计实验1.计数功能:用定时器1方式2计数,每计数满100次,将P1.0取反。

(在仿真时,为方便观察现象,将TL1和TH1赋初值为0xfd,每按下按键一次计数器加1,这样3次就能看到仿真结果。

)分析:外部计数信号由T1(P3.5)引脚输入,每跳变一次计数器加1,由程序查询TF1。

方式2有自动重装初值的功能,初始化后不必再置初值。

将T1设为定时方式2,GATE=0,C/T=1,M1M0=10,T0不使用,可为任意方式,只要不使其进入方式3即可,一般取0。

TMOD=60H。

定时器初值为X=82-100=156=9CH,TH1=TL1=9CH。

(1)硬件设计硬件设计如图所示(2)C源程序#include "reg51.h" sbit P1_0=P1^0;void main(){TMOD=0x60;TH1=0xfd;TL1=0xfd;TR1=1;ET1=1;while(1){if(TF1==1){P1_0=~P1_0;TF1=0;}}}(3)proteus仿真通过Keil编译后,利用protues软件进行仿真。

在protues ISIS 编译环境中绘制仿真电路图,将编译好的“xxx.hex”文件加入AT89C51。

启动仿真,观察仿真结果。

(二)中断应用程序设计实验2.中断定时使用定时器定时,每隔10s使与P0、P1、P2和P3端口连接的发光二极管闪烁10次,设P0、P1、P2和P3端口低电平灯亮,反之灯灭。

分析:中断源T0入口地址000BH;当T0溢出时,TF0为1发出中断申请,条件满足CPU响应,进入中断处理程序。

主程序中要进行中断设置和定时器初始化,中断服务程序中安排灯闪烁;TL0的初值为0xB0,TH0的初值为0x3C,执行200次,则完成10s定时。

单片机定时器中断程序实例

单片机定时器中断程序实例

单片机定时器中断程序实例引言:单片机定时器中断是指在单片机运行过程中,通过设置定时器并设置相应的中断服务程序,实现在指定时间间隔内自动触发中断,从而完成特定的任务。

本文将通过一个实例来介绍单片机定时器中断的应用。

一、背景介绍单片机的定时器中断广泛应用于各种实时控制系统中,如温度控制、电机控制等。

通过定时器中断,可以在指定的时间间隔内执行特定的任务,提高系统的实时性和稳定性。

二、实例描述假设我们需要设计一个温度控制系统,要求每隔一秒钟读取一次温度传感器的数值,并根据温度数值控制加热器的开关状态。

我们可以通过单片机的定时器中断来实现这个功能。

1. 初始化定时器我们需要初始化单片机的定时器。

具体步骤如下:(1)设置定时器的工作模式为定时器模式;(2)设置定时器的预分频系数,以确定定时器的计数频率;(3)设置定时器的计数初值,以确定定时器的定时时间;(4)开启定时器中断允许。

2. 编写中断服务程序接下来,我们需要编写定时器中断的服务程序。

当定时器溢出时,单片机会自动跳转到中断服务程序的入口处执行相应的任务。

具体步骤如下:(1)保存当前的现场,包括寄存器、标志位等;(2)读取温度传感器的数值;(3)根据温度数值控制加热器的开关状态;(4)恢复之前保存的现场;(5)退出中断服务程序。

3. 主程序框架我们需要编写主程序框架,以完成整个温度控制系统的功能。

具体步骤如下:(1)初始化单片机的端口和定时器;(2)开启总中断允许;(3)进入主循环;(4)等待定时器中断的发生;(5)执行定时器中断的服务程序。

三、总结通过单片机的定时器中断,我们可以实现在指定时间间隔内自动执行特定的任务,提高系统的实时性和稳定性。

本文通过一个温度控制系统的实例,介绍了单片机定时器中断的应用方法。

希望读者通过阅读本文,对单片机定时器中断有更深入的了解,并能运用到实际项目中。

单片机中断实验实训报告

单片机中断实验实训报告

一、实验背景随着电子技术的飞速发展,单片机因其体积小、成本低、功能强大等优点,在各个领域得到了广泛应用。

中断技术是单片机设计中非常重要的一部分,它允许单片机在执行程序的过程中,能够及时响应外部事件,从而提高系统的实时性和效率。

本实训旨在通过实验,加深对单片机中断系统的理解,掌握中断系统的使用方法,并学会在实际应用中灵活运用中断技术。

二、实验目的1. 熟悉单片机中断系统的基本概念和原理。

2. 掌握中断源、中断优先级、中断服务程序等基本概念。

3. 学会使用单片机的中断系统实现实时响应外部事件。

4. 培养动手实践能力和问题解决能力。

三、实验器材1. 单片机实验板2. 示波器3. 电源4. 连接线5. 逻辑分析仪(可选)四、实验内容1. 实验一:外部中断实验(1)实验目的:验证外部中断功能,实现按键控制LED灯的点亮和熄灭。

(2)实验步骤:a. 将外部中断0(INT0)引脚连接到按键,按键按下时产生低电平信号。

b. 编写中断服务程序,实现按键按下时点亮LED灯,按键释放时熄灭LED灯。

c. 编译程序,下载到单片机实验板上。

d. 测试实验效果,观察LED灯的点亮和熄灭情况。

2. 实验二:定时器中断实验(1)实验目的:验证定时器中断功能,实现LED灯的定时闪烁。

(2)实验步骤:a. 配置定时器T0为模式1,设置定时器初值,使定时器溢出时间为1秒。

b. 开启定时器中断,编写定时器中断服务程序,实现LED灯的定时闪烁。

c. 编译程序,下载到单片机实验板上。

d. 测试实验效果,观察LED灯的闪烁情况。

3. 实验三:中断嵌套实验(1)实验目的:验证中断嵌套功能,实现定时器中断和外部中断的嵌套。

(2)实验步骤:a. 配置定时器T0为模式1,设置定时器初值,使定时器溢出时间为1秒。

b. 开启定时器中断和外部中断,设置中断优先级。

c. 编写定时器中断服务程序和外部中断服务程序,实现中断嵌套。

d. 编译程序,下载到单片机实验板上。

定时器中断程序设计实验

定时器中断程序设计实验

定时器中断程序设计实验定时器中断程序设计实验1. 实验目的本实验旨在通过设计一个定时器中断程序,实现定时触发某个操作的功能。

通过此实验,可以熟悉定时器中断的使用方法,了解中断程序设计的基本原理。

2. 实验原理定时器中断是一种常用的硬件中断方式,可以根据设定的时间间隔,在每次定时器溢出时触发一个中断请求。

在中断处理程序中,可以执行一系列操作,如更新计数器、处理数据、控制外设等。

3. 实验器材单片机开发板烧录软件4. 实验步骤步骤1:引入头文件,在程序中引入相应的头文件,包括中断相关的头文件以及需要使用的外设相关的头文件。

cinclude <reg51.h> //单片机寄存器定义include <intrins.h> //特殊函数检测//其他头文件步骤2:初始化定时器在主函数中,初始化定时器,设定定时器的工作模式、计数值等参数。

cvoid InitTimer(){TMOD = 0x01; //定时器工作在模式1,16位定时器自动重装TH0 = 0xff; //定时器初值设定为0xffffTL0 = 0xff; //定时器初值设定为0xffffTR0 = 1; //启动定时器}步骤3:编写中断处理程序编写中断处理程序,即定时器中断的具体操作。

在本实验中,我们将在定时器中断发生时,通过P1口输出一个脉冲信号。

cvoid TimerInterrupt() interrupt 1{P1 ^= 0x01; //P1口取反,输出脉冲信号}步骤4:主程序在主程序中,调用初始化函数,然后进入一个无限循环,保持程序不退出。

cvoid mn(){InitTimer(); //初始化定时器while (1){//其他程序}}5. 实验结果与分析通过上述操作,定时器中断程序设计已经完成。

在本实验中,我们通过定时器中断触发P1口的脉冲信号输出,以验证中断程序的正确性。

6. 实验本实验通过设计一个定时器中断程序,实现了定时触发某个操作的功能。

基于STM32定时中断的电子闹钟设计

基于STM32定时中断的电子闹钟设计

基于定时中断的电子闹钟一、系统主要功能可以通过LCD的输出显示公历和农历时间,通过按键设置时间和闹钟;通过蜂鸣器响应闹钟。

三、电路原理图、接口、硬件构成1.原理图2.接口本次实验使用了串口、定时器、中断接口。

3.硬件组成(1)实验设计程序流程图如图左所示,中断流程图如图右所示。

(2)该设计分为软件设计和硬件设计两大模块,硬件电路由ARM 最小系统电路、时钟显示电路和闹钟提醒电路组成,采用stm32f103RCT6芯片,芯片管脚图示如下。

(3)时钟电路此电路主要是复位电路和时钟电路两部分,其中复位电路采用按键手动复位和上电自动复位组合,电路如图所示:晶振采用的是 8MHz 和 32.786KHz , 8MKz 分别接 STM32 的5 脚和 6 脚, 32.786KHz 分别接 STM32 的 3 脚和 4 脚。

(4)闹钟提醒电路本次实验设计的闹钟提醒电路为蜂鸣器电路,接入芯片的PC7引脚,当时间为设置闹钟时间时,蜂鸣器工作,发出响声,提醒电路如图所示。

四、核心代码(带注释)#include "delay.h"#include "sys.h"#include "lcd.h"#include "dht11.h"#include "ds1302.h"#include "KEY.h"#include "beep.h"u8 temp;u8 humi;u8 t=0;u8 flag=0,flag1=0,flag2=0,flag3=1; u8 a,b,c;int min1=10,hour1=10;DHT11_Data_TypeDef DHT11_Data;void TIM3_Int_Init(u16 arr,u16 psc){TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;NVIC_InitTypeDef NVIC_InitStructure;RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE); //时钟使能//定时器TIM3初始化TIM_TimeBaseStructure.TIM_Period = arr; //设置在下一个更新事件装入活动的自动重装载计时器的值TIM_TimeBaseStructure.TIM_Prescaler =psc; //设置用来作为TIMx时钟频率除数的预分频值TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; //设置时钟分割:TDTS = Tck_tim TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //TIM向上计数模式TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure); //根据指定的参数初始化TIMx的时间基数单位TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE ); //使能指定的TIM3中断,允许更新中断//中断优先级NVIC设置NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn; //TIM中断NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; //先占优先级0级NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3; //从优先级3级NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQ通道被使能NVIC_Init(&NVIC_InitStructure); //初始化NVIC寄存器TIM_Cmd(TIM3, DISABLE); //使能TIMx }void gui0(u8 mode){LCD_ShowPicture(0,0,480,320);if(flag3==1){LCD_ShowPicture3(445,0,479,34);}LCD_ShowChinese(0+40,0,0,BLUE,32,mode);//字LCD_ShowChinese(32+40,0,8,BLUE,32,mode);LCD_ShowChinese(64+40,0,9,BLUE,32,mode);LCD_ShowChinese(96+40,0,10,BLUE,32,mode);LCD_ShowNum(52,40,temp,2,BLUE,32,mode);//温度LCD_ShowChinese(132,40,12,BLUE,32,mode);LCD_ShowChinese(128+80+30,0,0,BLUE,32,mode);LCD_ShowChinese(160+80+30,0,8,BLUE,32,mode);LCD_ShowChinese(192+80+30,0,11,BLUE,32,mode);LCD_ShowChinese(224+80+30,0,10,BLUE,32,mode);LCD_ShowNum(248+30,40,humi,2,BLUE,32,mode);LCD_ShowChar(280+30,40,'%',BLUE,32,mode);LCD_ShowNum(20,80,hour/10,1,BLUE,160,mode);//时间 LCD_ShowNum(110,80,hour%10,1,BLUE,160,mode);LCD_ShowChar(200,65,':',BLUE,160,mode);LCD_ShowNum(290,80,min/10,1,BLUE,160,mode);LCD_ShowNum(380,80,min%10,1,BLUE,160,mode);LCD_ShowNum(0,250,year+2000,4,BLUE,32,mode);LCD_ShowChinese(64,250,13,BLUE,32,mode);LCD_ShowNum(96,250,month,2,BLUE,32,mode);LCD_ShowChinese(128,250,14,BLUE,32,mode);LCD_ShowNum(160,250,day,2,BLUE,32,mode);LCD_ShowChinese(192,250,15,BLUE,32,mode);LCD_ShowChinese(224,250,16,BLUE,32,mode);LCD_ShowChinese(256,250,week,BLUE,32,mode);LCD_ShowNum(0,283,hour1,2,BLUE,32,mode);LCD_ShowChar(33,283,':',BLUE,32,mode);LCD_ShowNum(50,283,min1,2,BLUE,32,mode);}void keyscan(u8 mode){switch(t){case KEY0_PRES:if(min1==min&&hour1==hour){flag2=1;BEEP(OFF);}switch(flag){case 1: hour++; if(hour>23)hour=0;LCD_ShowPicture2(20,80,190,240);LCD_ShowNum(20,80,hour/10,1,BLUE,160,mode);//时间LCD_ShowNum(110,80,hour%10,1,BLUE,160,mode);break;case 2: min++; if(min>59)min=0;LCD_ShowPicture2(290,80,460,240);LCD_ShowNum(290,80,min/10,1,BLUE,160,mode); LCD_ShowNum(380,80,min%10,1,BLUE,160,mode); break;case 3: year++; LCD_ShowPicture2(0,250,64,282);LCD_ShowNum(0,250,year+2000,4,BLUE,32,mode);break;case 4: month++; if(month>12) month=1;LCD_ShowPicture2(96,250,128,282); LCD_ShowNum(96,250,month,2,BLUE,32,mode);break;case 5: day++; if(day>31) day=1;LCD_ShowPicture2(160,250,192,282);LCD_ShowNum(160,250,day,2,BLUE,32,mode); break; case 6: week++; if(week>7) week=1;LCD_ShowPicture2(256,250,288,282);LCD_ShowChinese(256,250,week,BLUE,32,mode);break;case 7: hour1++; if(hour1>23)hour1=0;LCD_ShowPicture2(0,283,32,315);LCD_ShowNum(0,283,hour1,2,BLUE,32,mode);break;case 8: min1++;if(min1>59)min1=0;LCD_ShowPicture2(50,283,82,315);LCD_ShowNum(50,283,min1,2,BLUE,32,mo de);break;case 9: flag3=1; LCD_ShowPicture3(445,0,479,34); break;default: break;}break;case KEY1_PRES:if(min1==min&&hour1==hour){flag2=1;BEEP( OFF );}switch(flag){case 1: hour--; if(hour<0)hour=23;LCD_ShowPicture2(20,80,190,240);LCD_ShowNum(20,80,hour/10,1,BLUE,160,mode);//时间LCD_ShowNum(110,80,hour%10,1,BLUE,160,mode); break;case 2: min--; if(min<0) min=59;LCD_ShowPicture2(290,80,460,240);LCD_ShowNum(290,80,min/10,1,BLUE,160,mode);LCD_ShowNum(380,80,min%10,1,BLUE,160,mode); break;case 3: year--; LCD_ShowPicture2(0,250,64,282);LCD_ShowNum(0,250,year+2000,4,BLUE,32,mode);break;case 4: month--; if(month<1) month=12; LCD_ShowPicture2(96,250,128,282);LCD_ShowNum(96,250,month,2,BLUE,32,mode);break;case 5: day--; if(day<1) day=31;LCD_ShowPicture2(160,250,192,282);LCD_ShowNum(160,250,day,2,BLUE,32,mode); break;case 6: week--; if(week<1) week=7;LCD_ShowPicture2(256,250,288,282);LCD_ShowChinese(256,250,week,BLUE,32,mode); break; case 7: hour1--; if(hour1<0)hour1=23;LCD_ShowPicture2(0,283,32,315);LCD_ShowNum(0,283,hour1,2,BLUE,32,mode);break;case 8: min1--;if(min1<0)min1=59;LCD_ShowPicture2(50,283,82,315);LCD_ShowNum(50,283,min1,2,BLUE,32,mo de);break;case 9: flag3=0; LCD_ShowPicture2(445,0,480,36);break;default: break;}break;case WKUP_PRES:cc1();flag++;switch(flag){case 1: TIM_Cmd(TIM3, DISABLE); LCD_DrawLine(20,242,190,243,BLUE);break;case 2: LCD_ShowPicture1(242,243);LCD_DrawLine(290,242,460,243,BLUE); break;case 3: LCD_ShowPicture1(242,243); LCD_DrawLine(0,287,64,288,BLUE);break;case 4: LCD_ShowPicture1(287,288);LCD_DrawLine(96,287,128,288,BLUE);break;case 5: LCD_ShowPicture1(287,288); LCD_DrawLine(160,287,192,288,BLUE); break; case 6: LCD_ShowPicture1(287,288);LCD_DrawLine(256,287,288,288,BLUE); break; case 7: LCD_ShowPicture1(287,288); LCD_DrawLine(0,316,32,317,BLUE);break; case 8: LCD_ShowPicture1(316,317); LCD_DrawLine(50,316,82,317,BLUE);break;case 9: LCD_ShowPicture1(316,317); LCD_DrawLine(445,37,479,38,BLUE);break;case 10: LCD_ShowPicture2(445,37,479,38);ds_wtime();a=sec;b=min;c=hour;TIM_Cmd(TIM3, ENABLE);flag=0;break;default: break;}break;default: delay_ms(5); break;}}int main(void){delay_init();NVIC_Configuration();DHT11_Init ();KEY_Init();BEEP_GPIO_Config();BEEP( OFF );TIM3_Int_Init(9999,7199);ds1302_init();ds_read_time();cc();a=sec;b=min;c=hour;Lcd_Init();LCD_Clear(WHITE);gui0(1);TIM_Cmd(TIM3, ENABLE);while(1){t=KEY_Scan(0);keyscan(1);if( DHT11_Read_TempAndHumidity (&DHT11_Data ) == SUCCESS&&flag==0) {temp=DHT11_Data.temp_int;humi=DHT11_Data.humi_int;LCD_ShowPicture2(52,40,84,72);LCD_ShowPicture2(278,40,310,72);LCD_ShowNum(52,40,temp,2,BLUE,32,1);LCD_ShowNum(278,40,humi,2,BLUE,32,1);}if(flag==0&&min1==min&&hour1==hour&&flag2==0&&flag3==1) {BEEP( ON );}}}。

单片机中断定时程序

单片机中断定时程序

参考程序:
MOV IE, #00H ;禁止中断 MOV TMOD, #60H ;设置定时器1为方式2 MOV TH1, #9CH ;保存计数初值 MOV TL1, #9CH ;预置计数初值 SETB TR1 ;启动定时 JBC TF1, LOOP ;查询计数溢出 AJMP DEL INC A ;累加器加1 AJMP DEL ;重复循环
任务: 1)T0工作方式的设定: 选择方式1(16位方式),最大定时131ms,本 题拟定时时长为100ms。因此TMOD为01H。
2)定时常数的设定: X=216-100ms/2us =15536=3CB0H 即:TH0应装3CH,TL0应装0B0H。 3)中断管理: 允许T0中断,开放总中断 即:IE应装10000010B。 4)启动定时器T0: SETB TR0 5)设置软件计数器初值:(如使用R7) 即R7应装0AH 6)动态停机:SJMP $
参考程序:
MOV IE, #00H ;禁止中断 MOV TMOD, #02H ;设置定时器0为方式2 MOV TH0, #0CEH ;保存计数初值 MOV TL0, #0CEH ;预置计数初值 SETB TR0 ;启动定时 JBC TF0, LOOP1 ;查询计数溢出 AJMP LOOP CPL P1.0 ;输出方波 AJMP LOOP ;重复循环
;恢复定时常数
;重装R7初值
ORG 0000H 完整程序如下: AJMP MAIN ORG 000BH AJMP T0INT ORG 0030H MAIN: MOV TMOD, #01H;设定T0为方式1定时 MOV TH0, #3CH ;装入定时常数高8位 MOV TL0, #0B0H ;装入定时常数低8位 MOV IE, #82H ;开放T0中断 SETB TR0 ;启动T0 MOV R7, #0AH ;设置软件计数器 SJMP $ T0INT:MOV TH0, #3CH ;恢复定时常数 MOV TL0, #0B0H DJNZ R7, NEXT CPL P1.0 MOV R7, #0AH NEXT:RETI END

51单片机内部定时器和中断系统以及编写第一个简单的定时器实验程序

51单片机内部定时器和中断系统以及编写第一个简单的定时器实验程序

51单片机内部定时器和中断系统以及编写第一个简单的定时器实验程序上讲通过讲述用单片机控制一个外部的LED闪烁实验来向读者介绍了单片机的工作原理与开发流程。

这一讲将介绍单片机内部非常重要的两个资源——定时/ 计数器和中断系统。

通过该讲,读者可以掌握定时器的工作原理和单片机的中断系统。

从而设计定时器计数程序和中断服务程序。

一、原理简介首先让我们举闹钟为例,将它定时在一分钟后闹铃,这就需要秒针走一圈(60 次)。

即一分钟时间转化为秒针走的次数,也就是计数的次数,计数到了60 次然后闹铃,而每一次计数的时间是1 秒。

单片机内部的定时/ 计数器跟闹钟类似,可以通过编程来设定要定时的时间、定时时间到了进行相应的操作。

那么在单片机内部计数一次的时间是多少呢,51 单片机输入的时钟脉冲是由晶体振荡器的输出经12 分频后得到的,所以定时器也可看作是对计算机机器周期的计数器。

因为每个机器周期包含12 个振荡周期,故每一个机器周期定时器加1,可以把输入的时钟脉冲看成机器周期信号。

故其频率为晶振频率的1/12。

如果晶振频率为12MHz,则定时器每接收一个输入脉冲的时间刚好为1μs。

在本实验套件中采用的是11.0592M 的晶振,故每接收一个输入脉冲的时间约为1.085μs。

实现精确定时在实际项目应用中非常重要,因为往往需要用到精确定时一段时间,然后定时时间到的时刻做相应的任务。

那如何编程实现定时时间呢?首先先简单介绍下本实验板上单片机(STC89C52)内的定时器资源。

STC89C52 内有三个定时/ 计数器,分别为T0、T1 和T2。

其中T0、T1 工作方式一样,一并介绍。

T2 的工作方式稍有区别,这里不做介绍,实验套件光盘中有实际应用程序。

同时,单片机中的定时器和计数器是复用的,计数器是记录外部脉冲的个数,而定时器则是由单片机内部时钟提供的一个非常稳定的计数源。

本讲中,以T0、T1 作为定时器来进行实例介绍使用。

单片机中断实验报告

单片机中断实验报告

一、实验目的1. 理解单片机中断的基本概念和工作原理。

2. 掌握单片机中断系统的初始化方法。

3. 学会编写中断服务程序,实现特定功能。

4. 熟悉中断优先级设置及其对系统性能的影响。

二、实验设备1. 单片机实验板:STC89C52单片机实验板2. 串口下载线:USB转串口下载线3. 电脑:一台运行Windows操作系统的电脑4. 软件工具:Keil uVision4集成开发环境三、实验原理单片机中断系统是单片机的重要组成部分,它允许单片机在执行主程序时,响应外部或内部事件的中断请求,暂停主程序执行,转而执行相应的中断服务程序。

中断系统由硬件和软件两部分组成。

1. 硬件部分:包括中断源(如定时器、外部中断等)、中断控制器、优先级寄存器、中断服务寄存器等。

2. 软件部分:包括中断初始化程序、中断服务程序等。

四、实验步骤1. 创建项目:在Keil uVision4中创建一个新项目,选择STC89C52单片机作为目标芯片。

2. 设计电路:根据实验要求,绘制电路原理图,连接单片机实验板上的相关元器件。

3. 编写程序:编写C语言程序,实现以下功能:(1)初始化单片机中断系统,包括设置中断优先级、启用中断等;(2)编写中断服务程序,处理中断请求;(3)编写主程序,实现特定功能。

4. 编译程序:将编写好的程序编译成hex文件。

5. 烧录程序:将编译好的hex文件烧录到单片机实验板中。

6. 运行实验:观察实验现象,验证程序功能。

五、实验内容1. 实验一:外部中断实验(1)功能:当外部中断0(INT0)或外部中断1(INT1)有信号输入时,触发对应的中断服务程序,使LED灯闪烁。

(2)步骤:a. 初始化外部中断0和外部中断1,设置中断优先级;b. 编写外部中断0和外部中断1的中断服务程序;c. 编写主程序,实现LED灯闪烁。

2. 实验二:定时器中断实验(1)功能:定时器0每隔1秒产生一次中断,触发中断服务程序,使LED灯闪烁。

计算机接口技术实验报告

计算机接口技术实验报告

计算机接口技术实验报告数学与计算机学院《计算机接口技术》实验报告专业: 班级: 学号: 姓名: 指导老师:实验1 定时与中断接口程序设计一实验目的1了解定时器/计数器8253、并行I/O接口8255A在PC机中的电路连接方法;2.学习使用TURBO C++对8253、8255进行编程操作;3(熟悉拦截PC机中断向量的TC++ 编程方法。

二实验内容1(8253、8255在PC/XT机中的电路连接介绍1, 8088 8253 2,D7…D0 OUT0 D7…D0 至8259 IRQ0,中断类型=8 3, RD GATE0 +5V IOR4, WR CLK0 IOW5, A0 OUT1 A0 至8237的DRAM刷新请求6, A1 GATE1 A1 +5V7, CLK18,地址OUT2 IO/M & 放大 9,译码CS GATE2 A9…A210, CLK0,1,2 40H~43H1.19MHz地址PB0译码 CS PB160H~63H 8255PC机启动后,系统设置的初始状态为:芯片有关工作方式初值运行情况通道0#:方式3(方波计数初值:OUT输出55ms方波至0000H 发生器) 8259的IRQ0 8253 通道2#:,(1KHz) 计数初值:,,(1KHz方波) (1190)PB0、PB1:方式0(简控制蜂鸣器发声。

0:不发8255 单输出) 声,1:发声 8259 IRQ0:允许中断中断类型号:8 CPU响应8号中断 2(程序要求(1)程序启动时,要求输入定时时间,以秒为单位。

(2)按秒计时,每秒到达时,在屏幕上显示当前为第几秒,同时蜂鸣器发出短促叫声;(3)当定时时间到,则显示“Time Up!”,结束程序。

三. 实验步骤1(建立源文件:启动TURBO C++3.0,建立Timer.CPP。

保存到D:\ ×(学号)\Timer.CPP;2(设置TC工作目录:选菜单Options/Directories,第1、2栏保持不变,第3、4栏填写您的文件存放目录,OK。

中断及定时器实验报告

中断及定时器实验报告

中断及定时器实验报告中断及定时器实验报告引言:中断是计算机系统中一种重要的机制,它可以打破程序的顺序执行,响应外部事件的发生。

中断的引入使得计算机可以同时处理多个任务,提高了系统的效率和可靠性。

定时器是中断的一种常见应用,它可以在一定时间间隔内产生中断信号,实现定时任务的功能。

本实验旨在通过编程实现中断和定时器的功能,并测试其正确性和稳定性。

一、实验目的1. 学习中断的概念和原理;2. 掌握中断的编程方法和中断处理程序的编写;3. 理解定时器的工作原理和应用场景;4. 实现定时器的功能,并测试其正确性和稳定性。

二、实验过程1. 硬件准备在实验中,我们使用了一台基于8051单片机的开发板,通过连接外部电路和开发板的引脚,实现对定时器的控制。

2. 软件编程首先,我们需要在开发板上搭建一个简单的电路,包括一个LED灯和一个按钮。

然后,我们使用汇编语言编写中断处理程序,实现当按钮按下时,LED灯闪烁的功能。

具体的编程步骤如下:(1)设置中断向量表:将中断处理程序的地址存储到中断向量表中,以便系统在中断发生时能够正确地跳转到相应的处理程序;(2)初始化定时器:设置定时器的计数器初值和工作模式;(3)编写中断处理程序:当中断发生时,执行相应的处理程序。

在本实验中,我们编写了一个简单的中断处理程序,当按钮按下时,将LED灯的状态取反;(4)启用中断:使能中断,使得系统能够响应外部事件的发生。

3. 实验测试将编写的程序下载到开发板上,并连接相应的电路。

按下按钮,观察LED灯是否按照预期的频率闪烁。

通过调整定时器的计数器初值和工作模式,可以改变LED灯闪烁的频率。

三、实验结果经过多次实验测试,我们发现中断和定时器的功能正常,LED灯能够按照预期的频率闪烁。

通过改变定时器的计数器初值和工作模式,我们成功地实现了LED灯闪烁频率的调节。

实验结果表明,中断和定时器是一种有效的方法,可以实现对外部事件的及时响应和定时任务的精确控制。

定时器中断程序设计实验

定时器中断程序设计实验

定时器中断程序设计实验实验目的:通过设计实验,了解定时器中断的原理和应用,并能够自主设计并实现一个定时器中断程序。

实验原理:定时器中断是指通过设置一个定时器,在特定的时间间隔内自动触发一个中断,然后在中断服务程序中进行相应的操作。

通过定时器中断,可以实现一些需要定时执行的功能,比如定时采集数据、定时更新显示、定时发送信号等。

实验步骤:1.确定所需的时间间隔,即中断周期。

根据实际需求和硬件条件,选择合适的中断周期,一般情况下为毫秒级别。

2.初始化定时器,设置计数器初值。

根据所选的中断周期,计算出所需的计数器初值,并将其加载到定时器中。

3.开启定时器中断使能。

根据所使用的硬件平台和编程语言,调用相应的函数或设置相应的寄存器,使能定时器中断。

4.编写中断服务程序。

中断服务程序是在定时器中断发生时自动执行的程序,用于处理中断事件。

根据需求,编写相应的中断服务程序代码,实现所需的功能。

5.设计实验测试部分。

根据实验需求,设计合适的测试内容,例如在每次中断发生时打印一条调试信息,或者在每次中断发生时改变LED状态等。

6.编译、烧录并运行程序。

将编写好的程序编译生成可执行文件,然后将其烧录到硬件设备中。

通过运行程序,观察测试结果,验证程序是否正常工作。

7.分析实验结果并总结。

根据实际测试结果,分析程序的运行情况,验证程序是否达到预期的功能,并总结实验中的问题和经验教训。

实验注意事项:1.确定中断周期时要考虑硬件平台的实际能力,避免设置过短或过长的中断周期导致程序运行异常。

2.编写中断服务程序时要注意中断的响应时间,尽量减小中断服务程序的执行时间,避免中断过程影响系统的实时性能。

3.在设计实验测试部分时,要确保测试内容与实验目的相符合,能够充分验证定时器中断的功能。

4.在编译、烧录及运行程序时,要根据实际的硬件平台和软件开发环境进行相应的设置,确保程序可以正确地被编译、烧录和运行。

5.在实验过程中,要合理分配时间和资源,遇到问题要及时解决,保证实验能够按计划进行。

单片机实验_中断、定时器

单片机实验_中断、定时器

理工大学实验报告(模板)实验时间:年月日星期时间::~ :实验室(房间号):实验台:班级::指导教师签字:成绩:实验三外部中断/INT0实验一、实验目的和要求学习、掌握单片机的中断原理。

正确理解中断矢量入口、中断调用和中断返回的概念与物理过程。

学习编写“软件防抖”程序,了解“软件防抖”原理。

对/int0、/int1两个外部中断进行编程,其中:●主程序的功能:LDE灯“全亮”、“全灭”交替进行 --------(状态2);●Int0中断服务程序功能:2个相邻的LED灯被点亮且循环左移(状态0);●Int1中断服务程序功能:1个LED灯被点亮且循环右移 ---(状态1);【注意】:实验仪上的LED灯物理位置最左侧为d0;最右侧为d7。

二、实验算法1 在主程序中利用CPL P3.3的指令驱动其电平不断地转换(由逻辑笔电路做程序状态监视)。

2 在中断服务程序中将P3.3置位(P3.3=1),实现对计数器“加1”并(通过P1口)显示的功能。

3 中断结束后回到主程序,程序继续对P3.3的电平不断取反。

三、实验电路图四、实验流程图主程序入口INT0入口设置中断允许P3.2置1设置中断优先级调用延时子程序设TCON 计数器加一并显示CLR A开中断(P0)—(A) P3.2=0?调用延时子程序调用延时子程序(A)—(A) RETI INT1同理五、程序清单ORG 0000HLJMP STARTORG 0003HLJMP INT_0ORG 0013HLJMP INT_1ORG 0100H ;主程序START: MOV SP,#60HMOV IE,#85HMOV IP,#04HMOV TCON,#05HLP1: M OV P0,ALCALL DELAYCPL ASJMP LP1INT_0: PUSH PSW ;中断T0入口PUSH ACCLCALL DELAYMOV A,#3FHLP2: M OV P0,ARR ALCALL DELAYSETB P3.2JNB P3.2,LP2LCALL DELAYPOP ACCPOP PSWRETIINT_1: PUSH PSW ;中断T1入口PUSH ACCLCALL DELAYLP3: M OV P0,ARL ALCALL DELAYSETB P3.3JNB P3.3,LP3LCALL DELAYPOP ACCPOP PSWRETIDELAY: PUSH 02HPUSH 03HMOV R2,#00HDL1: MOV R3,#00H DJNZ R3,$DJNZ R2,DL1POP 03HPOP 02HRETEND六、实验结果与分析LED灯按程序设计的规则亮灭,可调至3个状态,两个中断分高低优先级,实验成功。

单片机 实验三中断及定时器实验

单片机  实验三中断及定时器实验

实验三:中断及定时器实验一、实验目的:1、弄清中断的概念、基本原理,掌握中断技术的应用2、了解中断初始化的方法,中断向量安装和中断服务子程序的设计方法。

3、了解定时/计数器的工作原理及MCS51单片机的定时器内部结构4、掌握时间常数计算方法5、掌握定时器初始化方法和定时中断程序设计方法二、实验内容:定时器实验1、这个是一个电子钟走时程序,利用定时器T0产生50ms中断,中断计数器中断20次为1秒,利用秒信号进行电子钟计时。

先读懂下面程序段,然后编辑、编译程序,并在伟福仿真器上模拟调试该程序。

程序清单如下:COUNT EQU 7FHCOUNT1 EQU 7EHS_MEM EQU 73HM_MEM EQU 72HH_MEM EQU 71HORG 0000HLJMP MAINORG 000BHLJMP INT_T0 ;“*1”MAIN: MOV SP,#2FHMOV TMOD,#BMOV TH0,#03CH ;50毫秒中断时间常数MOV TL0,#0BHMOV IE,#B ;开放T0MOV IP,#0MOV S_MEM,#0MOV M_MEM,#0MOV H_MEM,#0MOV COUNT,#20SETB TR0;______________________________________________________ W AIT:NOPSJMP W AITINT_T0: MOV TL0,#0BHMOV TH0,#3CHDJNZ COUNT,EXT_T0MOV COUNT,#20 ;恢复中断计数器INC S_MEM ;“*2”MOV A,S_MEMCJNE A,60,EXT_T0MOV S_MEM,#0INC M_MEMMOV A,M_MEMCJNE A,#60,EXT_T0MOV M_MEM,#0INC H_MEMMOV A,H_MEMCJNE A,#13,EXT_T0MOV H_MEM,#0EXT_T0: RETI2、按下列要求修改程序或回答问题。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验一定时器/中断程序设计实验
一、实验目的
1、掌握定时器/中断的工作原理。

2、学习单片机定时器/中断的应用设计和调试
二、实验仪器和设备
1、普中科技单片机开发板 HC6800-EM3V3.0;
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二位的状态确定了定时器的工作方式,详见表。

方式1与方式2的差别是计数器的位数,前者13位,后者16位。

定时器内部结构逻辑图如图所示。

要测量低频信号可以首先产生一个标准时间T闸门信号,然后在该时间内计算进入计数器的脉冲个数。

这个时间有时太短,需结合软件定时。

如果要求比较高,则需要进行智能地调整T。

例如对于500HZ 信号,使用 65ms 闸门时间,则计数器值就非常少。

计数器的值超过 10000 个,才能保证精度不少于0.05%。

如果在3秒内还是发现计数器的值少于精度需要,则自动切换到周期测量模式,通过周期计算频率具有较高的精度。

如果要求3秒内给出结果,则周期超过3秒的信号就无法得到准确的频率或周期。

四、实验步骤
1.实验接线如下图所示,连接P
2.0口与D11小灯,使用单片机内部定时器T0或者T1中断,实现准确延时,使得D11小灯循环点亮1秒,熄灭1秒。

2.按照实验要求编写程序流程图,然后编写程序。

编译成 HEX 文件,连接好编程器,用 PZ-ISP 普中下载软件程序,对编写的程序进行调试,直至测试成功。

五、实验报告
1、画出电路原理图。

2、给出程序流程图和程序清单、并给予适当注释。

3、描述实验现象和结果,要求对实验现象和结果进行分析
图1 点亮一个LED灯原理图 #include<reg51.h>
sbit temp=P1^1;
unsigned char num;
void main()
{
temp=0;
num=0;
TMOD=0x01;
TH0=0x3c;
TL0=0xb0;
TR0=1;
while(1)
{
if(TF0)
{
TF0=0;
TH0=0x3c;
TL0=0xb0;
num++;
if(num==20)
{
temp=~temp;
num=0;
}
}
}
}
实验现象:实验板上第一盏led灯一亮一暗;间隔为一秒钟。

相关文档
最新文档