通用定时器秒表实验报告三
更新时间:2024-01-19 23:33:01 阅读量: 教育文库 文档下载
- 通用定额发票能报销吗推荐度:
- 相关推荐
嵌入式实验三.基于通用定时器秒表的实现
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 \#include
// 定义 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的特性.
正在阅读:
通用定时器秒表实验报告三01-19
冲压复习题01-20
财税2009固定资产抵扣范围进一步明确10-28
中国书法理论体系05-23
关于推进联调中心实体化运作的初步思考10-24
西安地裂缝和地面沉降灾害现状及防治07-19
13-14学年第一学期公选课《中西文化比较》教学讲义07-05
适合烧结烟气脱硫的SDA技术 - 图文11-17
小学三年级英语知识竞赛题110-12
- exercise2
- 铅锌矿详查地质设计 - 图文
- 厨余垃圾、餐厨垃圾堆肥系统设计方案
- 陈明珠开题报告
- 化工原理精选例题
- 政府形象宣传册营销案例
- 小学一至三年级语文阅读专项练习题
- 2014.民诉 期末考试 复习题
- 巅峰智业 - 做好顶层设计对建设城市的重要意义
- (三起)冀教版三年级英语上册Unit4 Lesson24练习题及答案
- 2017年实心轮胎现状及发展趋势分析(目录)
- 基于GIS的农用地定级技术研究定稿
- 2017-2022年中国医疗保健市场调查与市场前景预测报告(目录) - 图文
- 作业
- OFDM技术仿真(MATLAB代码) - 图文
- Android工程师笔试题及答案
- 生命密码联合密码
- 空间地上权若干法律问题探究
- 江苏学业水平测试《机械基础》模拟试题
- 选课走班实施方案
- 秒表
- 定时器
- 通用
- 实验
- 报告