通用定时器秒表实验报告三

时间:2024.5.4

             嵌入式实验三.基于通用定时器秒表的实现

                               

 3.3基于通用定时器秒表的实现

一、实验目的

学会编写中断程序

学会应用LM3S9b92的通用定时器

比较通用定时器和systick的特性

二、实验设备

计算机、LM3S9B92开发板、USB A型公口转 Mini B型 5Pin 数据线1 条

三、实验原理

在Stellaris系列ARM内部通常集成有4个通用定时器模块(General-Purpose Timer Module,GPTM),分别称为Timer0、Timer1、Timer2和Timer3。它们的用法是相同的:每个Timer模块都可以配置为一个32位定时器或一个32位RTC定时器;也可以拆分为两个16位的定时/计数器TimerA和TimerB,它们可以被配置为独立运行的定时器、事件计数器或PWM等。

四、实验要求

参照systick设计秒表的思路,应用通用定时器进行计时,实现秒表功能。开发板上的按键SW1起秒表的起始和停止作用,按下SW1键,表示秒表的启动,开始计时,再按下SW1键,则表示秒表的停止。秒表时间的显示,可以采用LED1灯的闪烁方式,或者直接显示在液晶屏上。

五、实验步骤

1、  连接实验设备:使用USB mini B线缆的mini端与开发板ICDI口相连,另一端接到PC机的USB插口上。

2、  根据实验要求编写、调试、运行程序。并要求在代码上附上相关的注释。

3、  书写实验报告,要求附上程序流程图。

实验代码:

#include "systemInit.h"

#include <timer.h>

// 定义 LED

#define LED_PERIPH  SYSCTL_PERIPH_GPIOF

#define LED_PORT  GPIO_PORTF_BASE

#define LED_PIN   GPIO_PIN_3

#define KEY_PERIPH SYSCTL_PERIPH_GPIOJ

#define KEY_PORT  GPIO_PORTJ_BASE

#define KEY_PIN  GPIO_PIN_7

unsigned char count=0;

unsigned char flag=0;

void LED(unsigned int n)    //根据n值控制LED闪烁次数

{

           while(n>0)

           {

                             GPIOPinWrite(LED_PORT, LED_PIN, 0xFF);  // 点亮 LED

                             SysCtlDelay(150 * (TheSysClock / 3000));  // 延时约 150ms

                             GPIOPinWrite(LED_PORT, LED_PIN, 0x00);  // 熄灭 LED

                             SysCtlDelay(850 * (TheSysClock / 3000));  // 延时约 850ms

                      n=n-1;

           }

}

int main(void)

{

 //jtagWait( );  // 防止 JTAG 失效,重要!

 clockInit( );  // 时钟初始化:晶振, 6MHz

 SysCtlPeriEnable(LED_PERIPH); // 使能 LED 所在的 GPIO 端口

 GPIOPinTypeOut(LED_PORT, LED_PIN);  // 设置 LED 所在的管脚为输出

 SysCtlPeriEnable(KEY_PERIPH); // 使能 KEY 所在的 GPIO 端口

 GPIOPinTypeIn(KEY_PORT, KEY_PIN);  // 设置 KEY 所在管脚为输入

SysCtlPeriEnable(SYSCTL_PERIPH_TIMER0);  // 使能 Timer 模块

 TimerConfigure(TIMER0_BASE, TIMER_CFG_32_BIT_PER); // 配置 Timer 为 32 位周期定时器

//       TimerPrescaleSet(TIMER0_BASE, TIMER_A, 199);  // 预先进行 200 分频

 TimerLoadSet(TIMER0_BASE, TIMER_A, 16000000);  // 设置 Timer 初值,定时 1s

 TimerIntEnable(TIMER0_BASE, TIMER_TIMA_TIMEOUT); // 使能 Timer 超时中断

IntEnable(INT_TIMER0A);  // 使能 Timer 中断

 GPIOIntTypeSet(KEY_PORT, KEY_PIN, GPIO_LOW_LEVEL); // 设置 KEY 管脚的中断类型

 GPIOPinIntEnable(KEY_PORT, KEY_PIN);  // 使能 KEY 所在管脚的中断

 IntEnable(INT_GPIOJ);  // 使能 GPIOJ 端口中断

 IntMasterEnable( );  // 使能处理器中断

for (;;)

{

}        

}

