MSP430LED灯闪烁控制程序
430单片机点亮LED实验报告
![430单片机点亮LED实验报告](https://img.taocdn.com/s3/m/68e43660e45c3b3567ec8bb3.png)
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第六讲实验报告](https://img.taocdn.com/s3/m/ef9e29d389eb172ded63b7cc.png)
一、实验内容: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是按下按键灯亮\灭,抬起按键不改变状态。
msp430Led按键控制灯亮程序
![msp430Led按键控制灯亮程序](https://img.taocdn.com/s3/m/562832e0f705cc175427091d.png)
1.Led灯控制程序#include "msp430g2553.h"void main( void ){// Stop watchdog timer to prevent time out resetWDTCTL = WDTPW + WDTHOLD; //关闭看门狗//P1DIR = 0x41;//P1OUT = 0x41; //程序点亮led1//P1DIR |=BIT0+BIT6;//P1OUT |=BIT0+BIT6; //程序点亮led2P1DIR |=BIT0;P1OUT |=BIT0;P1DIR |=BIT6;P1OUT &=~BIT6;while(1){P1OUT ^=BIT0;P1OUT ^=BIT6;__delay_cycles(1000000);} //led交替亮,持续1s2.Led按键控制灯亮#include "msp430g2553.h"void main( void ){// Stop watchdog timer to prevent time out resetWDTCTL = WDTPW + WDTHOLD;//关闭看门狗P1DIR &=~BIT3;P1DIR |=BIT0;P1IES |=BIT3;P1IE |=BIT3;_EINT();_BIS_SR(LPM0_bits+GIE);}#pragma vector=PORT1_VECTOR__interrupt void PORT1_ISR(void){int i;char pushkey;pushkey=P1IFG&BIT3;//第三位中断标志位for(i=0;i<1000;i++)//短暂延时软件去抖if((P1IN&pushkey)==pushkey){P1IFG=0;//中断标志清零return;}if(P1IFG&BIT3)//判断按键是否按下{P1OUT^=BIT0;}P1IFG=0;return;}3.矩阵键盘和数码管程序#include <msp430g2553.h>#include"Key&Display.h"//unsigned char Receive(void);void main( void ){// Stop watchdog timer to prevent time out resetWDTCTL = WDTPW + WDTHOLD;Init_4lines_Mode();//初始化4线工作模式Send_Command(CH452_RESET);//CH452芯片内部复位Send_Command(KeyDisplay_ON);//允许显示驱动并启动键盘扫描//开中断,P2.0接CH452的DOUT引脚,当有键按下时,DOUT上产生由高到低的脉冲// P2SEL &= ~(BIT6+BIT7);P2IE|=BIT0;P2IES|=BIT0;P2IFG&=~BIT0;_EINT();while(1){}}//中断处理函数#pragma vector = PORT2_VECTOR//中断处理程序,接收到DOUT脉冲信号时,运行之__interrupt void Port2(void){unsigned char Keyvalue;Send_Command(CH452_GET_KEY);//单片机向CH452发送读取按键代码命令Keyvalue=Key_Read();// Keyvalue=Receive();switch(Keyvalue){case 0x40://按键K0按下{Send_Command( NDis1); //第1位数码管不显示//Send_Command(Dis10);Send_Command(Dis00);//第0位数码管显示0break;}case 0x41://按键K1按下{Send_Command( NDis1); //第1位数码管不显示//Send_Command(Dis10);Send_Command(Dis01);//第0位数码管显示1break;}case 0x42://按键K2按下{Send_Command( NDis1); //第1位数码管不显示//Send_Command(Dis10);Send_Command(Dis02);//第0位数码管显示2break;}case 0x43://按键K3按下{Send_Command( NDis1);//第1位数码管不显示//Send_Command(Dis10);Send_Command(Dis03);//第0位数码管显示3break;}case 0x48://按键K4按下{Send_Command( NDis1);//第1位数码管不显示//Send_Command(Dis10);Send_Command(Dis04);//第0位数码管显示4break;}case 0x49://按键K5按下{Send_Command( NDis1);//第1位数码管不显示//Send_Command(Dis10);Send_Command(Dis05);//第0位数码管显示5break;}case 0x4A://按键K6按下{Send_Command( NDis1);//第1位数码管不显示//Send_Command(Dis10);Send_Command(Dis06);//第0位数码管显示6break;}case 0x4B://按键K7按下{Send_Command( NDis1);//第1位数码管不显示//Send_Command(Dis10);Send_Command(Dis07);//第0位数码管显示7break;}case 0x50://按键K8按下{Send_Command( NDis1);//第1位数码管不显示//Send_Command(Dis10);Send_Command(Dis08);//第0位数码管显示8break;}case 0x51://按键K9按下{Send_Command( NDis1);//第1位数码管不显示//Send_Command(Dis10);Send_Command(Dis09);//第0位数码管显示9break;}case 0x52://按键K10按下{Send_Command(Dis00);//第0个数码管显示字符"0"Send_Command(Dis11);//第1个数码管显示字符"1"break;}case 0x53://按键K11按下{Send_Command(Dis01);//第0个数码管显示字符"1"Send_Command(Dis11);//第1个数码管显示字符"1"break;}case 0x58://按键K12按下{Send_Command(Dis02);//第0个数码管显示字符"2"Send_Command(Dis11);//第1个数码管显示字符"1"break;}case 0x59://按键K13按下{Send_Command(Dis03);//第0个数码管显示字符"3"Send_Command(Dis11);//第1个数码管显示字符"1"break;}case 0x5A://按键K14按下{Send_Command(Dis04);//第0个数码管显示字符"4"Send_Command(Dis11);//第1个数码管显示字符"1"break;}case 0x5B://按键K15按下{Send_Command(Dis05);//第0个数码管显示字符"5"Send_Command(Dis11);//第1个数码管显示字符"1"break;}default:break;}P2IFG&=~BIT0;}4.红灯0.2秒闪一次,绿灯0.8秒闪一次#include <msp430g2553.h>void main(void){WDTCTL = WDTPW + WDTHOLD; // Stop WDT BCSCTL1 &=~XTS; //配置时钟BCSCTL3 |=LFXT1S_2;IFG1 &=OFIFG;P1DIR |=BIT0+BIT6; // P1.0,P1.6 output P1OUT &=~BIT0; // P1.0,P1.6置0 P1OUT &=~BIT6;TACCR0 = 12000-1; //1秒定时,产生中断TACCR1 = 2400; //频率0.2*12000,定时0.2秒TACCR2 = 9600; //定时0.8秒TACTL = TASSEL_1 + MC_1+TAIE; // ACLK, 增计数模式TACCTL1 |=CCIE; // TACCR1中断使能TACCTL2 |=CCIE; // TACCR1中断使能_BIS_SR(LPM0_bits + GIE); // Enter LPM0 w/ interrupt}// Timer_A3 Interrupt Vector (TA0IV) handler#pragma vector=TIMER0_A1_VECTOR__interrupt void Timer_A(void){switch( TA0IV ){case 2: P1OUT ^= BIT0; // 捕获/比较寄存器TACCR1break;case 4: P1OUT ^= BIT6;break; // 捕获/比较寄存器TACCR2case 10: break; // 未使用,计数达到TACCRO时执行中断,即1秒执行一次}}5.PMW波控制led灯亮度#include "msp430g2553.h"void main( void ){// Stop watchdog timer to prevent time out resetWDTCTL = WDTPW + WDTHOLD;P1DIR |=BIT6; //方向寄存器P1SEL |=BIT6; //功能寄存器TACTL=TASSEL_2+MC_1+ID_0; //定时器A控制寄存器选择增计数模式TACCTL1 |=OUTMOD_3; //捕获/比较控制寄存器TACCR0=1000-1;TACCR1=10;_BIS_SR(CPUOFF);}。
MSP430单片机入门例程
![MSP430单片机入门例程](https://img.taocdn.com/s3/m/4a762ebc05a1b0717fd5360cba1aa81144318f8c.png)
MSP430单片机入门例程MSP430单片机是一款低功耗、高性能的16位单片机,广泛应用于各种嵌入式系统。
下面是一个简单的MSP430单片机入门例程,可以让大家初步了解MSP430单片机的基本使用方法。
所需材料:1、MSP430单片机开发板2、MSP430单片机编译器3、MSP430单片机调试器4、电脑和相关软件步骤:1、安装MSP430单片机编译器首先需要安装MSP430单片机的编译器,该编译器可以将C语言代码编译成MSP430单片机可以执行的机器码。
在安装编译器时,需要选择与您的单片机型号匹配的编译器。
2、编写程序下面是一个简单的MSP430单片机程序,可以让LED灯闪烁:c本文include <msp430.h>int main(void)本文P1DIR |= 0x01; //设置P1.0为输出while(1){P1OUT ^= 0x01; //反转P1.0的状态,LED闪烁__delay_cycles(); //延时一段时间,控制闪烁频率}本文上述程序中,首先定义了P1DIR寄存器,将P1.0设置为输出。
然后进入一个无限循环,在循环中反转P1.0的状态,使LED闪烁。
使用__delay_cycles()函数实现延时,控制LED闪烁频率。
3、编译程序使用MSP430单片机编译器将程序编译成机器码,生成可执行文件。
在编译时,需要注意选择正确的编译器选项和单片机型号。
4、调试程序使用MSP430单片机调试器将可执行文件下载到单片机中,并使用调试器进行调试。
在调试时,可以观察单片机的输出口状态和LED灯的闪烁情况,确保程序正常运行。
随着嵌入式系统的发展,MSP430单片机作为一种低功耗、高性能的微控制器,在各种应用领域中得到了广泛的应用。
为了更好地理解和应用MSP430单片机,我在学习过程中积累了一些经验,现在分享给大家。
MSP430单片机是一种超低功耗的微控制器,由德州仪器(Texas Instruments)推出。
利用MSP430F149控制LED灯的电流恒定
![利用MSP430F149控制LED灯的电流恒定](https://img.taocdn.com/s3/m/358bd2320029bd64783e2cec.png)
_EINT();
LPM0;
}
//ADC中断服务函数
//多次平均计算P6.0口的模拟电压数值
//调节占空比
#pragma vector=ADC_VECTOR
__interrupt void ADC12ISR (void)
{
static uint index = 0;
TACCR1 = 50;
else if((result - M) > 0)
TACCR1 = 60;
}
else
{
if(( M - result ) < 380)
TACCR1 = 50;
else if((M - result) < 490)
TACCR1 = 60;
else
TACCR1 = 70;
}
out_pwm();
{
sum += results[i];
}
sum >>= 5; //除以32
Trans_val(sum);
}
if(result > M )
{
if((result - M) > 980)
TACCR1 = 32;
else if((result - M) > 650)
TACCR1 = 40;
else if((result - M) > 320)
}
//将16进制ADC转换数据变换成三位10进制
//真实的模拟电压数据,并在液晶上显示
void Trans_val(uint Hex_Val)
{
unsigned long caltmp;
msp430按键控制LED最基本程序
![msp430按键控制LED最基本程序](https://img.taocdn.com/s3/m/e8aaca316d175f0e7cd184254b35eefdc8d31516.png)
msp430按键控制LED最基本程序按键篇经过一短时间的学习,下面,亲自动手编写一下程序吧。
程序的目的是:按下按键,控制LED的亮和灭。
短按键,则小灯亮1秒,然后灭; 长按键,小灯常亮。
首先,完成键盘的扫描程序。
第一点:如果是扫描,就要用到定时器。
我想设计定时器每隔IOms扫描一次按键。
定时器,我选用定时器A。
它的定时中断函数如下:函数名称:TimerA_ISR功能:定时器A 的中断服务函数参数:无返回值:无********************************************/ #pragma vector = TIMERAO_VECTOR __interrupt void TimerA_ISR(void) {GetKey() ;}上面这个定时中断函数的意思就是:每当定时时间到了以后,就调用GetKey() 函数一次。
GetKey() 函数就是扫描键盘按键的函数了。
在GetKey() 函数中,会根据按键类型(长按/ 短按)返回不同的数值。
根据返回的数值,做小灯亮法的操作。
那么,返回的这个值,我们需要保存在一个变量中,在这里定义一个变量ucharFlagLcd ; 来保存返回值。
这个变量在全局变量中定义,以保证它的作用域。
那么定时函数就变为#pragma vector = TIMERAO_VECTOR__interrupt void TimerA_ISR(void){FlagLcd =GetKey() ;}定时器中断的时间间隔,我在主函数中定义。
这样写:CCTLO = CCIE; // 使能CCR冲断CCRO = 4O; // 设定周期O.O1STACTL = TASSEL_1 + ID_3 + MC_1; //定时器A的时钟源选择ACLK增计数模式这样,定时器这块就算完工了。
那么,下面进行按键扫描程序。
按键的定义是这样的,根据我板子的按键原理图如下Pl +PlAPl 了这是一个矩阵键盘。
MSP430G2553入门
![MSP430G2553入门](https://img.taocdn.com/s3/m/239198f89e314332396893ea.png)
2.实验室要的是能踏下心来做事情的人
3.热烈欢迎真正想来实验室发展的同学
附:实验室基本情况和要求
实验室开门时间:每天在群里发布,请勿水群…… 单片机和学习的书不能带出实验室 爱护实验仪器,遇到问题找管理员同学(514)
MSP430 单片机
走进单片机的世界
——袁程磊
单片机是个微型的电脑主机
电脑有的功能单片机也都有
单片机+液晶屏
电脑有的功能单片机也都有
电脑有的功能单片机也都有
单片机的其他用途
MSP430G2553开发板介绍
仿真器
单片机
IO口 板载开关和LED
MSP430G2553单片机外围电路
附:发光二极管知识
Blink The LED 让LED灯闪烁起来
6.点击Finish,新建完成!
CCS的使用
<3>.出现下面的内容就对了
CCS的使用
<4>.上图是工具栏 点击工具栏里的小斧头,意为编译,用来查语法错误 没有报错的话 点击小绿虫,意为下载,用来将程序下载到单片机里
(如果出现如图所示错误提示,那就耐心等待驱动安装完毕)
<6>右移 >> 右移一位1001 0111 >>1 = 0100 1011
右移两位1001 0111 >>2 = 0010 0101
(低位舍弃,高位补0) 右移一位相当于除以2
C语言基础知识复习
<7>进制 二进制数:0和1 八进制数:0~7 十六进制数:0~f
一位八进制数
可以拆成
三个二进制数
四个二进制数
0x40 位
7 0
6 5 4 3 2 1 0 P1.6 0 相连的 0 LED 0 ?1 0 怎么点亮与
MSP430单片机系统时钟选择实验-改变LED灯闪烁频
![MSP430单片机系统时钟选择实验-改变LED灯闪烁频](https://img.taocdn.com/s3/m/a7e02c0fbb68a98271fefa27.png)
//******************************************************************************
#include<msp430x13x.h>
void main(void)
// /|\| XIN|-
// | | |
// --|RST XOUT|-
// | |
// | P1.5|-->LED
//
//时间:2007年10月
//
//
//硬件电路:MSP430F135核心实验板-I型
Байду номын сангаас//硬件连接:
//
//调试器:MSP430FET全系列JTAG仿真器
{
WDTCTL = WDTPW + WDTHOLD;//停止看门狗
P1DIR |= 0x20;//设P1.5为输出口
// BCSCTL1= 0x80;//分频电阻选择为0(此时闪烁频率较慢)
// BCSCTL1= 0x87;//分频电阻选择为7(此时闪烁频率较快)
// BCSCTL2= 0xc0;//选择外部32768低频晶振作为MCLK(此时闪烁频率极慢)
// D13x Demo -在上一节基础上改变系统时钟,观察LED灯的闪烁频率
//
//描述:通过改变系统时钟,来改变闪烁频率;通过P1异或来取反P1.5;软件循环延时
// ACLK= n/a, MCLK= SMCLK= default DCO ~ 800k
//
// MSP430F13x
// -----------------
微机原理- 定时中断的设计与应用(使用MSP430的定时器控制LED灯)
![微机原理- 定时中断的设计与应用(使用MSP430的定时器控制LED灯)](https://img.taocdn.com/s3/m/090d07ee0875f46527d3240c844769eae009a3ca.png)
微机原理实验实验四定时中断的设计与应用一、实验目的1. 了解 MSP430 系列定时器 Timer_A 模块结构和功能;2. 掌握定时器 Timer_A 的工作原理和寄存器配置方法;3. 熟练掌握定时器 Timer_A 不同工作模式下的典型应用;4. 熟练掌握端口 P1 和 P2 复用功能应用;5. 熟练掌握定时器 Timer_A 定时中断功能的设计和应用。
二、实验内容1.※●为TA0配置时钟源及工作模式,控制LED1指示灯的定时亮灭,中间间隔1秒钟。
要求:TA0定时器分别配置工作在增计数模式和增/减计数模式下,采用ACLK作为其计数参考时钟,并启用TA0CCR0计数中断实现硬件定时中断。
(1)流程图(以增计数模式为例)(2) 源代码/***增计数模式***/#include <msp430.h>void main(){WDTCTL = WDTPW + WDTHOLD; // 停止看门狗定时器P1DIR |= BIT0; //设置P1.0输出P1OUT&=~BIT0; //初始化P1.0TA0CCR0 = 32768; // 定义中断计数周期1s,时钟频率为32.768MHZ,32768 / 32768 = 1sTA0CCTL0 = CCIE; // TA0CCR0捕获/比较中断寄存器中断使能TA0CTL = TASSEL_1 + MC_1 + TACLR; // TASSEL_1,ACLK时钟源MC_1,增计数模式__bis_SR_register (LPM0_bits + GIE); // 进入LPM0低功耗模式,开启总中断}//定时器中断#pragma vector = TIMER0_A0_VECTOR__interrupt void Timer_A(void) // 定时器中断触发,P1输出口异或,电平翻转{P1OUT ^= 0x01;}/*******增减计数模式*******/#include <msp430.h>void main(){WDTCTL = WDTPW + WDTHOLD; // 停止看门狗定时器P1DIR |= BIT0; //设置P1.0输出P1OUT&=~BIT0; //初始化P1.0TA0CCR0 = 16384; // 定义中断计数周期1sTA0CCTL0 = CCIE; // TA0CCR0捕获/比较中断寄存器中断使能TA0CTL = TASSEL_1 + MC_3 + TACLR; // TASSEL_1,ACLK时钟源MC_1,增减计数模式__bis_SR_register (LPM0_bits + GIE); // 进入LPM0低功耗模式,开启总中断}//定时器中断#pragma vector = TIMER0_A0_VECTOR__interrupt void TIMER0_A0_ISR (void) // 定时器中断触发,P1输出口异或,电平翻转{P1OUT ^= 0x01;}(3)实验现象程序运行后,P1.1口LED每隔1s闪烁一次。
msp430 流水灯
![msp430 流水灯](https://img.taocdn.com/s3/m/bf869f263169a4517723a3e2.png)
实验一 流水灯实验一. 实验内容与目的1. 实验内容实现LED 灯的顺次点亮。
2. 实验目的对msp430有初步了解,学会msp430I/O 口的使用方法,了解msp430的内部资源,学习尝试使用msp430的时钟、中断。
二. 方法与结果用P2口对led 的亮灭进行控制(对P2口赋值为0时led 点亮,电路图如下),使用msp430比较器0和定时器产生1s 的定时,当定时到1s 时改变led 的状态(流程图如下)。
D1D2D3D4D5D6D7D8VCCR111K R121K R131K R141K R151K R161K R171K R181K P_20P_21P_22P_23P_24P_25P_26P_27三. 实现程序#include<msp430.h>void main( ){WDTCTL = WDTPW + WDTHOLD; //关闭看门狗中断P2DIR=0xff; //设定P2口为输出P1SEL=0x00; //设定P2口为普通I/O 口CCTL0=CCIE; //开启比较器0中断CCR0=32768; //定时时间的选取,当计数器TAR 计数到CCR0时,跳到中断TACTL=TASSEL_1+MC_1;//TACTL 是计数器的控制寄存器,选择时钟系统,对单片机端口参数进行设定,设定P2口初值 设定时钟产生1s 定时,开中断 响应中断,改变led 的状态计数方式P2OUT=0xfe; //设定P2口初值_EINT(); //开启总中断LPM3; //进入低损耗模式}#pragma vector=TIMERA0_VECTOR__interrupt void timer() //中断程序{if(P2OUT==0x7f){P2OUT=0xfe;}else{P2OUT=P2OUT<<1;P2OUT=P2OUT|0x01; //位操作,改变led的状态}}四.流水灯实验总结①msp430的P1~P6口都可以用作I/O口,但msp430不能利用对I/O口直接赋值的方法控制I/O口的输出、接收I/O口的输入,而是利用相应的寄存器(PxOUT 和PxIN),对PxOUT赋值就完成了I/O口的输出,将PxIN的值赋给相应变量就完成了I/O口的输入。
msp430f6638单片机实验程序
![msp430f6638单片机实验程序](https://img.taocdn.com/s3/m/813fbb5fc4da50e2524de518964bcf84b9d52dfa.png)
msp430f6638单片机实验程序实验一验证性试验#includeint flag;void DCmotor(int p){ switch(p){case 0: {P1OUT &=~ BIT0; //停转P1OUT &=~ BIT6;P1OUT &=~ BIT7;break;}case 1: {P1OUT |= BIT0; //正转P1OUT |= BIT6;P1OUT &=~ BIT7;break; }case 2: { P1OUT |= BIT0;P1OUT &=~ BIT6;P1OUT |= BIT7;break;}}}int main(void) {WDTCTL = WDTPW | WDTHOLD; // Stop watchdog timerP4REN |=BIT0+BIT1+BIT2+BIT3+BIT4; // 上下拉电阻使能P4OUT |=BIT0+BIT1+BIT2+BIT3+BIT4; //设置为上拉电阻P4DIR|=BIT5+BIT6+BIT7; //LED管脚设置P5DIR |=BIT7;P8DIR |=BIT0;P1DIR |= BIT0+BIT6+BIT7;while(1){if((P4IN&BIT0)==0){ //按键S7__delay_cycles(160000);if((P4IN&BIT0)==0) {flag=2;}}if((P4IN&BIT4)==0){ //按键S3__delay_cycles(160000);i f((P4IN&BIT4)==0) {flag=1;}}DCmotor(flag);}}设计性试验#includeint main(void){ WDTCTL = WDTPW +WDTHOLD;P4REN |=BIT0+BIT2+BIT4;P4OUT |=BIT0+BIT2+BIT4;P1DIR |=BIT0+BIT6+BIT7;while(1){ if((P4IN&BIT0)==0){ __delay_cycles(160000);if((P4IN&BIT0)==0){ P1OUT |=BIT0;P1OUT |=BIT6;P1OUT &=~BIT7;}}if((P4IN&BIT4)==0){ __delay_cycles(160000);if((P4IN&BIT4)==0){ P1OUT |=BIT0;P1OUT &=~BIT6;P1OUT |=BIT7;}}if((P4IN&BIT2)==0){ __delay_cycles(160000);if((P4IN&BIT2)==0){ P1OUT &=~BIT0;}}}}1、验证性实验:利用MSP430F6638 开发板上的拨盘电位器,控制改变AD 转换的输入电压值,转换后的数字量显示在段式液晶上面。
MPS430F149单片机之_定时闪烁灯
![MPS430F149单片机之_定时闪烁灯](https://img.taocdn.com/s3/m/09ba6fe3f705cc1755270982.png)
#pragma vector=TIMERA0_VECTOR
__interrupt void Timer_A(void)
//定时器A的CC0中断处理程序
//TIMERA0_VECTOR=6*2,等于基地址0XFFE0+12=0XFFEC
*********************************************************************/
#include <msp430x14x.h> //声明库
/********************************************************************
主函数
*********************************************************************/
/*****************************************************************
定时器控制发光二极管闪烁,使用MSP430芯片的32768HZ低频晶振
用定时器A定时1S,发光二极管灭0.5秒,亮0.5秒
*****************************************************************/
CCTL0=CCIE;//设置捕获/比较控制寄存器,CCIE=0X0010,使能捕获比较中断
CCR0=16384;//设置捕获/比较寄存器,初始值为16384,对于32768HZ的频率,相当于0.5S
用按键控制ED灯的亮灭
![用按键控制ED灯的亮灭](https://img.taocdn.com/s3/m/fecbbc3fe45c3b3566ec8b1c.png)
用按键控制LED灯的亮灭,当按键按下时,LED灯亮,当按键松开时,LED灯灭。
#include"msp430f6638.h"unsigned char flag;void main(void){WDTCTL = WDTPW+WDTHOLD; // Stop WDTP4DIR &=~(BIT2);P4DIR |= BIT4+BIT5+BIT6; // P4.4,P4.5,P4.6 set as outputP4OUT &=~(BIT4+BIT5+BIT6); // set led offP2IE |= BIT6; // enable P2.6 interruptP2IFG &= ~(BIT6); // clean interrupt flag__enable_interrupt(); // enable interruptwhile(1){ if((P4IN & 0x04)==0){ P2IFG |= BIT6;}else{P2IFG &=~BIT6;}}} // PORT2 interrupt service routine#pragma vector=PORT2_VECTOR__interrupt void port_2(void){P4OUT ^=(BIT4+BIT5+BIT6); // set led onP2IFG &=~BIT6; // clean interrupt flag}用按键控制LED灯的亮灭,当按键按下时,LED灯亮,当按键松开时,LED灯灭。
(查询)#include"msp430f6638.h"void main(void){WDTCTL = WDTPW+WDTHOLD; // Stop WDT//setting directionP4DIR &= ~(BIT2); //setting IO for inputP4DIR |= BIT4+BIT5+BIT6; // P4.4,P4.5,P4.6 set as outputwhile (1){if ((P4IN & 0x04) == 0) //If key is pressed{P4OUT |= BIT4+BIT5+BIT6; //led on}else{P4OUT &=~(BIT4+BIT5+BIT6); // led off}}}将ACLK配置为VLOCLK(约为10K),并将ACLK通过P1.0口输出#include<msp430f6638.h>void main(void){WDTCTL = WDTPW + WDTHOLD; //关看门狗UCSCTL4 |= SELA_1; //将ACLK时钟源配置为VLO;P1DIR |= BIT0;P1SEL |= BIT0; //将ACLK通过P1.0输出__bis_SR_register(LPM3_bits);//进入LPM3,SMCLK和MCLK停止,ACLK活动}设ACLK = XT1 = 32768Hz,并通过P1.0输出。
MSP430F6638_按键LED跑马灯程序
![MSP430F6638_按键LED跑马灯程序](https://img.taocdn.com/s3/m/f9843a05f18583d0496459cd.png)
张立为
版本管理
修改记录
版本号. V01
作者 张立为
描述
修改日期 2012-11-2 2012 11 2
审核记录
版本号.
职务
签名
修改日期
轮廓
GPIO的基本概念 LED跑马灯硬件实现 LED跑马灯简单软件编程实现
GPIO基本概念
GPIO——通用输入输出
设VDD为I/O口高电平电压,对于MSP430F6638平 设VDD为I/O口高电平电压 对于MSP430F6638平 台是3.3V,通常,2mA的正向电流 IF足以让LED发光, 此时下列根据公式 LED的正向压降VF约为1 2V(具 此时下列根据公式,LED的正向压降VF约为1.2V(具 体参数参照购买的LED发光管datasheet)所以,取 LED限流电阻阻值为:
配置寄存器法跑马灯
#define P3P4_BASE_Address 0x0220 #define define BIT1 (0x0002) BIT1 (0x0002) #define BIT2 (0x0004) #define BIT3 (0x0008) #define P4DIR (*((volatile #define P4DIR ( ((volatile unsigned char unsigned char*)(P3P4 )(P3P4_BASE_Address + 0x05))) BASE Address + 0x05))) #define P4OUT void main(void) { volatile unsigned int i; volatile unsigned int count=0; P4DIR |= BIT1 + BIT2 + BIT3; // P4.1,P4.2,P4.3 set as output while(1) // continuous loop { P4OUT ^= BIT1 + BIT2 + BIT3; // XOR P4.1,P4.2,P4.3 for(i=20000;i>0;i--); // Delay } } (*((volatile unsigned char*)(P3P4_BASE_Address + 0x03)))