MSP430单片机实验指导书
- 格式:docx
- 大小:209.75 KB
- 文档页数:8
一、实验内容:1. MSP430单片机的复位中断和低功耗模式2. 中断方式的按键控制实现3. Lab8 按键中断方式控制led灯的亮灭4. Lab9 动动手,P4.1中断方式控制P4.6的LED二、实验步骤:Lab8 按键中断方式控制led灯的亮灭设置端口4.0为输入上拉电阻方式获取按键信号,端口4.5为输出方式,按键按下时开启一次中断,中断开启后修改4.5输出对应的LED灯状态,从而实现按键中断方式控制led 灯的亮灭。
实现代码:#include <msp430.h>int main(void){WDTCTL = WDTPW + WDTHOLD; // Stop watchdog timerP4DIR |= BIT5; // Set P4.5 to output directionP4REN |= BIT0; // Enable P2.6 internal resistanceP4OUT |= BIT0; // Set P2.6 as pull‐Up resistanceP4IES |= BIT0; // P4.0 Hi/Lo edgeP4IFG &= ~BIT0; // P4.0 IFG clearedP4IE |= BIT0; // P P4.0 interrupt enabled__bis_SR_register(LPM4_bits + GIE); // Enter LPM4 w/interrupt__no_operation(); // For debugger }#pragma vector=PORT4_VECTOR__interrupt void Port_4(void){P4OUT ^= BIT5; // P4.5 = toggleP4IFG &= ~BIT0; // P4.0 IFG cleared }思考题:1、Lab8和Lab2的执行结果有何不同?为什么?答:Lab2的结果是按下按键则灯灭,松开按键灯亮;Lab8是按下按键灯亮\灭,抬起按键不改变状态。
[ 实验目的]学会使用ADC12,DMA,TIMERB模块了解语音采集,以及PWM-DA工作原理。
[ 实验要求]1、编程要求:IAR4.11B C语言。
2、实现功能:录/放音。
3、实验现象:可进行17秒左右录/放音。
[ 实验原理]该实验的基本原理是:利用MIC 将声音信号转换成模拟的电信号,通过功放将该信号放大,利用ADC12 进行采集、转换成数字量,并且通过DMA 直接将转换数据送入FLASH 中进行存放。
在存放过程中通过LCD进行一定的信息提示,这就完成了整个录音过程。
放音过程中,则是通过提取存放在FLASH中的数据,通过计算得出PWM波占空比,利用TIMERB 输出PWM 波,再通过1 阶带通滤波器进行滤波,模拟出采集进来的模拟电信号,通过语音输出功放TPA301进行放大送给耳机输出接口。
因此整个的过程的基本框图如图4-4:图 4-4 语音基本框图在该实验中最需要注意的是,采样频率的设置。
根据奈奎斯特采样定理,采样频率必须大于被采样信号中最大频率分量频率的两倍,否则不能从信号采样中回复原始信号。
由于人耳听觉范围通常为20Hz到20KHz,如果要将所有声音都做一个非常精确的记录以及播___________放,很显然MCU的速度上无法支持。
但是做一个相对清晰语音记录的话,则采样频率仅仅需要11KHz(电话音质)。
为了采样数据的存放的方便,也由于采样频率本身就被限制在了11KHz,因此ADC12 在进行转换的时候精度要求就不那么高了,通过设置我们将ADC12DC 的转换精度改成8 位。
则每次进行采样的数据仅仅就是8 位,一个字节而已。
在采样的时候进行处理将两次采样的数据整合成一个字,存入FLAH中。
而MSP430F5438系列有256K的FLASH ROM,扣去一些预留空间,则有192K的空间来进行语音数据的存取。
则总共可记录语音时间:T = 192Kbyte/(11K/S*1byte)=17S电信号电信ADC 号FLASHTIMEBPWM波电信号DMA TB 带通1第131页共179页如果采样 12 位精度的AD 转换,则时间会大大减少而音质并不会因此而有太大的提高。
MSP430G2系列单片机原理与实践教程完整版30 MSP-EXP430Launchpad实验指南前言MSP430G2系列是德州仪器近期推出的一款产品,在秉承MSP430超低功耗,高集成度的优点的同时,具有高性价比的特点。
该系列被称为ValueLine,旨在以8位单片机的价格实现16位单片机的性能。
MSP-EXP430Launchpad是TI推出的又一套用于MSP430和电路实验的开发板。
在该套不到名片大小的开发板上集成了一片超低功耗16位MSP430单片机,USB口仿真器电路以及各引脚接口等。
利用LaunchPad开发板,仅需一台笔记本电脑,就可以在基于图形界面的编程软件CCS上进行嵌入式软硬件系统的开发和调试,真正做到将实验室装进口袋里,让使用者可以随时随地,不受场地和设备的限制进行430的开发工作。
除了学生自主创新实践外,LaunchPad开发板还可以用于本科低年级课程,如嵌入式C语言,电子技术基础,微机原理,单片机等课程的自主实验环节以及课程设计。
该套开发板为单片机热爱者提供了一个很好的学习平台。
该实验指导书在Launchpad的基础上进行了功能模块的扩展,以期更好地进行实验教学和学习。
本书共有六章,分为两大部分。
第一部分为第1章至第3章,对MSP430G2系列单片机的外设进行介绍,CCSv5.1的安装和使用,同时给出了几个基于Launchpad的实际开发案例。
第二部分为第4章至第6章,对一体化实验系统以及各扩展模块的硬件电路进行了详细的介绍,在此基础上通过六个基础实验以及六个综合实验帮助读者更好地理解和掌握430的开发和应用。
由于时间和篇幅的原因,本书中第三章关于微控制器外设寄存器的更为详细的描述没有在此书中涉及,但包含在随书光盘的电子文档中,供有需要的读者阅读和参考。
该实验指导书、程序和相关教学材料由西安电子科技大学MSP430联合实验室赵建老师和TI单片机大学计划黄争经理共同策划和审阅,在编写过程中,联合实验室老师和同学付出了辛勤的劳动,在此表示衷心的感谢。
1、MSP430单片机基础实验1.1、IO口实验实验目的:学会MSP430单片机IO口的常规操作。
实验原理开发板上的3个LED灯和IO口的对应关系如下:POWER——P1.7 ISO14443A——P1.6 ISO15693——P1.4根据原理图分析,只需要将对应IO输出为低电平即可使其对应三极管导通,达到点亮对应LED的目的。
关键代码分析#include <msp430.h>volatile unsigned int i; // volatile to prevent optimizationint main(void){WDTCTL = WDTPW + WDTHOLD; // Stop watchdog timerP1DIR |= 0x80; // Set P1.7 to output directionfor (;;){P1OUT ^= 0x80; // Toggle P1.7 using exclusive-ORi = 50000; // Delaydo (i--);while (i != 0);}}对应工程详见:\感知RF2实验光盘2013\RFID技术实验\1-MSP430单片机基础实验\io实验结果POWER对应的LED灯闪烁。
作业1、对其他连个灯进行对应操作;2、流水灯显示编程控制。
1.2、定时器实验实验目的:学会MSP430单片机定时器常规配置及中断操作。
实验原理采用定时器TA溢出中断对LED灯进行取反操作。
关键代码分析#include <msp430.h>int main(void){WDTCTL = WDTPW + WDTHOLD; // Stop WDTP1DIR |= 0x80; // P1.0 outputTACCTL0 = CCIE; // TACCR0 interrupt enabledTACCR0 = 50000;TACTL = TASSEL_2 + MC_2; // SMCLK, contmode__bis_SR_register(LPM0_bits + GIE); // Enter LPM0 w/ interrupt}// Timer A0 interrupt service routine#pragma vector=TIMERA0_VECTOR__interrupt void Timer_A (void){P1OUT ^= 0x80; // Toggle P1.7TACCR0 += 50000; // Add Offset to TACCR0}对应工程详见\感知RF2实验光盘2013\RFID技术实验\1-MSP430单片机基础实验\timer实验结果LED灯快速闪烁,改变TACCR0值,闪烁时间间隔改变。
MSP430单片机实验报告--段式LCD显示1.实验介绍:实验演示了将ADC结果用段式LCD显示,并且还原输入电压也采用段式LCD显示。
ADC的结果可以通过ADC12MEM0的值来显示。
当程序运行时,LCD屏幕采用10进制显示出ADC12MEM0的值。
2.实验目的:a.熟悉IAR5.0软件开发环境的使用b.了解MSP430段式LCD的工作方式c.掌握MSP430段式LCD的编程方法3.实验原理:驱动LCD需要在段电极和公共电极上施加交流电压。
若只在电极上施加直流电压,液晶本身发生劣化。
解决这个问题的一般方法是使用短时也就驱动器,如MSP430F4xx系列单片机就集成有段式液晶驱动。
如果要在没有液晶驱动器的情况下使用段式液晶显示器,就要用到如图1所示电路。
图1中,A为电极信号输入端,控制该段液晶是否被点亮;B为交流方波信号输入端,将有一个固定频率的方波信号从此端输入;com为公共背极信号。
工作原理为;固定的方波信号被直接加载到液晶公共背极,同时该信号通过一个异或门加载到液晶段极。
当A端为低电平时,液晶的段极与公共背极将得到一个同相、同频率、同幅度的方波信号,液晶的两端始终保持没有电压差;当A端为高电平时,液晶的段极也公共背极将得到一个反相、同幅度、同频率的方波信号,液晶两端将保持一个交流的电压差。
这样既能使液晶保持点亮状态,又不会发生劣化而损坏液晶显示器。
图一.段式液晶驱动电路4.实验步骤:(1)将PC 和板载仿真器通过USB 线相连;5.实验现象:段式LCD显示屏显示的数字为002031,ADC12MEM0的值为07EF,其值为16进制,将其转换后值为2031与屏幕显示一致。
6.关键代码分析:#include <msp430x26x.h>#include "General_File.h"#include "I2C_Define.h"void I2C_Start(void){DIR_OUT;SDA_1;I2C_Delay();SCL_1;I2C_Delay();SDA_0;I2C_Delay();SCL_0;}//End I2C_Start/*函数名:I2C_Stop 功能:遵循I2C总线协议定义的停止*/void I2C_Stop(void){DIR_OUT;SDA_0;I2C_Delay();SCL_1;I2C_Delay();SDA_1;}//End I2C_Stop/* 函数名:I2C_ReceiveACK 功能:待接受ACK 信号,完成一次操作*/void I2C_Write_ACK( void ){SDA_1;DIR_IN;SCL_1;I2C_Delay();while(SDA_IN );SCL_0;I2C_Delay();DIR_OUT;return;}//End I2C_ReceiveACK/* 函数名:2C_Read_Ack 功能:接受数据后发送一个ACK信号*/void I2C_Read_Ack(void){DIR_OUT;SCL_0;SDA_0;I2C_Delay();SCL_1;I2C_Delay();SCL_0;SDA_1;}//End I2C_Read_Ack/* 函数名:I2C_Read_NoAck 功能:最后接受数据后发送NoACK信号*/void I2C_Read_NoAck( void ){DIR_OUT;SCL_0;SDA_1;I2C_Delay();SCL_1;I2C_Delay();SCL_0;}//End I2C_Read_Ack/* 函数名:I2C_Receiveuchar 功能:接受一个字节的数据*/uchar I2C_Receiveuchar(void){uchar Read_Data = 0x00; //返回值uchar DataBit = 0x00; //每一个clk 接受到的数据SCL_0;I2C_Delay();SDA_1;DIR_IN;for( uchar i = 0;i < 8;i++ ){SCL_1;I2C_Delay();DataBit = SDA_IN;SCL_0;I2C_Delay();I2C_Delay();Read_Data = ( ( Read_Data << 1 ) | DataBit ); //将数据依次存入Read_Data }return( Read_Data );}//End I2C_Receiveuchar/* 函数名:I2C_Senduchar 功能:遵循I2C总线协议定义发送一字节数据*/void I2C_Senduchar( uchar Wr_Data ){DIR_OUT;SCL_0;SDA_1;for( uchar i = 0;i < 8;i++ ){if( Wr_Data & 0x80 ){SDA_1; //最高位是否为1,为1则SDA= 1 }else{SDA_0; //否则SDA=0}I2C_Delay();SCL_1;I2C_Delay();SCL_0;I2C_Delay();Wr_Data <<= 1; //数据左移一位,进入下一轮送数}SDA_1;return;}//End I2C_Senduchar/************ BU9796FS相关指令定义**********/#define Write_Com 0x80#define Write_Data 0x00#define Display_ON 0x48#define Half_Bias 0x44#define Set_Reset 0x6A#define Ext_Clock 0x69#define Blink_Mode0 0x70#define Blink_Mode1 0x71#define Blink_Mode2 0x72#define Blink_Mode3 0x73#define Pixel_ON 0x7E#define Pixel_OFF 0x7D#define BU9796_Addr 0x7C#define Base_Add 0x00/************** 引用的外部函数*********************/extern void I2C_Start(void);extern void I2C_Stop(void);extern void I2C_Write_ACK(void);extern void I2C_Senduchar( uchar Wr_Data );/************** 定义段式LCD的阿拉伯数字码*********************/const uchar Num_Code[] ={0xAF, // 00x06, // 10x6D, // 20x4F, // 30xC6, // 40xCB, // 50xEB, // 60x0E, // 70xEF, // 80xCF, // 90x10, //. 如果要显示小数点,必须要将此值与下一位值相加0x88 //: ,包括LCD上的两个":"};uchar Disp_Data[]={ 5,5,7,3,1,5 };/* 函数名:Segment_Display 功能:段式LCD数据包写入服务程序,负责将一串字符送到段式LCD 上去显示*/void Segment_Display( const uchar Addr,const uchar *P_Data, uchar Length ){uchar User_Addr = Addr;I2C_Start(); //启动BU9796I2C_Senduchar( BU9796_Addr ); //写BU9796的物理地址I2C_Write_ACK();I2C_Senduchar( Base_Add + User_Addr * 2 ); //发送起始地址,下一个紧跟的是数据I2C_Write_ACK();for( uchar i = Length ;i > 0;i-- ){if( *P_Data != 0x0A ) // 显存中是否有小数点?如果有,就将小数点码值与下一位码值相加{I2C_Senduchar( Num_Code[ *P_Data++ ] );}else{uchar Temp_Disp_Data = Num_Code[ *P_Data++ ];I2C_Senduchar( Temp_Disp_Data + Num_Code[ *P_Data++ ]);i--;}I2C_Write_ACK();}I2C_Stop(); //访问结束}/* 函数名:Init_BU9796FS 功能:初始化驱动芯片BU9796的相关参数*/void Init_BU9796FS( void ){I2C_Start(); //启动BU9796I2C_Senduchar( BU9796_Addr ); //写BU9796的物理地址I2C_Write_ACK(); //等待ackI2C_Senduchar( Write_Com + Set_Reset); //启动软复位I2C_Write_ACK(); //等待ackI2C_Senduchar( Write_Com + Blink_Mode2 );I2C_Write_ACK();I2C_Senduchar( Write_Com + Display_ON ); //开显示I2C_Write_ACK();I2C_Senduchar( Write_Data + Base_Add ); //发送起始地址,下一个紧跟的是数据I2C_Write_ACK();for( uchar i = 0;i<10;i++ ) //清LCD显示屏{I2C_Senduchar( 0x00 );I2C_Write_ACK();}I2C_Stop(); //访问结束}/* 函数名:Init_MCU 功能:初始化MSP430的相关参数*/void Init_MCU( void ){/* WDTCTL = WDTPW + WDTHOLD; */ // 关看门狗BCSCTL3 |= XT2S_2; // XT2频率范围设置BCSCTL1 &= ~XT2OFF; // 打开XT2振荡器do{IFG1 &= ~OFIFG; // 清振荡器失效标志BCSCTL3 &= ~XT2OF; // 清XT2失效标志for( uint i = 0x47FF; i > 0; i-- ); // 等待XT2频率稳定}while (IFG1 & OFIFG); // 外部时钟源正常起动了吗?BCSCTL2 |= SELM_2 + SELS ; // 设置MCLK、SMCLK为XT2P4OUT &= ~BIT4;P4DIR |= BIT4; // 打开LCD显示部分的电源//P8REN |= BIT3 + BIT4;P8DIR |= BIT3 + BIT4; // 配置MSP430与BU9796的数据数P8OUT |= BIT3 + BIT4;P5OUT &= ~BIT7; // 点亮外部LEDP5DIR |= BIT7;}/* 函数名:main 功能:系统入口主函数*/void main( void ){WDTCTL = WDTPW + WDTHOLD; // 停看门狗ADC12CTL0 = SHT0_2 + ADC12ON; // 设置采样时间,开ADC12,Vref = V ACC ADC12CTL1 = SHP; // 使用定时器采样ADC12MCTL0 = INCH_1; // 选用A1通道ADC12IE = 0x01; // 开ADC12MCTL0中断ADC12CTL0 |= ENC; // 启动转换ADC12MCTL0 = INCH_1;P5DIR |= BIT7; // P5.7输出-LED/*for (;;){ADC12CTL0 |= ADC12SC; // 软件启动转换_BIS_SR(CPUOFF + GIE); // LPM0模式,由ADC12中断唤醒}*//* 功能:将16进制转化为10进制*/int a,b;a=ADC12MEM0;Disp_Data[5]=a%10;b=a/10;Disp_Data[4]=b%10;a=b/10;Disp_Data[3]=a%10;b=a/10;Disp_Data[2]=b%10;a=b/10;Disp_Data[1]=a%10;b=a/10;Disp_Data[0]=b%10;Init_MCU();Init_BU9796FS();P5OUT |= BIT7;Segment_Display( 0,Disp_Data,6 );_BIS_SR( CPUOFF );}#pragma vector=ADC12_VECTOR__interrupt void ADC12_ISR (void){ _BIC_SR_IRQ(CPUOFF); }。
Msp430系列单片机的定时器实验1.看门狗定时器(WDT)1.1实验介绍计数单元WDTCNT:不能直接通过软件存取,必须通过WDTCTL来控制。
控制寄存器WDTCTL高8位为口令:写5AH,读69H低8位为WDT操作的控制命令HOLD:停止看门狗定时器工作。
0 :激活;1 :停止WDTSSEL:时钟源选择TMSEL:工作模式选择。
0:看门狗;1 :定时CNTCL:该位为1时,WDTCNT清除IS2、IS1、IS0:选择看门狗定时器的定时长度1.2 实验目的学会使用看门狗定时器(WDT)。
熟悉WDT相关寄存器1.3 实验原理1.4 实验步骤(1) 将PC 和板载仿真器通过USB 线相连;(2) 打开CCS 集成开发工具,选择Project->Import Existing CCS Eclipse Project,导入MSP430F6638_DemoV2.0\11.WTD 文件夹中的工程;(3) 选择对该工程进行编译链接,生成.out 文件。
然后选择,将程序下载到实验板中。
程序下载完毕之后,可以选择全速运行程序,也可以选择单步调试程序,选择F3 查看具体函数。
也可以程序下载之后,按下,软件界面恢复到原编辑程序的画面。
再按下实验板的复位键,运行程序。
(调试方式下的全速运行和直接上电运行程序在时序有少许差别,建议上电运行程序)。
1.5 实验现象实验板上对应的LED灯以一定周期闪烁。
1.6 关键代码实验一:#include<msp430f6638.h>void main(void){volatile unsigned int i;volatile unsigned int count=0;WDTCTL = WDTPW+WDTHOLD; // Stop WDTP4DIR |= BIT1 + BIT2 + BIT3; // P4.1,P4.2,P4.3 set as outputP4OUT &= ~(BIT1 + BIT2 + BIT3); // P4.1,P4.2,P4.3 set "0"for (i=0;i<60000;i++) ; //延时大约60msP4OUT |= (BIT1 + BIT2 + BIT3); // P4.1,P4.2,P4.3 set "1"for (i=0;i<60000;i++) ; //延时大约60msWDTCTL=WDTPW+WDTIS_4; //启动看门狗while(1) ; // continuous loop}实验二:#include<msp430f6638.h>void main(void){volatile unsigned int i;volatile unsigned int count=0;WDTCTL = WDTPW+(WDTCTL&0xff)+WDTHOLD; // Stop WDTP4DIR |= BIT1 + BIT2 + BIT3; // P4.1,P4.2,P4.3 set as outputP4OUT &= ~(BIT1 + BIT2 + BIT3); // P4.1,P4.2,P4.3 set "0"for (i=0;i<60000;i++) ; //延时大约60msP4OUT |= (BIT1 + BIT2 + BIT3); // P4.1,P4.2,P4.3 set "1"for (i=0;i<60000;i++) ; //延时大约60msWDTCTL=WDTPW+(WDTCTL&0xff)-WDTHOLD; //启动看门狗while(1){// WDTCTL=WDTPW+WDTCTL&0xff+WDTCNTCL; //计数器清零};分析:实验一与实验二结果相同,只不过在每个周期结束启动看门狗定时器时修改的寄存器参数不同。
目录目录 (I)实验一I/O端口控制实验 (1)实验二乘法器实验 (2)实验三PWM脉冲实验 (3)实验四LED数码显示实验 (4)实验五LCD段码屏显示实验 (6)实验六定时器实验 (8)实验七比较器实验 (10)实验八内部看门狗实验 (13)实验九电子时钟实验 (15)实验十独立键盘实验 (16)实验十一阵列键盘实验 (17)实验十二时钟模块FLL+操作实验 (18)实验十三 12位AD转换实验 (19)实验十四外部FLASH扩展实验 (20)实验十五I2C AT24C02实验 (22)实验十六 128×64点阵液晶显示实验(选配) (24)实验十七 RS-232通信实验 (25)IMSP430核心板的供电方式MSP430核心板有2种供电方式:1.由USB取提供,同时J0短路冒打在右边,J1短路冒打在左边,J6短路冒打在上方。
2.由外部5V的直流电源提供,把内正外负的5V电源插入JT9座,同时J0短路冒打在左边,J1短路冒打在右边,J6短路冒打在上方。
(注:5V电源用户选配)3.出厂程序为电子时钟程序,上电后自动运行电子时钟,数码管和段码LCD同时显示!II实验一 I/O端口控制实验一、实验目的1.掌握MSP430449一般IO口的应用2.掌握端口寄存器的组成和使用二、实验说明MSP430F1XX系列单片机最多有6个I/O口:P1~P6,每个端口有8个管脚。
每个管脚可以单独设置成输入或者输出方向,并且每个管脚都可以进行单独的读或者写。
P1口和P2口具有中断功能,P1口和P2口的每个管脚都可以单独设置成中断,并且可以设置成上升沿或者下降沿触发中断。
P1口的所有管脚共用一个中断向量,同样P2口的所有管脚也共用一个中断向量。
MSP430F1XX系列单片机的I/O口主要有以下特征:每个I/O口可以独立编程设置。
输入输出可以任意结合使用。
P1口和P2口的中断功能可以单独设置。
有独立的输入输出寄存器。
第一章简介1.1 MSP430F5529硬件资源简介1.低供电压1.8-3.6V。
2.低功耗●单片机处于运行模式200uA/MHZ●LPM3 RTC模式2.5uA●LPM4 1.6uA●LPM5 0.2uA3.从低功耗模式3 唤醒少于5us。
4.16 位精简指令集结构●可以扩展外部存储器●可以达到25MHZ 系统时钟。
5.灵活的电源管理系统(PMM)●由DVCC 在LDO 作用下产生Vcore 电源,供低电压模块使用。
●提供DVCC,Vcore Supervision,Monitoering,以及Brownout 监控。
6.一体化时钟系统●低功耗/低频率内部时钟源VLO●低频率内部时钟源REFO●XT1 32768HZ 晶振●XT2 高频晶振可以达到25MHZ7.16 位Timer0_A5有5个捕获/比较寄存器。
8.16 位Timer1_A3有3个捕获/比较寄存器。
9.16 位Timer2_A3有3个捕获/比较寄存器。
10.16 位Timer_B7有7个捕获/比较寄存器。
11.2组4个通用通信接口●内部UART,支持自动波特率检测。
●irDA 编码和解码。
●SPI 通信。
●I2 C 通信。
12.全速USB接口13.内置USB物理接口。
●内置3.3V/1.8VUSB 电源系统。
●内置USB-PLL 。
●8个输入、8个输出端点。
14.12位模数转换●内部参考电压。
●采样保持电路。
●12个外部通道,4个内部通道。
(F5529/F5527/F5525/F5521)●8个外部通道,4个内部通道。
(F5528/F5526/F5524/F5522)●自动扫描15.比较器B。
16.硬件乘法器支持32位操作数。
17.支持DMA18.RTC可以日历使用,也可以用作普通定时器。
19.F552x F551x系列包括:1.2MSP430F5529引脚及结构框图MSP430F5529的封装形式为IPN封装,其引脚图如图1-1所示,结构框图如图1-2所示。
实验二一、示例:按S1,LED1改变状态#include <msp430f5529.h>void Delay(void) //延迟子程序{int i;for(i = 100;i--;i > 0) ;//延时一点时间}void main(void){WDTCTL = WDTPW + WDTHOLD; // 停止看门狗P1DIR=0x7f;//P1DIR,置1为输出,置0为输入。
0x7f=0111 1111,p1.7为输入,p1.0~p1.6为输出P1REN |= BIT7;//P1.7开启上拉电阻。
|= 为与或,BIT7为1000 0000,P1.7的REN置1,开启端口拉电阻。
P1OUT=0xff; //P1输出高电平。
注意:while (1){if ((P1IN & BIT7)==0)//按键S1被按下。
&位与,若S1按下,P1.7=0,位与操作后,P1IN&BIT7=0x00 {void Delay(void);if (!(P1IN & BIT7)) //按键S1被按下.!(P1IN & BIT7)等同(P1IN & BIT7)==0 {while(!(P1IN & BIT7)); //按键S1被松开P1OUT ^= 0x01; //P1.0输出状态翻转}}}}二、上机自编程序的要求:按下按键S1,控制LED1的亮和灭。
短按键,则小灯亮1秒,然后灭;长按键,小灯常亮。
//********************************************************************* *********// MSP430F552x Demo - Timer0_A5, Toggle P1.0, CCR0 Up Mode ISR, DCO SMCLK //// Description: Toggle P1.0 using software and TA_1 ISR. Timer1_A is// configured for up mode, thus the timer overflows when TAR counts// to CCR0. In this example, CCR0 is loaded with 50000.// ACLK = n/a, MCLK = SMCLK = TACLK = default DCO ~1.045MHz//// MSP430F552x// ---------------// /|\| |// | | |// --|RST |// | |// | P1.0|-->LED//// Bhargavi Nisarga// Texas Instruments Inc.// April 2009// Built with CCSv4 and IAR Embedded Workbench Version: 4.21//********************************************************************* #include<msp430f5529.h>unsigned int h,i;void Delay(void) //延迟子程序{int i;for(i = 100;i--;i > 0) ;//延时一点时间}void main(void){WDTCTL = WDTPW + WDTHOLD; // Stop WDTP1DIR=0x7f;//P1DIR,置1为输出,置0为输入。
第一部分实验板简介一MSP-EXP430F5529开发板概述1.1 F5529特性:◆低工作电压:1.8V到3.6V;◆超低功耗:--活动模式(AM):所有系统时钟活动--待机模式(LPM3):--关闭模式(LPM4):--关断模式(LPM4.5):0.18μA在3.0V(典型)◆从待机模式下唤醒时间在3.5μs内(典型);◆16位RISC结构,可拓展内存,高达25-MHZ的系统时钟;◆灵活的电源管理系统:◆UCS统一时钟系统:◆具有五个捕获/比较寄存器的16位定时器TA0,Timer_A;◆具有三个捕获/比较寄存器的16位定时器TA1,Timer_A;◆具有三个捕获/比较寄存器的16位定时器TA2,Timer_A;◆具有七个捕获/比较映射寄存器的16位定时器TB0,Timer_B;◆两个通用串行通讯接口:--USCI_A0和USCI_A1,每个支持:增强UART、IrDA、同步SPI--USCI_B0和USCI_B1,每个支持:I2C、同步SPI◆全速USB:◆具有内部基准电压,采样和保持及自动扫描功能的12位ADC(MSP430F552X系列仅有);◆比较器;◆支持32位运算的硬件乘法器;◆串行系统编程,无需添加外部编程电压;◆三通道内部DMA;◆具有实时时钟功能的基本定时器。
1.2 MSP430F5529引脚图及结构框图图1.1 MSP430F5529引脚图图1.2 MSP430F5529结构框图注:其引脚具体功能请参考MSP430F5529数据手册1.3 MSP-EXP430F5529开发板硬件及软件资源概述1.3.1 MSP-EXP430F5529开发板硬件资源概述MSP430F5529开发板(MSP-EXP430F5529)是 MSP430F5529 器件的开发平台,为最新一代的具有集成 USB 的 MSP430 器件。
该开发板与 CC2520EMK 等众多 TI 低功耗射频无线评估模块兼容。
按键实验教程2015/7/24官网地址:http://www.fengke.club目录第一节矩阵键盘介绍 (2)第二节GPIO基础寄存器介绍 (3)第三节实验 (5)第四节实验现象 (7)第一节矩阵键盘介绍在键盘中按键数量较多时,为了减少I/O口的占用,通常将按键排列成矩阵形式。
在矩阵式键盘中,每条水平线和垂直线在交叉处不直接连通,而是通过一个按键加以连接。
这样,一个端口就可以构成4*4=16个按键,比之直接将端口线用于键盘多出了一倍,而且线数越多,区别越明显,比如再多加一条线就可以构成20键的键盘,而直接用端口线则只能多出一键(9键)。
由此可见,在需要的键数比较多时,采用矩阵法来做键盘是合理的。
矩阵键盘原理:先设置行线输入,列线输出低电平。
不断检测行线的输入电平,无按键时为高电平,当有按键按下则某个信号线为低电平。
进行延时消抖。
将行线设置为输出低电平,列线设置为输入,检测列线的输入电平,就可以确定哪个按键按下。
第二节GPIO基础寄存器介绍1.输入寄存器PxINPxIN:位7~0 数据输入,只读寄存器。
2.输出寄存器PxOUTPxOUT:位7~0 Px 口输出当IO 口配置为输出模式时:0,输出低电平;1,输出高电平;当IO 口配置为输入模式并且上拉/下拉使能时:0,下拉;1,上拉。
3.方向寄存器PxDIRPxDIR:位7~0 Px口的方向0,配置为输入;1,配置为输出。
4.上拉/下拉电阻使能寄存器PxRENPxREN:位7~0 Px上拉/下拉电阻使能。
当对应的端口配置为输入,设置该位将使能上拉或者下拉。
0,上拉或者下拉无效;1,上拉/下拉使能。
5.驱动能力寄存器PxDSPxDS:位7-0 Px口输出驱动能力0,减弱输出驱动能力1,全力输出驱动能力详细的寄存器介绍可以参考官方数据手册中的相关章节。
第三节实验键盘连接到单片机的P6口,如下图所示:开发接口连接可以参考《开发接口连接教程》,路径为:..\MSP430\0.从这里开始\2.快速上手。
目录1.实验1 USC时钟系统------------------------------------------------------------------------------------------------------22.实验2 GPIO和EXTI-------------------------------------------------------------------------------------------------------33.实验3 串口通信UART----------------------------------------------------------------------------------------------------44.实验4 SPI通信------------------------------------------------------------------------------------------------------------55.实验5 I2C通信------------------------------------------------------------------------------------------------------------66.实验6 Timer_A定时器---------------------------------------------------------------------------------------------------77.实验7 Timer_B定时器--------------------------------------------------------------------------------------------------108.实验8 看门狗WDT--------------------------------------------------------------------------------------------------------139.实验9 RTC时间-----------------------------------------------------------------------------------------------------------1410.实验10 ADC_12----------------------------------------------------------------------------------------------------------1511.实验11 Flash编程-----------------------------------------------------------------------------------------------------1612.实验12 低功耗LPM-----------------------------------------------------------------------------------------------------1713.实验13 DMA传输--------------------------------------------------------------------------------------------------------1914. 实验14 键盘数码管ZLG7290----------------------------------------------------------------------------------------2115. 实验15 液晶显示LCD1602-------------------------------------------------------------------------------------------2216. 实验16 液晶显示LCD12864-----------------------------------------------------------------------------------------2317. 实验17 液晶显示TFT-------------------------------------------------------------------------------------------------2418. 实验18 数字温度传感器DS18B20----------------------------------------------------------------------------------25实验1 USC时钟系统一.实验原理图 Array二.实验步骤1. 下载程序。
MSP430G2 LanchPad 实验指导书实验一:基础GPIO实验实验目的:1、熟悉CCS的使用;2、掌握单片机编程思想;3、理解430单片机工作原理。
实验内容:1、点亮一盏LED;2、令LED闪烁;3、按键控制LED状态;实验步骤:内容一:点亮一盏LED1、打开CCS,选择workspace。
2、菜单,Project——New CCS Project——弹出如下界面。
3、需要修改红色标记。
即:文件名、文件位置、MCU系列型号、连接、工程类型,最后单击Finish。
4、在新窗口中输入如下代码:5、保存程序后Bulid(单击菜单中,或快捷键Ctrl+B)编译程序。
6、调试程序(单击菜单中)自动进入调试界面并下载程序。
7、运行程序(单击菜单中)进行程序的运行、暂停、停止、单步运行等操作。
8、观察实验现象,回顾操作步骤。
内容二:令LED闪烁1、关闭上一个工程(在Project Explorer窗口,右键Close Project)。
2、建立新工程,步骤同上。
3、根据要求编写相应程序。
4、编译,调试,运行程序。
5、部分函数参考代码。
延时函数:主函数部分:6、拓展:试着令LED2闪烁内容三:按键控制LED状态1、关闭上一个工程。
2、新建工程,步骤同上。
3、根据要求编写程序。
4、编译、调试、运行程序。
5、部分函数参考代码。
中断初始化:中断服务子程序:6、拓展,试着用非中断方式实现控制实验二:A/D实验实验目的:实验内容:实验步骤:实验三:定时器与看门狗实验实验目的:实验内容:实验步骤:实验四:Flash实验实验目的:实验内容:实验步骤:实验五:串行通信实验实验目的:实验内容:实验步骤:实验六:Flash实验实验目的:实验内容:实验步骤:实验七:比较器实验实验目的:实验内容:实验步骤:。
实验一MSP430开发环境与程序设计一、实验目的1.掌握MSP430开发环境——IAR Embedded Workbench的使用方法2.学会使用IAR Embedded Workbench来开发简单的C语言和汇编语言程序,并掌握常用的调试方法。
二、IAR Embedded Workbench开发环境MSP430开发需要硬件和软件两方面环境,本书以MSP430F149为例进行介绍,其他产品开发过程与此类似。
硬件环境非常简单,只需一台PC、一个JTAG 仿真器和开发板。
软件开发环境常用IAR公司的IAR Embedded Workbench 嵌入式工作台以及仿真器C-SPY和AQ430,本章仅介绍IAR产品。
3.1 硬件环境MSP430 FLASH单片机内有JTAG调试接口和电可擦除FLASH存储器,开发调试十分方便,只需一台PC、一个JTAG仿真器和一块开发板(Flash Emulation Tool),简单功能调试时可有仿真器供电,开发板不需外加电源。
开发调试时可先将程序下载到FLASH中,通过软件控制程序运行,芯片中的信息通过JTAG 口提供给开发者进行调试。
图E.1 PC-JTAG仿真器-开发板连接图JTAG仿真器一端连接在PC的并口(打印机接口),另一端连接在开发板上,如图E.1所示。
JTAG仿真器可以购买现成产品也可以自行设计,自行设计可参考本书附录提供的原理图、PCB板图和元器件清单。
3.2 IAR Embedded Workbench简介IAR Embedded Workbench 是一种用于开发应用各种不同的目标处理器的灵活的集成环境。
它提供一个方便的窗口界面用于迅速的开发和调试。
Embedded Workbench 支持多种不同的目标处理器,使用项目模式组织应用程序。
它有如下一些特点。
(1)通用性a)可以在Windows环境下运行;b)分层的项目(Project)表示;c)直观的用户界面;d)工具与编辑器全集成;e)全面的超文本帮助。
MSP430单片机实验报告专业:姓名:学号:MSP430单片机实验报告设计目标:使8位数码管显示“5201314.”,深入了解串行数据接口。
实现过程:主要分为主函数、驱动8位数码管函数、驱动1位数码管函数及延时函数。
延时函数:采用for循环。
驱动1位数码管子函数:设置74HC164的时钟传输和数传输,声明变量,使数据表中每一个要表示的字符的每一位都与shift做与运算从而进行传输,上升沿将传输数据传送出去。
驱动1位数码管子函数的流程图如图1所示。
图1 驱动1位数码管子函数流程图驱动8位数码管子函数:调用8次驱动1位数码管子函数。
驱动8位数码管子函数流程图如图2所示。
图2 驱动8位数码管流程图while图3 主函数流程图实验结果:供电后,数码管显示“5201314.”字样。
源程序:/************* 程序名称:5201314.*************//***程序功能:通过模拟同步串口控制8个共阳数码管***//*******P5.1 数据管脚,P5.3 同步时钟管脚*******/#include <io430.h> // 头文件void delay(void); // 声明延迟函数void seg7_1 (unsigned char seg7_data);// 声明驱动1 位数码管函数void seg7_8 ( unsigned char seg7_data7,unsigned char seg7_data6,unsigned char seg7_data5,unsigned char seg7_data4,unsigned char seg7_data3,unsigned char seg7_data2,unsigned char seg7_data0); // 声明驱动8 位数码管函数const unsigned char decoder_seg7[]={0x92,0xa4,0xc0,0xf9,0xb0,0xf9,0x99,0x7f }; //数码管显示表【5201314.】int main(void) // 主函数{WDTCTL=WDTPW+WDTHOLD; // 关闭看门狗P5SEL&=~BIT1; // 设置P5.1 端口为并行数字输入/ 输出口P5DIR|=BIT1; // 设置P5.1 端口为输出口P5SEL&=~BIT3; // 设置P5.3 端口为并行数字输入/ 输出口P5DIR|=BIT3; // 设置P5.3 端口为输出口while(1) // 重复执行{seg7_8 (7,6,5,4,3,2,1,0); // 调用驱动8 位数码管函数delay ( ); // 延时}}void seg7_8 (unsigned char seg7_data7,unsigned char seg7_data6,unsigned char seg7_data5,unsigned char seg7_data4,unsigned char seg7_data3,unsigned char seg7_data1,unsigned char seg7_data0)// 驱动8位数码管的同步串行数据接口驱动函数{seg7_1(seg7_data0); // 调用1 位数码管的同步串行数据接口驱动函数seg7_1(seg7_data1);seg7_1(seg7_data2);seg7_1(seg7_data3);seg7_1(seg7_data4);seg7_1(seg7_data5);seg7_1(seg7_data6);seg7_1(seg7_data7);}void seg7_1 (unsigned char seg7_data)// 驱动1 位数码管的同步串行数据接口驱动函数{unsigned char code_seg7; // 声明显示代码变量unsigned char a; // 声明循环变量unsigned char shift; // 声明串行数据位存储变量code_seg7=decoder_seg7[seg7_data]; // 显示数据译码P5OUT&=~BIT1; // P5.1 输出低电平P5OUT&=~BIT3; // P5.3 输出低电平shift=0x80; // 串行数据位指向8 位数据的最高位for(a=0; a<8; a++){if(code_seg7&shift) // 判断显示代码位的状态{P5OUT|=BIT1; // P5.1 输出高电平}else{P5OUT&=~BIT1; // P5.1 输出低电平}P5OUT|=BIT3; // P5.3 输出高电平P5OUT&=~BIT3; // P5.3 输出低电平shift=shift>>1; // 串行数据位指向数据位右移1 位}}void delay (void) //延时函数{unsigned char b;for(b=0xff;b>0;b--); }。