清华大学计算机硬件技术基础实验报告 下载本文

内容发布更新时间 : 2025/1/4 4:04:34星期一 下面是文章的全部内容请认真阅读。

实验名称:实验8:定时器

姓名:袁鹏 学号:2013011780 实验班号:33 机器号:42

一.实验目的

了解 MSP430 定时器A 工作原理,掌握MSP430 定时器A 的控制方法。 二.实验任务

1. 定时器A的定时功能学习

采用定时器A的增计数方式(Up Mode),每秒产生一次CCR0的TACCR0 CCIFG中断, 计 数秒值,将计数值通过8个发光二极管显示出来,并控制蜂鸣器每5秒发出一警报声。

实现方法:将P1.0~P1.7与LED1~LED7连接起来,P2.0与蜂鸣器连接起来,采用32.768KHz的外部晶振作为ACLK的时钟源,因此P2.6与P2.7要与外部晶振连接而不能作为基本输入输出。选择增计数方式,每隔一秒改变一次发光二极管状态,每隔五秒发出一声警报。具体代码如下: #include \#include %unsigned int count=0,s=0; void delay() //延时函数 { unsigned int i; for(i=0;i<0xffff;i++); } void buzz() //蜂鸣器响一声 { P2OUT&=~BIT0; delay(); P2OUT|=BIT0; delay(); } int main ( void ) { WDTCTL = WDTPW + WDTHOLD; //关闭看门狗 _DINT(); P1SEL=0; //设置P1.0~P1.7为基本输出 P1SEL2=0; P1OUT=0XFF; P1DIR=0XFF; P2SEL|=BIT6+BIT7; //启用外部晶振 P2SEL2&=~(BIT6+BIT7); P2DIR&=~BIT6; P2DIR|=BIT7; P2SEL&=~BIT0; //设置P2.0为输出 P2SEL&=~BIT0; P2OUT|=BIT0; P2DIR|=BIT0; TA0CTL|=TACLR+TASSEL_1+MC_1; //采用ACLK时钟源,清零计数器,选择增计数方式 TA0CCR0=32767; TA0CCTL0|=CCIE; //打开中断允许 _EINT(); while(1) { if(count==257) //设置LED灯显示 count=1; P1OUT=~count; if(s==5) //控制蜂鸣器鸣叫 { buzz(); s=0; } } } #pragma vector=TIMER0_A0_VECTOR __interrupt void time() //中断程序 { count++; s++; } 思考:当采用外部晶振作为时钟源时,端口P2.6~P2.7只能设置为外部晶振引脚,而不能设置为基本输入输出,这样在整体控制LED灯时不便于布线以及端口之间的连接,十分不方便。因此可以考虑采用SMCLK为时钟信号,并设置SMCLK的时钟源为12KHz的VLOCLK,这时只许再设置一下TAR0CR0的计数值使中断恰好为一秒即可,大大方便布线。