MSP430单片机实验报告
南理工王宏波MSP430F6638单片机实验报告

MSP430单片机应用技术实验报告学号:XXXXXXXX姓名:XXX分组:第X组同组同学1姓名:XXX同组同学2姓名:XXX南京理工大学2016年12月08日实验1一、实验题目:UCS实验二、实验目的设置DCO FLL reference =ACLK=LFXT1 = 32768Hz, MCLK = SMCLK = 8MHz,输出ACLK、SMCLK,用示波器观察并拍照。
UCS初始状态:XT1关闭,默认为LFXT1,ACLK选择XT1源(时钟错误时自动切换至),MCLK、SMCLK选择DCOCLKDIV源。
FLL参考时钟源为XT1CLK,DCOCLK/DCOCLKDIV =2,N=32。
因此程序需要进行的操作有,启动LFXT1,待XT1稳定工作后,设置锁频环将XT1分频为8MHz的DCOCLKDIV作为MCLK和SMCLK的时钟源,并分别通过P1.0和P3.4输出。
三、实验仪器和设备计算机、开发板、示波器、信号源、电源、Code Comeposer Studio v5四、实验步骤1、用电缆连接开发板USB2口和电脑USB口,打开电源开关SW1,电源指示灯D5点亮;2、运行CCSV5;3、新建工作空间workspace;4、新建工程project与源文件main.c;5、编写程序;6、编译、调试、下载程序到单片机;7、观察、分析、保存运行结果。
五、实验程序六、实验结果一、实验题目:FLL+应用实验二、实验目的检测P1.4 输入,遇上升沿进端口中断,在中断服务程序内翻转P4.1 状态。
三、实验仪器和设备计算机、开发板、示波器、信号源、电源、Code Comeposer Studio v5四、实验步骤1、用电缆连接开发板USB2口和电脑USB口,打开电源开关SW1,电源指示灯D5点亮;2、运行CCSV5;3、新建工作空间workspace;4、新建工程project与源文件main.C;5、编写程序;6、编译、调试、下载程序到单片机;7、观察、分析、保存运行结果。
msp430实验报告

msp430实验报告msp430实验报告引言:msp430是一种低功耗、高性能的微控制器,被广泛应用于嵌入式系统和物联网设备中。
本实验报告将介绍我对msp430微控制器进行的一系列实验,包括实验目的、实验过程、实验结果以及对实验的总结和展望。
实验目的:本次实验的主要目的是熟悉msp430微控制器的基本功能和使用方法,以及学习如何进行简单的控制程序设计。
通过实验,我希望能够掌握msp430的基本操作和编程技巧,并且能够运用所学知识解决实际问题。
实验过程:在实验开始之前,我首先对msp430微控制器进行了一些基本的了解。
我了解到,msp430具有低功耗、高性能和丰富的外设接口等特点,可以满足各种嵌入式系统的需求。
接着,我根据实验指导书的要求,准备好实验所需的硬件设备和软件工具。
第一部分实验是关于GPIO口的实验。
我按照实验指导书上的步骤,将msp430与LED灯连接起来,并编写了一个简单的程序,实现了对LED灯的控制。
通过这个实验,我学会了如何配置GPIO口和编写简单的控制程序。
第二部分实验是关于定时器的实验。
我学习了如何配置msp430的定时器,并编写了一个简单的程序,实现了定时闪烁LED灯的功能。
通过这个实验,我深入了解了定时器的工作原理和编程方法。
第三部分实验是关于ADC的实验。
我学习了如何配置msp430的ADC模块,并编写了一个简单的程序,实现了对外部模拟信号的采样和转换。
通过这个实验,我了解了ADC的基本原理和使用方法。
实验结果:通过一系列实验,我成功地掌握了msp430微控制器的基本功能和使用方法。
我能够独立完成GPIO口的配置和控制、定时器的配置和编程、ADC的配置和采样等任务。
实验结果表明,msp430具有强大的功能和灵活的编程能力,可以满足各种嵌入式系统的需求。
总结和展望:通过本次实验,我对msp430微控制器有了更深入的了解,并且掌握了一些基本的操作和编程技巧。
然而,由于实验时间和条件的限制,我还没有完全发挥出msp430的潜力。
430单片机点亮LED实验报告

