实验三、定时器实验

合集下载

实验三流水灯实验(io口和定时器实验)

实验三流水灯实验(io口和定时器实验)

实验三流水灯实验(I/O口和定时器实验)一、实验目的1.学会单片机I/O口的使用方法和定时器的使用方法;2.掌握延时子程序的编程方法、内部中断服务子程序的编程方法;3.学会使用I/O口控制LED灯的应用程序设计。

二、实验内容1.控制单片机P1口输出,使LED1~LED8右循环轮流点亮(即右流水),间隔时间为100毫秒。

2.控制单片机P1口输出,使LED1~LED8左循环轮流点亮(即左流水),间隔时间为100毫秒。

3.使用K1开关控制上面LED灯的两种循环状态交替进行;4. 用定时器使P1口输出周期为100ms的方波,使LED闪烁。

5.使用定时器定时,使LED灯的两种循环状态自动交替,每一种状态持续1.6秒钟(选作)。

三、实验方法和步骤1.硬件电路设计使用实验仪上的E1、E5和E7模块电路,把E1区的JP1(单片机的P1口)和E5区的8针接口L1~L8(LED的驱动芯片74HC245的输入端)连接起来,P1口就可以控制LED 灯了。

当P1口上输出低电平“0”时,LED灯亮,反之,LED灯灭。

E7区的K1开关可以接单片机P3.0口,用P3.0口读取K1开关的控制信号,根据K1开关的状态(置“1”还是置“0”),来决定LED进行左流水还是右流水。

综上,画出实验电路原理图。

2.程序设计实验1和实验2程序流程图如图3-1实验3程序流程图如图3-2所示。

图3-1 实验1,2程序流程图图3-2 实验3程序流程图实验4程序流程图如图3-3,3-4所示。

实验5程序流程图如图3-5,3-6所示。

图3-5 实验5主程序流程图图3-6 定时器中断服务子程序流程图图3-4 定时器中断服务子程序流程图图3-3 实验4主程序流程图编程要点:(1)Pl,P3口为准双向口,每一位都可独立地定义为输入或输出,在作输入线使用前,必须向锁存器相应位写入“1”,该位才能作为输入。

例如:MOV P1,A; P1口做输出MOV P1,#0FFHMOV A,P1;P1口做输入SETB P3.0MOV C,P3.1;从P3.1口读入数据(2)每个端口对应着一个寄存器,例:P1→90H(P1寄存器地址);P3→B0H(P3寄存器地址);寄存器的每一位对应着一个引脚,例:B0H.0→P3.0(3)对寄存器写入“0”、“1”,对应的外部引脚则输出“低电平”、“高电平”。

定时器的实验报告

定时器的实验报告

一、实验目的1. 理解定时器的基本原理和工作方式。

2. 掌握定时器的配置和使用方法。

3. 通过编程实现定时器的定时功能。

4. 学习定时器中断的应用。

二、实验环境1. 实验设备:单片机实验板、电源、连接线等。

2. 实验软件:Keil uVision 4、IAR EWARM等C语言开发环境。

三、实验原理定时器是一种用于实现时间延迟的硬件模块,它能够在预定的时间内产生中断或完成特定的操作。

定时器通常由计数器、控制寄存器、时钟源等组成。

定时器的工作原理是利用时钟源产生的时钟信号对计数器进行计数,当计数器达到预设值时,触发中断或完成特定操作。

四、实验内容1. 定时器基本配置(1)设置定时器模式:根据实验需求,选择定时器的工作模式(如模式0、模式1等)。

(2)设置定时器时钟源:选择定时器时钟源(如系统时钟、外部时钟等)。

(3)设置定时器计数初值:根据实验需求,设置定时器计数初值。

2. 定时器定时功能实现(1)编写程序初始化定时器:配置定时器模式、时钟源、计数初值等。

(2)编写定时器中断服务程序:在中断服务程序中实现定时功能,如控制LED闪烁、读取传感器数据等。

3. 定时器中断应用(1)配置定时器中断:设置定时器中断优先级、中断使能等。

(2)编写定时器中断服务程序:在中断服务程序中实现所需功能,如采集数据、发送数据等。

五、实验步骤1. 编写程序初始化定时器:设置定时器模式、时钟源、计数初值等。

2. 编写定时器中断服务程序:实现定时功能,如控制LED闪烁。

3. 编写定时器中断配置程序:设置定时器中断优先级、中断使能等。

4. 编译、下载程序:将编写好的程序编译生成HEX文件,通过编程器下载到实验板上。

