当前位置:文档之家› 东南大学MCU第三四次实验

东南大学MCU第三四次实验

东南大学自动化学院实验报告课程名称: MCU技术及课程设计第二次实验实验三:定时器输出PWM波形实验四:LED数码管的使用院(系):自动化专业:自动化姓名:学号:实验室:实验组别:同组人员:实验时间:2015 年5 月7 日评定成绩:审阅教师:实验三:定时器输出PWM波形一、实验目的与要求1.实验目的(1)学习MP430单片机的时钟原理和定时器使用方法。

(2)认识学习PWM波形的作用及原理。

2.实验要求编写程序输出1s周期的PWM波形,产生两路PWM波形从引脚P1.2和P1.3分别输出。

CCR0中的值定义了PWM信号的周期,CCR1,CCR2中的值定义了PWM信号的占空比。

定时使用32.768KHz的ACLK作为输入时钟源,P1.2上的占空比为75%,P1.3上的占空比为25%。

二、实验原理1)Timer_A定时器模块框图如图3-1所示。

由图3-1可知,Timer_A模块可以有三种时钟源输入。

分别是ACLK,SMCLK,TAxCLK。

时钟源的选择通过TASSEL信号来完成。

被选择的时钟源可以直接送给TIMER模块,或者通过ID信号进行2,4,8分频。

选择的时钟信号还可以通过TAIDEX信号进一步做2,3,4,5,6,7或者8分频。

当TACLK信号被设置的时候,TIMER的时钟分频逻辑被复位。

图3-1Timer_A模块框图2)TimerA控制寄存器TA0CTL详细定义如图3-2所示。

图3-2TimerA控制寄存器TA0CTL3)定时器中断的中断向量中包含一个独立中断和若干个共源中断,Timer_A模块的中断分类如图3-3所示。

图3-3Timer_A模块的中断向量分类图1)独立中断源的中断处理TA0CCTL0=CCIE;//CCR0中断使能#pargmavector=TIMER0_A0_VECTOR//中断向量定义,可查询头文件得到__interruptvoidTIMER0_A0_ISR(void){//添加中断处理代码}2)共源中断向量寄存器TAxIV图3-4共源中断向量寄存器TAxIV共源中断程序switch处理方式:#pragma vector=TIMER0_A0_VECTOR//共源中断入口__interruptvoid TIMER0_A0_ISR(void){switch(__even_in_range(TA0IV,14))//共源中断处理{case0:fun_no();break;//Nointerruptcase2:fun_CCR1();break;//CCR1interruptcase4:fun_CCR2();break;//CCR2interruptcase6:fun_CCR3();break;//CCR3interruptcase8:fun_CCR4();break;//CCR4interruptcase10:fun_CCR5();break;//CCR5interruptcase12:fun_CCR6();break;//CCR6interruptcase14:fun_overflow();break; //overflowdefault:fun_default();break;//default}}3)PWM原理PWM技术的三个要素,具体如图3-5所示,PWM频率计算见图3-6。

(1)Frequency时钟频率(2)Dutycycle占空比(3)Amplitude信号幅度图3-5PWM计数三要素示意图图3-6PWM频率计算示意图4)实验箱I/O硬件电路如图3-7所示。

图3-7实验箱I/O口P1的硬件电路图三、实验步骤1. 将PC与开发板相连;2. 建立CCS工程;3. 选择对该工程进行编译链接,生成.out 文件。

然后选择,将程序下载到实验板中。

程序下载完毕之后,可以选择全速运行程序,也可以选择单步调试程序,选择F3 查看具体函数。

也可以程序下载之后,按下,软件界面恢复到原编辑程序的画面。

再按下实验板的复位键,运行程序。

4. 将示波器输入端分别接开发板的P1.2和P1.3端口查看输出波形。

四、实验现象P1.2输出75%的PWM波形,P1.3输出25%的PWM波形。

五、实验代码#include<msp430f6638.h>void main(void){WDTCTL=WDTPW+WDTHOLD;P1DIR|=BIT2+BIT3;P1SEL|=BIT2+BIT3;TA0CCR0=32768;TA0CCTL1=OUTMOD_7;TA0CCR1=24576; //75%TA0CCTL2=OUTMOD_7;TA0CCR2=8192; //25%TA0CTL=TASSEL0+MC_1+TACLR;LPM3;}六、预习思考(1)430时钟系统产生的ACLK、MCLK和SMCLK各自用于什么场合?系统复位时三种时钟输出的默认值为多少?答:ACLK可由软件选作各个外设模块的时钟信号,一般用于低速外设模块;MCLK主要用于CPU和系统;SMCLK可由软件选作各个外设模块的时钟信号,主要用于高速外设模块。

系统复位时ACLK的频率典型值是32768Hz,即32KHz,MCLK和SMCLK的频率在0.8MHz~1.5MHz,即819.2KHz~1536KHz。

(2)MSP430F6638有哪些定时器模块?其中Timer_A0有多少捕获/比较器?答:有看门狗定时器(WDT),基本定时器(Basic timer1),定时器A(Timer_A),定时器B(Timer_B)等。

即Timer_A0有五个捕获/比较器。

(3)定时器有哪几种工作模式?各种工作模式的特点和定时周期如何计算?其最大定时周期分别是多少?答:定时器工作模式有:停止模式,增计数模式,减计数模式,增减计数模式。

停止模式主要是使定时器停止、暂停。