430单片机点亮LED实验报告一.安装实验软件IAR二.编写点亮LED灯程序1.使P1.0口LED灯会不停的闪烁着,程序#include <msp430x14x.h>typedef unsigned int uint;typedef unsigned char uchar;/*延时函数*/void Delay_Ms(uint x){uint i;while(x--)for(i=0;i<250;i++);}/*主函数*/int main( void ){WDTCTL = WDTPW + WDTHOLD;// Stop watchdog timer to prevent time out resetP2DIR|=BIT0;//定义P1口为输出while(1)//死循环{P2OUT^=BIT0;//P1.0口输出取反Delay_Ms(600);//稍作延时}}下载进去看到了P1.0口LED灯会不停的闪烁着。
2.实验目的让两盏灯交换闪烁程序#include"msp430g2553.h"void main(void) {void Blink_LED();WDTCTL=WDTPW+WDTHOLD; //关闭看门狗P1DIR=BIT6;P2DIR=BIT0;while(1){Blink_LED();}}void Blink_LED(){_delay_cycles(1000000); //控制第二个LED P1OUT^=BIT6;_delay_cycles(1000000); //控制第一个LEDP2OUT^=BIT0;}我编写这段程序的现象是一个灯先亮,另一个后亮,一个灯先灭,后一个再灭。
就是两个灯的状态没有做到相反。
后来我在我程序上做了一些改动。
#include"msp430g2553.h"void main(void) {void Blink_LED();WDTCTL=WDTPW+WDTHOLD; //关闭看门狗P1DIR=BIT6;P2DIR=BIT0;P1OUT |= BIT6;P2OUT &= ~BIT6;while(1){Blink_LED();}}void Blink_LED(){_delay_cycles(1000000); //控制第二个LEDP1OUT^=BIT6;P2OUT^=BIT0;}3.LED灯逆循环点亮程序#include <reg52.h>typedef unsigned char uint8; typedef unsigned int uint16; sbit ENLED1=P1^4;sbit ENLED2=P1^3;sbit ADDR0 =P1^0;sbit ADDR1 =P1^1;sbit ADDR2 =P1^2;main(){uint16 i;uint8 j;ENLED1=0; ENLED2=1;ADDR0=0; ADDR1=1; ADDR2=1; while(1){P0=~(80>>j++);for(i=1;i<20000;i++);if(j==8)j=0;}}我写好程序了可是运行的时候结果不对),之后继续修改程序while循环都没有对LED的串口做任何处理,把“P0=~(80>>j++); ”改成“P0=~(0x80>>j++); ”#include <reg52.h>typedef unsigned char uint8;typedef unsigned int uint16;sbit ENLED1=P1^4;sbit ENLED2=P1^3;sbit ADDR0 =P1^0;sbit ADDR1 =P1^1;sbit ADDR2 =P1^2;main(){uint16 i;uint8 j;ENLED1=0; ENLED2=1;ADDR0=0; ADDR1=1; ADDR2=1;while(1)P0=~(0x80>>j++); //P0=~(80>>j++);for(i=1;i<20000;i++);if(j==8){j=0;}}四.实验总结由于之前学过一段时间51单片机,所以有些东西比较清楚,但430和51一有很大不同,虽然内部结构很像,但430的寄存器的设置很麻烦,比如P1 P2口,那可真是麻烦得很,430这个IO口设置了如很多的功能,并且单独抽出了好几个设置的寄存器。
msp430 实验报告

msp430 实验报告Title: MSP430 Experiment ReportIntroductionThe MSP430 is a series of microcontroller units (MCUs) developed by Texas Instruments. These MCUs are known for their low power consumption and high performance, making them ideal for a wide range of applications including consumer electronics, industrial control, and medical devices. In this experiment report, we will discuss the results of our experiments with the MSP430 MCU and its performance in various applications.Experiment 1: LED BlinkingIn our first experiment, we programmed the MSP430 to control the blinking of an LED. We used the MSP430 LaunchPad development kit, which includes a development board with an MSP430 MCU and various peripherals. By writing a simple program in the MSP430 Integrated Development Environment (IDE), we were able to control the blinking frequency of the LED. This experiment demonstrated the ease of programming and the low power consumption of the MSP430 MCU.Experiment 2: Sensor Data AcquisitionIn our second experiment, we connected a temperature sensor to the MSP430 and programmed it to acquire and process the sensor data. The MSP430's built-in analog-to-digital converter (ADC) allowed us to easily interface with the sensor and read the temperature values. We then used the MSP430's serialcommunication interface to transmit the data to a computer for further analysis. This experiment showcased the versatility of the MSP430 in interfacing with external sensors and communicating with other devices.Experiment 3: Power ManagementOne of the key features of the MSP430 is its low power consumption, which makes it suitable for battery-powered applications. In our third experiment, we tested the power management capabilities of the MSP430 by programming it to enter low-power modes when not actively processing data. We measured the current consumption in different power modes and compared it to the datasheet specifications. The results confirmed the MSP430's low power consumption and its ability to prolong battery life in portable devices. ConclusionOur experiments with the MSP430 MCU have demonstrated its versatility, ease of programming, and low power consumption. The MSP430's performance in controlling peripherals, interfacing with sensors, and managing power consumption makes it a compelling choice for a wide range of embedded applications. As technology continues to advance, the MSP430's capabilities will continue to make it a popular choice for developers seeking a reliable and efficient microcontroller solution.。
430单片机实验报告