// SysTick 计数器的中断服务函数

void  Timer0A_ISR(void)

{

unsigned long ulStatus;

 ulStatus = TimerIntStatus(TIMER0_BASE, true);  // 读取中断状态

 TimerIntClear(TIMER0_BASE, ulStatus);  // 清除中断状态,重要!

 if (ulStatus & TIMER_TIMA_TIMEOUT)  // 如果是 Timer 超时中断

 {

count++;                                       //计数器加1

return;

 }

}

// GPIOJ 的中断服务函数

void GPIO_Port_J_ISR(void)

{

unsigned char ucVal;

unsigned long ulStatus;

//       IntMasterDisable( );                           //关闭中断

 ulStatus = GPIOPinIntStatus(KEY_PORT, true);  // 读取中断状态

 GPIOPinIntClear(KEY_PORT, ulStatus);  // 清除中断状态,重要

 if (ulStatus & KEY_PIN)  // 如果 KEY 的中断状态有效

 {

           if(flag==0){

                    TimerEnable(TIMER0_BASE, TIMER_A);  // 使能 Timer 计数

                    flag=1;

                    SysCtlDelay(50 * (TheSysClock / 3000));

           }

           else if(flag==1)

           {

                    TimerDisable(TIMER0_BASE, TIMER_A);  // 使能 Timer 计数

                    flag=0;

                    LED(count);                                           //闪烁LED

                    count=0;                                                 //计数置零

                    SysCtlDelay(10 * (TheSysClock / 3000));

           }

 }

// IntMasterEnable( );                                   //使能中断

}

 流程图:

六、实验心得

通过本次试验,我学会了编写中断程序,学会应用LM3S9b92的通用定时器

,比较通用定时器和systick的特性.


第二篇:单片机原理与应用实验报告5——秒表定时器实验


大连理工大学软件学院

《单片机原理与应用》实验报告

姓 名: 学号:

姓 名: 学号:

组 号: 班级: 班级: 实验箱编号:

月 日 实验室: 嵌入式实验室 实验台: Embest Edukit-III平台 指导教师: 侯刚 成绩:

实验五:秒表定时器实验

一、实验目的和要求

题目:秒表定时器实验

实验目的

1. 学习单片机的基本接口技术。

2. 学习74HC595、74HC138使用及与51单片机的控制方法。

实验要求

1. 通过按键控制,完成数码管的显示计数控制。

2. 用汇编语言设计程序,完成8个数码管的显示控制。当按下INT 按钮时,数码管开始快速计时,高五位为秒数,低三位为ms 数,每1ms 刷新一次显示内容。当再次按下INT 按钮时,停止计数。

二、实验原理和内容

实验内容:

用汇编语言设计程序,完成8个数码管的显示控制。当按下INT 按钮时,数码管开始快速计时,高五位为秒数,低三位为ms 数,每1ms 刷新一次显示内容。当再次按下INT 按钮时,停止计数。

实验原理:

1. 根据原理图,分析工作原理,有P0进行取段码,P2.0 P2.1 P2.2进行取位码。

2. 使用定时器进行计时。根据所给开发板上的晶振频率,计算出计时器所付初值,设置计时器TO在模式下工作,每次计时100ms后,转入数码管显示中断处理程序。

3. 实验板为共阴极数码管显示,将对应的显示0~9的电信号依次存储在“数组表”中。

4. 使用key1,key2两个按键,按下key1,开始计时。按下key2,计时停止。

5. 根据实验要求,采用T0,T1两个定时器,其中T0用来增加时间显示,T1为按暂停键时为LED显示管循环上电所用。