5. 运行实验:观察实验现象,如LED闪烁频率、数据采集等。

六、实验结果与分析1. 定时器定时功能实现实验结果显示,定时器能够按照设定的定时时间产生中断,中断服务程序能够正确执行。

例如,LED闪烁频率与定时时间一致。

定时器实验报告

定时器实验报告

定时器实验报告
一、实验目的
学习如何在单片机中使用定时器,进一步理解定时器的工作
原理和使用方法。

二、实验器材
单片机开发板、电脑、LED灯或蜂鸣器等外部设备。

三、实验原理
定时器是一种内部的计时设备,可以通过设置定时器的工作
方式、计时单位和计时周期来完成不同的定时任务。

单片机上通常会有一个或多个定时器模块,我们可以通过配置和操作这些定时器模块来实现各种计时、延时、定时触发等功能。

四、实验步骤
1. 初始化定时器:设置定时器工作方式、计时单位和计时周期。

2. 启动定时器:开始计时。

3. 监测定时器中断:定时器计时完成后会触发中断。

4. 处理定时器中断:在中断服务程序中进行相应的操作,如
控制LED灯闪烁、发出蜂鸣器声音等。

5. 关闭定时器:计时完成后关闭定时器。

五、实验结果和分析
在实验中,我们可以通过设置不同的计时器工作方式、计时
单位和计时周期来实现不同的定时效果。

例如,如果将定时器设置为周期性计时方式,计时单位为微秒,计时周期为1000,
那么定时器每隔1毫秒(1000微秒)就会触发一次中断,我
们可以在中断服务程序中控制LED灯或蜂鸣器进行响应操作。

六、实验心得
通过本次实验,我进一步了解了定时器的工作原理和使用方法。

定时器是单片机中常用的功能模块,可以实现各种时间相关的功能。

掌握了定时器的使用,有助于提高单片机系统的定时、延时、调度等能力,为后续的项目开发和应用打下良好的基础。

实验三 用定时器实现数字振荡器

实验三 用定时器实现数字振荡器

实验三 用定时器实现数字振荡器1 实验目的在数字信号处理中,会经常使用到正弦/余弦信号。

通常的方法是讲某个频率的正弦/余弦值余弦计算出来后制成一个表,DSP 工作时仅作查表运算即可。

在本实验中将介绍另一种获得正弦/余弦信号的方法,即利用数字振荡器用叠代方法产生正弦信号。

本实验除了学习数字振荡器的DSP 实现原理外,同时还学习C54X 定时器使用以及中断服务程序编写。

另外,在本实验中我们将使用汇编语言和C 语言分别完成源程序的编写。

2 实验要求本实验利用定时器产生了一个2kHz 的正弦信号,定时器被设置成每25uS 产生一次中断,(等效于采样速率未40k )利用该中断,在该中断服务程序中用叠代算法计算出一个SNT 值,病利用CCS 的图形显示功能查看波形。