增计数模式是从0开始计数,直到设定的一个值ccr0,超过就回到0,此时会产生一个定时中断,时间就是ccr0的时间,减模式就是设定一个初值ccr0,计数器会一直减,直到减到0,又将产生一个定时中断,时间为ccr0。

增减计数模式,即计数器从0开始计数,直到ccr0,又开始减计数,直到回到0,此时产生一个中断,时间为2倍ccr0。

七、实验总结实验开始并未出现矩形波,后经检查发现是示波器的问题,更换示波器后波形正常。

实验四:LED数码管的使用一、实验目的与要求1. 实验目的(1)了解TM1638芯片工作原理与使用方法;(2)掌握LED数码管的动态显示控制。

2. 实验要求通过MSP430F6638端口控制TM1638芯片以实现LED数码管显示,例如用数码管显示自己八位学号。

进阶提高:循环显示两个人的学号。

二、实验原理(1)TM1638控制芯片TM1638是带键盘扫描接口的LED驱动控制专用电路,内部集成有MCU数字接口、数据锁存器、LED 高压驱动、键盘扫描等电路。

主要应用于冰箱、空调、家庭影院等产品的高段位显示屏驱动。

TM1638原理图如4-1所示,其中SEG_DIO,SEG_CLK,SEG_STB与MSP430芯片中P3.5,P3.4,P3.2三个IO口相连,仅占用3个端口即可完成数据的输入输出,大大节约单片机的IO口和开发板的空间,降低了布线的难度。

TM1638与MSP430实验箱连接示意图如图4-1所示,实验开发板LED数码管对应关系见图4-2。

图4-1MSP430与TM1638连接示意图图4-2实验开发板LED数码管对应关系图TM1638的各引脚定义如图4-3所示。

图4-3TM1638各引脚定义(2)TM1638接收数据串行数据传输格式:读取和接收1个BIT都在时钟的上升沿操作。

数据接收(写数据)时序如图4-4所示。

图4-4TM1638数据接收时序图以下写数据代码仅作为参考。

(更多关于TM1638的程序请参考给出的TM1638.h和TM1638.c两个文件以及芯片说明书)voidTM1638_Write(unsignedcharDATA)//写数据函数{unsignedchari;DIO_OUT;//将DIO配置为输出状态for(i=0;i<8;i++){CLK_low;if(DATA&0x01){DIO_high;}else{DIO_low;}CLK_high;DATA>>=1;//数据左移一位}}(3)LED数码管显示图4-5共阴极数码管连接图图4-5给出一个共阴数码管的连接示意图,如果让该数码管显示“0”,那你需要在GRID1为低电平的时候让SEG1,SEG2,SEG3,SEG4,SEG5,SEG6为高电平,SEG7为低电平,即在00H地址单元里面写数据3FH 就可以让数码管显示“0”。

共阴极LED数码管编码如表4-1所示。

表4-1共阴极LED数码管编码表(4)开发板上LED地址开发板共有8个LED数码管,从左至右其地址分别为:08h,0ah,0ch,0eh,00h,02h,04h,06h。

例如:constuint8_tDisp[8]={0,8,0,1,2,1,4,0};//要显示的学号constuint8_tNum[16]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71 };//段码constuint8_tAddr[8]={08h,0ah,0ch,0eh,00h,02h,04h,06h};//地址WriteDATA(Addr[0],Num[Disp[0]]);//最左边的数码管显示第一位学号(5)ACLK设置初始化时,需要设置ACLK引脚输出,即P1DIR|=BIT0;P1SEL|=BIT0;三、实验步骤1. 将PC与开发板相连;2. 建立CCS工程;3. 选择对该工程进行编译链接,生成.out 文件。

然后选择,将程序下载到实验板中。

程序下载完毕之后,可以选择全速运行程序,也可以选择单步调试程序,选择F3 查看具体函数。

也可以程序下载之后,按下,软件界面恢复到原编辑程序的画面。

再按下实验板的复位键,运行程序。

四、实验现象按下按键1显示08012202,按下按键2显示08012208。

五、实验代码#include <msp430f6638.h>#include "TM1638.h"const uint8_t Disp1[8]={0,8,0,1,2,2,0,2};const uint8_t Disp2[8]={0,8,0,1,2,2,0,8};const uint8_t Num[16]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F, 0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71};//段码const uint8_t Addr[8]={0x08,0X0a,0X0c,0X0e,0X00,0X02,0X04,0X06};//地址//原始void main(void) {WDTCTL = WDTPW + WDTHOLD; // Stop watchdog timerP3DIR |= BIT2+BIT4+BIT5;init_TM1638();unsigned char i;while(1){for(i = 0; i < 8; i++){Write_DATA(Addr[i],Num[Disp1[i]]);}}}//进阶void main(void) {WDTCTL = WDTPW + WDTHOLD; // Stop watchdog timerP3DIR |= BIT2+BIT4+BIT5;init_TM1638();Write_DATA(Addr[0],Num[Disp1[0]]);unsigned char i;unsigned char stu=1;P4REN |= BIT2+BIT3;P4OUT |= BIT2+BIT3;while(1){if((P4IN&BIT2)==0)//没有按下stu=1;if((P4IN&BIT3)==0)stu=2;for(i=0;i<8;i++){if(stu==1){Write_DATA(Addr[i],Num[Disp1[i]]);}else if(stu==2){Write_DATA(Addr[i],Num[Disp2[i]]);}//_delay_us(1);}}}六、预习思考掌握LED数码管的显示控制,并说明采用TM1638是如何实现段控和位控的。

相关主题