6. 每部分中断程序用寄存器间接寻址的方式获取显示数字的电信号量。并进行循环上电,保证数字的亮度。

三、主要仪器设备及软件编程环境

主要仪器:计算机编程软件,51电路开发板

编程环境:uVision2 ,progisp烧写软件

四、实验步骤与编程

实验步骤:编写代码,编译,调试,烧写,完成实验。

编程:

ORG 0000H AJMP MAIN ORG 000BH AJMP IT0P ORG 001BH AJMP IT1P ORG 0100H

MAIN:

MOV SP,#60H

MOV TMOD,#01H MOV TL1,#18H MOV TH1,#0FCH

SETB TR1 SETB ET1 SETB EA

LOOP:

JNB

JNB JMP

P3.0,LP00 ;开始 P3.1,LP01 LOOP LP00:

ACALL DELAY

LP01: JB P3.0,LOOP ;去抖动 ACALL PT0M0 JMP LOOP

ACALL DELAY

JB P3.1,LOOP ACALL PT0M1 JMP ;开始计时,用T0~ OOP PT0M0:

CLR

CLR CLR EA ET1 TR1 MOV TL0,#18H MOV TH0,#0FCH SETB

SETB

SETB

RET

PT0M1:

CLR

CLR

CLR

MOV

MOV

SETB

SETB

SETB

RET

IT0P: TR0 ET0 EA EA ET0 TR0 TL1,#18H TH1,#0FCH TR1 ET1 EA

CLR

IT1P: RETI EA PUSH PSW PUSH Acc MOV TL0,#18H MOV TH0,#0FCH INC R0 ;中断次数,间接表示八个管位数 MOV A,R0 MOV B,#8 DIV AB ;用余数来控制哪位显示 MOV A,B MOV P2,A MOV R0,A ACALL CHANGE ACALL SHOW POP POP Acc PSW SETB EA

CLR EA

PUSH PSW PUSH Acc MOV TL1,#18H MOV TH1,#0FCH INC R0 MOV A,R0 MOV B,#8 DIV AB MOV A,B MOV R0,A MOV P2,A MOV P0,#00H ACALL SHOW POP POP Acc PSW SETB EA RETI

DELAY: MOV R2,#60 DELAY1:

MOV R3,#250 DJNZ R3,$

DJNZ R2,DELAY1 RET

CHANGE:

C1:

INC MOV R1,#4FH MOV R7,#09H R1 MOV A,@R1 INC A MOV B,#10 DIV AB MOV @R1,B CJNE A,#1,OVER DJNZ R7,C1

OVER: RET

SHOW: CJNE R0,#0,BP10

MOV P0,#00H MOV A,57H

MOV DPTR,#TABLE MOVC A,@A+DPTR MOV P0,A AJMP OVER BP10:

CJNE

MOV MOV MOV MOVC MOV AJMP BP20:

CJNE

MOV MOV MOV MOVC MOV AJMP BP30:

CJNE R0,#1,BP20 P0,#00H A,56H DPTR,#TABLE A,@A+DPTR P0,A OVER R0,#2,BP30 P0,#00H A,55H DPTR,#TABLE A,@A+DPTR P0,A OVER R0,#3,BP40

MOV P0,#00H MOV A,54H MOV DPTR,#TABLE MOVC A,@A+DPTR MOV P0,A AJMP

BP40:

CJNE

MOV

MOV

MOV

MOVC MOV

AJMP

BP50:

CJNE

MOV

MOV

MOV

MOVC MOV

AJMP OVER R0,#4,BP50 P0,#00H A,53H DPTR,#TABLE A,@A+DPTR P0,A OVER R0,#5,BP60 P0,#00H A,52H DPTR,#TABLE A,@A+DPTR P0,A OVER

BP60:

CJNE R0,#6,BP70

MOV P0,#00H MOV A,51H MOV DPTR,#TABLE MOVC A,@A+DPTR MOV P0,A AJMP OVER

BP70:

MOV A,50H

MOV P0,#00H MOV DPTR,#TABLE MOVC A,@A+DPTR MOV P0,A AJMP OVER