3 实验原理(1)数字振荡器原理设一个传递函数为阵线序列sinkwT ,其z 变换为111BzAz 1Cz )z (H -----=其中,A =2coswT ,B =-1,C=sinwT 。

设初始条件为0,求出上式的反Z 变换得: y[k]=Ay[k-1]+By[k-2]+Cx[k-1]这是个二阶差分方程,其单位冲击响应即为sinkwT 。

利用单位冲击函数x[k-1]的性质,即仅当k=1时,x[k-1]=1,代入上式得:k=0 y[0]=Ay[-1]+By[-2]+0=0k=1 y[1]=Ay[0]+By[-2]+c=ck=2 y[2]=Ay[1]+By[0]+0=Ay[1]k=3 y[3]=Ay[2]+By[1]k=n y[n]=Ay[n-1]+By[n-2]在k ﹥2以后,y[k]能用y[k -1]和y[k-2]算出,这是一个递归得方法。

根据上面得说明,我们可以开始数字振荡器得设计。

设该振荡器得频率为2kHz,采样率为40kHz (通过定时器设置,每隔25us 中断一次,即产生一个y[n])则递归得差分方程系数为:A =2coswT=2cos(2×PI ×2000/40000)=2×0.95105652B=-1C=sinwT=sin(2×PI ×2000/40000)=0.3090169979BC 22A 15=⨯ C00022B 15=⨯ 13C722C 15=⨯ 为了便于定点DSP 处理,我们将所有系数除以2,然后用16为定点格式表示为: 这便是本实验中查生2kHz 阵线信号的三个系数。

PLC应用技术实验3 定时器和计数器器指令的应用

PLC应用技术实验3 定时器和计数器器指令的应用

PLC 应用技术实验指导书
1 实验3 定时器和计数器指令的应用
一、实验目的
1. 熟悉CPM2A 型PLC 的交流和直流电源的连接,熟悉输入开关板和I/O 端子的连接。

2. 通过实验程序熟悉定时器和计数器指令的基本应用方法。

二、实验内容
1. 认真阅读实验程序,理解并熟悉实验程序的功能。

2. 输入程序。

3. 调试并监控程序运行。

三、实验步骤
1. 正确连接PLC 所需的各种电源。

连接实验程序的需要的输入开关板和I/O 的接线端子。

2. 输入用定时器指令编写的延时10s 导通的定时程序(见图1)。

运行、监控并调试,观察结果。

3. 输入用计数器指令编写的计数10次的计数程序(见图2)。

运行、监控并调试,观察结果。

4. 用定时器和计数器器指令编写一个既有定时器,又有计数器的延时10s 导通的定时电路程序。

输入、修改、运行、监控并调试,观察结果。

●自编梯形图程序:
四、实验总结及思考
1. 总结本次实验中各个程序运行的结果。

2. 写出上述梯形图程序的指令语句表。

3. 若延时时间修改为50s ,应该修改定时器的什么值,如何修改?
4. 按现在的程序,计数电路中的1.02输入端子上应该接动合还是动断按钮?为什么?
00000 00002 00005
图1 延时10s 的定时电路的梯形图 00000 00004 00007 图2 计数10次的计数电路的梯形图。

实验三定时器及外部中断实验

实验三定时器及外部中断实验

实验三定时器及外部中断实验一、实验目的1)熟悉VC5416的定时器工作原理。

2)掌握VC5416定时器的编程控制方法。

3)学会使用定时器的中断方式来控制程序执行方法。

4)掌握外部中断的编程控制方法,理解DSP对于中断的响应的过程。

5)了解并学习混合编程的实现方法。

二、实验设备1)计算机一套,DSP硬件仿真器一台,实验箱一台。

2)CCS4.1-CCS5.5软件版本。

3)源程序及链接命令文件见:D:\ EXPER\EXP3目录下的.asm 、.cmd、.C 和.lib文件。

三、实验步骤(一)、连接仿真器,将仿真器插接到C5416的JTAG接口上,另一头插接到电脑的USB接口上,因为仿真器是金属外壳,容易和箱子内部的电路触碰造成短路,从而对实验箱造成损坏,这个要特别注意,也不允许在机箱打开电源情况下插拔仿真器。

(二)、实验箱配置及连线:C5416DSP核心板上的SW1的1-6的开始设置为off off off off on on(上电后工做于1/2分频器方式,其它实验也按照此设置不变,我试验过改为PLL*2方式仿真器就连接不上了),SW2设置为on on on on。

将DSP核心板所在试验箱引脚连线区的BCANRX(C54的XF)引脚,与指示灯连线区LAMP的L1连接起来,这样就可以通过XF控制这个L1这个方光管的亮灭了。

将DSP核心板所在试验箱引脚连线区的INT0(C54的外部中断0输入)引脚与单脉冲按键PAULSE的P-(按下输出负脉冲)连接起来,这样按下按键时,就会给DSP的INT0中断引脚发送一个负脉冲。

连线照片见程序目录中的图片文件。

(二)、打开实验箱电源开关。

(三)、使用给定的文件,按照实验一的步骤建立实验项目,例如工作区目录为D:\ exp3 中建立一个exp3的实验项目,添加所有的给定的文件。

(四)、仿真调试方法1、通过菜单Project- Build All 对项目进行编译和链接,如下:如果有错误会出现在problem 窗口中。

实验三定时器中断

实验三定时器中断

实验三定时器中断一.实验目的1.掌握定时器典型应用方法,了解相应寄存器的作用和编程应用;2. 了解TMS320F2812的中断结构和对中断的处理流程。

二.实验设备1.PC机一台,操作系统为WindowsXP (或Windows98、Windows2000),安装了ccs3.1;2.TI 2000系列的TMS320F2812 eZdsp开发板一块;3.扩展实验箱一台。

三.实验原理1.TMS320F2812器件上有3个32位定时器(图3.1)(TIMER0/1/2)。

CPU定时器1和2预留给系统(如DSP-BIOS)使用,CPU定时器0可以在用户应用程序中使用。

在F2812芯片中,定时器中断信号(TINT0、TINT1、TINT2)的连接如图3.2。

