msp430f6638单片机实验程序
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验一
验证性试验
#include <msp430f6638.h>
int flag;
void DCmotor(int p)
{ switch(p)
{
case 0:{P1OUT &=~ BIT0;//停转
P1OUT &=~ BIT6;
P1OUT &=~ BIT7;
break;
}
case 1:{P1OUT |= BIT0;//正转
while (SFRIFG1 & OFIFG) //等待XT1、XT2与DCO稳定
{
UCSCTL7 &= ~(DCOFFG+XT1LFOFFG+XT2OFFG);
SFRIFG1 &= ~OFIFG;
}
UCSCTL4 = SELA__XT1CLK + SELS__XT2CLK + SELM__XT2CLK; //避免DCO调整中跑飞
#include "dr_lcdseg.h" //调用段式液晶驱动头文件
#define XT2_FREQ 4000000
#define MCLK_FREQ 16000000
#define SMCLK_FREQ 4000000
void initAdc()
{
ADC12CTL0 |= ADC12MSC;//自动循环采样转换
P1OUT |= BIT6;
P1OUT &=~ BIT7;
break; }
case 2:{ P1OUT |= BIT0;
P1OUT &=~ BIT6;
P1OUT |= BIT7;
break;
}
}
}
int main(void) {
WDTCTL = WDTPW | WDTHOLD;// Stop watchdog timer
ADC12CTL0 |= ADC12ON;//启动ADC12模块
ADC12CTL1 |= ADC12CONSEQ1 ;//选择单通道循环采样转换
ADC12CTL1 |= ADC12SHP;//采样保持模式
ADC12MCTL0 |= ADC12INCH_15; //选择通道15,连接拨码电位器
ADC12CTL0 |= ADC12ENC;
}
void initClock()
{
while(BAKCTL & LOCKIO) //解锁XT1引脚操作
BAKCTL &= ~(LOCKIO);
UCSCTL6 &= ~XT1OFF; //启动XT1,选择内部时钟源
P7SEL |= BIT2 + BIT3; //XT2引脚功能选择
UCSCTL6 &= ~XT2OFF; //启动XT2
while(1)
{
if((P4IN&BIT0)==0){ //按键S7
__delay_cycles(160000);
if((P4IN&BIT0)==0) {
flag=2;}}
if((P4IN&BIT4)==0){ //按键S3
__delay_cycles(160000);
if((P4IN&BIT4)==0) {
while (SFRIFG1 & OFIFG) //等待XT1、XT2与DCO稳定
{
UCSCTL7 &= ~(DCOFFG+XT1LFOFFG+XT2OFFG);
SFRIFG1 &= ~OFIFG;
}
UCSCTL5 = DIVA__1 + DIVS__1 + DIVM__1; //设定几个CLK的分频
P4REN |=BIT0+BIT1+BIT2+BIT3+BIT4; //上下拉电阻使能
P4OUT |=BIT0+BIT1+BIT2+BIT3+BIT4; //设置为上拉电阻
P4DIR |=BIT5+BIT6+BIT7; //LED管脚设置
P5DIR |=BIT7;
P8DIR |=BIT0;
P1DIR |= BIT0+BIT6+BIT7;
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转换的输入电压值,转换后
UCSCTL1 = DCORSEL_5; //6000kHz~23.7MHz
UCSCTL2 = MCLK_FREQ / (XT2_FREQ / 16); //XT2频率较高,分频后作为基准可获得更高的精度
UCSCTL3 = SELREF__XT2CLK + FLLREFDIV__16; //XT2进行16分频后作为基准
initAdc(); //初始化ADC
volatile unsigned int value = 0;//设置判断变量
while(1) //进入程序主循环
flag=1;}}
DCmotor(flag);
}
}
设计性试验
#include <msp430f6638.h>
int 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);
的数字量显示在段式液晶上面。使用万用表测得当前输入电压,通过计算得到转换后的理想
的数字量与液晶显示的数字量进行比较。
/*
* main.c
*/
#include <msp430f6638.h>
#include <stdint.h>
#include <stdio.h>
#include <string.h>
UCSCTL4 = SELA__XT1CLK + SELS__XT2CLK + SELM__DCOCLK; //设定几个CLK的时钟源
}
void main(void)
{
WDTCTL = WDTPW | WDTHOLD;//停止看门狗
initClock(); //配置系统时钟
initLcdSeg(); /Leabharlann Baidu初始化段式液晶
验证性试验
#include <msp430f6638.h>
int flag;
void DCmotor(int p)
{ switch(p)
{
case 0:{P1OUT &=~ BIT0;//停转
P1OUT &=~ BIT6;
P1OUT &=~ BIT7;
break;
}
case 1:{P1OUT |= BIT0;//正转
while (SFRIFG1 & OFIFG) //等待XT1、XT2与DCO稳定
{
UCSCTL7 &= ~(DCOFFG+XT1LFOFFG+XT2OFFG);
SFRIFG1 &= ~OFIFG;
}
UCSCTL4 = SELA__XT1CLK + SELS__XT2CLK + SELM__XT2CLK; //避免DCO调整中跑飞
#include "dr_lcdseg.h" //调用段式液晶驱动头文件
#define XT2_FREQ 4000000
#define MCLK_FREQ 16000000
#define SMCLK_FREQ 4000000
void initAdc()
{
ADC12CTL0 |= ADC12MSC;//自动循环采样转换
P1OUT |= BIT6;
P1OUT &=~ BIT7;
break; }
case 2:{ P1OUT |= BIT0;
P1OUT &=~ BIT6;
P1OUT |= BIT7;
break;
}
}
}
int main(void) {
WDTCTL = WDTPW | WDTHOLD;// Stop watchdog timer
ADC12CTL0 |= ADC12ON;//启动ADC12模块
ADC12CTL1 |= ADC12CONSEQ1 ;//选择单通道循环采样转换
ADC12CTL1 |= ADC12SHP;//采样保持模式
ADC12MCTL0 |= ADC12INCH_15; //选择通道15,连接拨码电位器
ADC12CTL0 |= ADC12ENC;
}
void initClock()
{
while(BAKCTL & LOCKIO) //解锁XT1引脚操作
BAKCTL &= ~(LOCKIO);
UCSCTL6 &= ~XT1OFF; //启动XT1,选择内部时钟源
P7SEL |= BIT2 + BIT3; //XT2引脚功能选择
UCSCTL6 &= ~XT2OFF; //启动XT2
while(1)
{
if((P4IN&BIT0)==0){ //按键S7
__delay_cycles(160000);
if((P4IN&BIT0)==0) {
flag=2;}}
if((P4IN&BIT4)==0){ //按键S3
__delay_cycles(160000);
if((P4IN&BIT4)==0) {
while (SFRIFG1 & OFIFG) //等待XT1、XT2与DCO稳定
{
UCSCTL7 &= ~(DCOFFG+XT1LFOFFG+XT2OFFG);
SFRIFG1 &= ~OFIFG;
}
UCSCTL5 = DIVA__1 + DIVS__1 + DIVM__1; //设定几个CLK的分频
P4REN |=BIT0+BIT1+BIT2+BIT3+BIT4; //上下拉电阻使能
P4OUT |=BIT0+BIT1+BIT2+BIT3+BIT4; //设置为上拉电阻
P4DIR |=BIT5+BIT6+BIT7; //LED管脚设置
P5DIR |=BIT7;
P8DIR |=BIT0;
P1DIR |= BIT0+BIT6+BIT7;
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转换的输入电压值,转换后
UCSCTL1 = DCORSEL_5; //6000kHz~23.7MHz
UCSCTL2 = MCLK_FREQ / (XT2_FREQ / 16); //XT2频率较高,分频后作为基准可获得更高的精度
UCSCTL3 = SELREF__XT2CLK + FLLREFDIV__16; //XT2进行16分频后作为基准
initAdc(); //初始化ADC
volatile unsigned int value = 0;//设置判断变量
while(1) //进入程序主循环
flag=1;}}
DCmotor(flag);
}
}
设计性试验
#include <msp430f6638.h>
int 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);
的数字量显示在段式液晶上面。使用万用表测得当前输入电压,通过计算得到转换后的理想
的数字量与液晶显示的数字量进行比较。
/*
* main.c
*/
#include <msp430f6638.h>
#include <stdint.h>
#include <stdio.h>
#include <string.h>
UCSCTL4 = SELA__XT1CLK + SELS__XT2CLK + SELM__DCOCLK; //设定几个CLK的时钟源
}
void main(void)
{
WDTCTL = WDTPW | WDTHOLD;//停止看门狗
initClock(); //配置系统时钟
initLcdSeg(); /Leabharlann Baidu初始化段式液晶