题 目430单片机实验报告
学院(部)信息工程学院
专 业
指导教师
学号姓名
同组成员
二〇一六年五月
实验一 LED流水灯实验
一、
LED流水灯实验
二、
1.掌握IAR 开发环境的使用方法;
2.练习IO端口寄存器的设置;练习时钟部分的配置
三、
1、制作相应的外围电路。要求用单片机的P1口连接8个发光二级管,当相应的IO口输出为高电平时发光二极管发光。
P2SEL=0X00;
key_val=0;
}
void Key_Scan(void) //扫描键盘获得键值
{
unsigned char row,col,temp1,temp2;
unsigned char key_table[]={0,1,2,3,4,5,6,7,8,
9,10,11,12,13,14,15};//设置键盘逻辑键值
P1DIR |= BIT0+BIT6; // P1.0 - P1.2 outputs
P1SEL|= 0x00;
P1OUT= BIT0;
CCR0=20000;
CCTL0 = CCIE; // CCR0 toggle, interrupt enabled
TACTL = TASSEL_2 + MC0 +TACLR; // SMCLK, Contmode, int enabled
BCSCTL1 = CALBC1_1MHZ; // Set DCO
DCOCTL = CALDCO_1MHZ;
P1SEL = BIT1 + BIT2 ; // P1.1 = RXD, P1.2=TXD
P1SEL2 = BIT1 + BIT2 ; // P1.1 = RXD, P1.2=TXD
msp430 TIMER实验报告.

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; //计数器清零};分析:实验一与实验二结果相同,只不过在每个周期结束启动看门狗定时器时修改的寄存器参数不同。
MSP430单片机实验报告

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单片机期末设计报告课题名称:基于msp430单片机期末测试题起讫日期:14年6月23日- 14年6月27日学生学号:1200308132 1200308133 学生姓名:张玥梁尧报告成绩:中国计量学院信息工程学院生物医学工程专业目录一.实验仪器简介 (2)二.实验设计 (3)三.实验结果 (6)一:实验仪器简介MSP430单片机简介:MSP430系列单片机是美国德州仪器(TI)1996年开始推向市场的一种16位超低功耗、具有精简指令集(RISC)的混合信号处理器(Mixed Signal Processor)。
德州仪器1996年到2000年初,先后推出了31x、32x、33x 等几个系列,这些系列具有LCD驱动模块,对提高系统的集成度较有利。
每一系列有ROM 型(C)、OTP 型(P)和 EPROM 型(E)等芯片。
EPROM 型的价格昂贵,运行环境温度范围窄,主要用于样机开发。
这也表明了这几个系列的开发模式,即:用户可以用 EPROM 型开发样机;用OTP型进行小批量生产;而ROM 型适应大批量生产的产品。
MSP430系列单片机是一个16位的单片机,采用了精简指令集(RISC)结构,具有丰富的寻址方式(7 种源操作数寻址、4 种目的操作数寻址)、简洁的 27 条内核指令以及大量的模拟指令;大量的寄存器以及片内数据存储器都可参加多种运算;还有高效的查表处理指令。
这些特点保证了可编制出高效率的源程序。
MSP430 系列单片机能在25MHz晶体的驱动下,实现40ns的指令周期。
16位的数据宽度、40ns的指令周期以及多功能的硬件乘法器(能实现乘加运算)相配合,能实现数字信号处理的某些算法(如FFT等)。
MSP430 单片机之所以有超低的功耗,是因为其在降低芯片的电源电压和灵活而可控的运行时钟方面都有其独到之处。
首先,MSP430 系列单片机的电源电压采用的是1.8-3.6V 电压。
因而可使其在1MHz 的时钟条件下运行时,芯片的电流最低会在165μA左右,RAM保持模式下的最低功耗只有0.1μA。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
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--); }。