图3.1 CPU定时器图3.2 CPU定时器中断信号和输出信号CPU 定时器的通常操作如下:定时器时钟经过预定标计数器(PSCH:PSC)递减计数,预定标计数器产生溢出后向定时器的32位计数器(TIMH:TIM)借位,定时器计数器产生溢出后使定时器向CPU发送中断。

每次预定标计数器产生溢出后使用分频寄存器(TDDRH:TDDR)中的值重新装载,32位周期寄存器(PRDH:PRD)为32位计数器提供重新装载值。

表3.1中列出的寄存器用于配置定时器。

表3.1 CPU 定时器0、1、2 配置和控制寄存器2.中断响应过程一般分为四步:a.接受中断请求。

必须由软件中断(从程序代码)或硬件中断(从一个引脚或一个基于芯片的设备)提出请求去暂停当前主程序的执行。

b.响应中断。

必须能够响应中断请求。

如果中断是可屏蔽的,则必须满足一定的条件,按照一定的顺序去执行。

而对于非可屏蔽中断和软件中断,会立即作出响应。

c.准备执行中断服务程序并保存寄存器的值。

d.执行中断服务子程序。

调用相应得中断服务程序ISR,进入预先规定的向量地址,并且执行已写好的ISR。

中断类别分为可屏蔽中断、不可屏蔽中断。

实验三使用中断的定时器

实验三使用中断的定时器

实验三使用中断的定时器一、实验目的1、理解C2000芯片的CPU定时器和中断系统的工作原理;2、学会使用TMS320F28027芯片的定时器实现定时;3、掌握CPU定时器和PIE外设中断控制器相关寄存器的配置与使用。

二、概述本实验的程序实现了定时器Timer0定时1秒,对应LED灯D10状态翻转,由亮到灭,在由灭到亮,一致循环下去;定时器Timer1定时2秒,对应LED灯D12状态翻转;定时器Timer2定时4秒,对应LED灯D13状态翻转。

表1 输出引脚硬件配置表3D13GPIO237Timer2对应LED图1 LED灯连接电路图三、实验内容1、按照新建工程项目的方法进行实验(参考实验二)。