TABLE: DB 0x3F,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f

END

五、实验数据与结果分析

数码管实现了计时(由于采用定时器编写,不会仿真,所以无截图)。

六、讨论、建议

在上次试验的帮助下,这次许多问题都已经避免了,但是这次的问题是如何使用按键,我们计时只是初略估计,需要改进。

更多相关推荐:
单片机定时器实验报告

定时器实验报告实验目的1掌握单片机内部计数器的使用和编程方法2掌握中断处理程序的编程方法实验器材12345G6W仿真器一台MCS51实验板一台PC机一台电源一台示波器一台实验内容及要求1在使用12MHz晶振的条...

51定时器实验报告

电子信息工程学系实验报告课程名称单片机原理及接口应用实验项目名称51定时器实验实验时间20xx1216班级姓名学号一实验目的熟悉keil仿真软件protues仿真软件的使用和单片机定时程序的编写了解51单片机中...

单片机实验报告——定时器

实验四定时器实验自动化121班120xx00236张礼一实验目的掌握定时器的工作原理及四种工作方式掌握定时器计数初始值的计算掌握如何对定时器进行初始化以及程序中如何使用定时器进行定时二实验仪器单片机开发板一套计...

定时器实验报告

实验六定时器计数器一实验目的学会8253芯片和微机接口的原理和方法掌握8253定时器计数器的工作方式和编程原理二实验内容用8253的0通道工作在方式3产生方波三实验接线图四编程指南8253芯片介绍8253是一种...

定时器实验报告

定时器实验报告学生何绍金学号20xx03870408专业班级指导老师杨东勇20xx年12月一实验目的1掌握定时器的工作原理2学习单片机定时器的应用设计和调试二实验设备统一电子开发平台三实验要求连接电路并编写程序...

51单片机定时器实验报告

51单片机定时器实验实验内容实验内容1编写程序使定时器0或者定时器1工作在方式1定时50ms触发蜂鸣器C语言程序includeltreg52hgtdefineuintunsignedintdefineucahr...

dsp实验报告 哈工大 实验一 定时器实验

实验一定时器实验一实验目的1通过实验熟悉LF2407A的定时器2掌握LF2407A定时器的控制方法3掌握LF2407A的中断结构和对中断的处理流程4学会运用中断程序控制程序流程二实验设备计算机ICETEKLF2...

方便预置的倒计时数显定时器实验报告

一内容提要在人们日常生活中或大众关心的某项活动中或电器使用过程中常常需要一个倒计时计时器用以醒目的显示要做的事件所剩下的时间提醒人们做好准备报告主要讲述了方便预置倒计时器工作原理以及其各个组成部分记述了我们在整...

555定时器及其应用实验报告

555定时器及其应用实验目的1掌握555的工作原理及其性能特点2掌握555组成的基本电路及应用实验要求1用555组成一个时钟脉冲信号发生器要求输出标准秒脉冲20Hz20kHz范围内任意频率可调占空比可调的脉冲信...

555定时器声光报警器实训报告

苏州市职业大学实习实训报告名称20xx年12月30日至20xx年1月5日共一周学院部电子信息工程学院班级12电气2姓名李东学院部负责人系主任指导教师苏州市职业大学电子信息工程学院目录第一章绪论3第二章555定时...

555仿真实验报告-多谐振荡器

仿真实验报告册仿真实验课程名称数字电子技术实验仿真仿真实验项目名称基于555定时器的多谐振荡器的设计仿真类型填基础综合设计院系物理与机电工程学院专业班级13电子2班姓名学号指导老师刘堃完成时间20xx0325成...

555实验报告-多谐振荡器

韶关学院仿真实验报告册仿真实验课程名称:数字电子技术实验仿真仿真实验项目名称:基于555定时器的多谐振荡器的设计仿真类型(填■):(基础□、综合□、设计■)院系:物理与机电工程学院专业班级:13电子(2)班姓名…

定时器实验报告(39篇)