2、主函数(程序流程框图见图2所示)#include"DSP28x_Project.h"// Device Headerfile and Examples Include File // Prototype statements for functions found within this file.interrupt void cpu_timer0_isr(void);interrupt void cpu_timer1_isr(void);interrupt void cpu_timer2_isr(void);void InitTimerGpio(void);void main(void){// Step 1.系统初始化Initialize System Control:// PLL, WatchDog, enable Peripheral Clocks// This example function is found in the f2802x_SysCtrl.c file.InitSysCtrl();// Step 2.GPIO初始化 Initalize GPIO:// This example function is found in the f2802x_Gpio.c file and// illustrates how to set the GPIO to it's default state.// InitGpio(); // Skipped for this exampleInitTimerGpio();// Step 3. 清除(关闭)中断并初始化外设中断向量表 Clear all interrupts and initialize PIE vector table:// 关闭CPU中断 Disable CPU interruptsDINT;// Initialize the PIE control registers to their default state.// The default state is all PIE interrupts disabled and flags// are cleared.// This function is found in the f2802x_PieCtrl.c file.InitPieCtrl();// Disable CPU interrupts and clear all CPU interrupt flags:IER = 0x0000;IFR = 0x0000;// Initialize the PIE vector table with pointers to the shell Interrupt// Service Routines (ISR).// This will populate the entire table, even if the interrupt// is not used in this example. This is useful for debug purposes.// The shell ISR routines are found in f2802x_DefaultIsr.c.// This function is found in f2802x_PieVect.c.InitPieVectTable();// Interrupts that are used in this example are re-mapped to// 设置中断向量表 ISR functions found within this file.EALLOW; // This is needed to write to EALLOW protected registers0 = &cpu_timer0_isr;1 = &cpu_timer1_isr;2 = &cpu_timer2_isr;EDIS; // This is needed to disable write to EALLOW protected registers // Step 4. 初始化CPU定时器 Initialize the Device Peripheral. This function can be// found in f2802x_CpuTimers.cInitCpuTimers(); // For this example, only initialize the Cpu Timers#if (CPU_FRQ_60MHZ)//配置CPU定时器 Configure CPU-Timer 0, 1, and 2 to interrupt every second:// 60MHz CPU Freq, 1 second Period (in uSeconds)ConfigCpuTimer(&CpuTimer0, 60, );ConfigCpuTimer(&CpuTimer1, 60, );ConfigCpuTimer(&CpuTimer2, 60, );#endif#if (CPU_FRQ_50MHZ)// Configure CPU-Timer 0, 1, and 2 to interrupt every second:// 50MHz CPU Freq, 1 second Period (in uSeconds)ConfigCpuTimer(&CpuTimer0, 50, );ConfigCpuTimer(&CpuTimer1, 50, );ConfigCpuTimer(&CpuTimer2, 50, );#endif#if (CPU_FRQ_40MHZ)// Configure CPU-Timer 0, 1, and 2 to interrupt every second:// 40MHz CPU Freq, 1 second Period (in uSeconds)ConfigCpuTimer(&CpuTimer0, 40, );ConfigCpuTimer(&CpuTimer1, 40, );ConfigCpuTimer(&CpuTimer2, 40, );#endif// To ensure precise timing, use write-only instructions to write to the entire register. Therefore, if any// of the configuration bits are changed in ConfigCpuTimer and InitCpuTimers (in F2802x_CpuTimers.h), the// below settings must also be updated..all = 0x4001; //Use write-only instruction to set TSS bit = 0.all = 0x4001; // Use write-only instruction to set TSS bit = 0.all = 0x4001; // Use write-only instruction to set TSS bit = 0// Step 5.使能用到的中断 User specific code, enable interrupts:// Enable CPU int1 which is connected to CPU-Timer 0, CPU int13// which is connected to CPU-Timer 1, and CPU int 14, which is connected// to CPU-Timer 2:IER |= M_INT1;IER |= M_INT13;IER |= M_INT14;// Enable TINT0 in the PIE: Group 1 interrupt 7R1.7 = 1;// Enable global Interrupts and higher priority real-time debug events:EINT; // Enable Global interrupt INTMERTM; // Enable Global realtime interrupt DBGM// Step 6. 设置空循环(程序进入运行状态) IDLE loop. Just sit and loop forever (optional):for(;;);}//下面是中断服务程序interrupt void cpu_timer0_isr(void){ EALLOW;ruptCount++;.GPIO0 = 1;.GPIO34 = 1;// Acknowledge this interrupt to receive more interrupts from group 1 K.all = PIEACK_GROUP1;}interrupt void cpu_timer1_isr(void){ EALLOW;ruptCount++;.GPIO1 = 1;// The CPU acknowledges the interrupt.EDIS;}interrupt void cpu_timer2_isr(void){ EALLOW;ruptCount++;.GPIO2 = 1;// The CPU acknowledges the interrupt.EDIS;}// 下面是配置GPIOvoid InitTimerGpio(void){EALLOW;X1.34 = 0;R.34 = 1;X1.0 = 0;R.0 = 1;X1.1 = 0;R.1 = 1;X1.2 = 0;R.2 = 1;EDIS;}四、课外学习任务1、进一步理解实验内容,在实验板上找到GPIO34连接的LED灯,试解读下面的程序代码:X1.34 = 0;R.34 = 1;2、总结实验内容及步骤写出实验报告。

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

实验三、定时器实验
1 实验目的
通过实验,掌握定时器的使用方法。

着重掌握定时中断的使用!
2 实验内容
1、使用Mega16单片机的timer0产生1ms间隔的定时中断(建议采用application builder,既可以用Normal工作模式也可以使用CTC模式),(1)在定时中断中实现4位数码管的动态刷新。

(2)在1ms的定时中断中设计100mS的时间标志位,在主程序中查询时间标志位,实现LED闪烁。

2、重新配置TImer0工作在PWM模式,用按键改变PWM的占空比,调节电机转速;
3 实验预习要求
仔细阅读教材中定时中断的范例;
4实验步骤
1、启动ICCAVR,创建一个工程文件,配置timer0,实现10ms的定时中断,采用Application
Builder来生成初始化代码。

注意:本次实验使用的IO口也要初始化,包括数码管驱动所使用的IO,按键等。

2、在定时中断中实现四位数码管的定时刷新(注:要使用上次实验课的HC595的驱动),
并在定时中断中实现100ms的时间标志(时标),在主程序中查询时标,实现led(PORTC 口任何一个LED都可)闪烁;
3、重新配置TImer0工作在PWM模式,初始占空比设置为10%,然后使用按键INT1(在原理图中为SW8,连接到了单片机的PD3引脚上』来改变占空比,例如每按一次按键,占空比增加10%。

注:实验中要使用的管脚有:PD4、PD5、PD6、PD7、PB0、PB1、PA0,PD3,各管脚连接请参照原理图。

实验三定时器应用实验。

相关文档
最新文档