msp430f6638单片机实验程序..docx
- 文档编号:709633
- 上传时间:2023-04-29
- 格式:DOCX
- 页数:24
- 大小:24.42KB
msp430f6638单片机实验程序..docx
《msp430f6638单片机实验程序..docx》由会员分享,可在线阅读,更多相关《msp430f6638单片机实验程序..docx(24页珍藏版)》请在冰点文库上搜索。
实验一
验证性试验
#include
voidDCmotor(intp)
{
switch(p)
{
case0:
//停转
{
P1OUT&=~BIT0;P1OUT&=~BIT6;P1OUT&=~BIT7;
break;
}
case1:
//正转
{
P1OUT|=BIT0;
P1OUT|=BIT6;
P1OUT&=~BIT7;
break;
}
case2:
//反转
{
P1OUT|=BIT0;
P1OUT&=~BIT6;
P1OUT|=BIT7;
break;
}
}
}
intmain(void){
WDTCTL=WDTPW|WDTHOLD; //Stopwatchdogtimer
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;
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){
flag=1;}}
DCmotor(flag);
}
}
设计性试验
#include
{ 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转换的输入电压值,转换后的数字量显示在段式液晶上面。
使用万用表测得当前输入电压,通过计算得到转换后的理想
的数字量与液晶显示的数字量进行比较。
/*
*main.c
*/
#include
#include"dr_lcdseg.h" //调用段式液晶驱动头文件#defineXT2_FREQ 4000000
#defineMCLK_FREQ16000000
#defineSMCLK_FREQ4000000
voidinitAdc()
{
ADC12CTL0|=ADC12MSC;//自动循环采样转换ADC12CTL0|=ADC12ON;//启动ADC12模块
ADC12CTL1|=ADC12CONSEQ1;//选择单通道循环采样转换ADC12CTL1|=ADC12SHP;//采样保持模式
ADC12MCTL0|=ADC12INCH_15;//选择通道15,连接拨码电位器ADC12CTL0|=ADC12ENC;
}
voidinitClock()
{
while(BAKCTL&LOCKIO)//解锁XT1引脚操作
BAKCTL&=~(LOCKIO);
UCSCTL6&=~XT1OFF;//启动XT1,选择内部时钟源P7SEL|=BIT2+BIT3;//XT2引脚功能选择
UCSCTL6&=~XT2OFF;//启动XT2
while(SFRIFG1&OFIFG)//等待XT1、XT2与DCO稳定
{
UCSCTL7&=~(DCOFFG+XT1LFOFFG+XT2OFFG);SFRIFG1&=~OFIFG;
}
UCSCTL4=SELAXT1CLK+SELSXT2CLK+SELMXT2CLK;//避免DCO调整中
跑飞
UCSCTL1=DCORSEL_5;//6000kHz~23.7MHz
UCSCTL2=MCLK_FREQ/(XT2_FREQ/16);//XT2频率较高,分频后作为基准可获得更高的精度
UCSCTL3=SELREFXT2CLK+FLLREFDIV16;//XT2进行16分频后作为基准
while(SFRIFG1&OFIFG)//等待XT1、XT2与DCO稳定
{
UCSCTL7&=~(DCOFFG+XT1LFOFFG+XT2OFFG);SFRIFG1&=~OFIFG;
}
UCSCTL5=DIVA1+DIVS1+DIVM1;//设定几个CLK的分频
UCSCTL4=SELAXT1CLK+SELSXT2CLK+SELMDCOCLK;//设定几个CLK的
时钟源
}
voidmain(void)
{
WDTCTL=WDTPW|WDTHOLD; //停止看门狗
initClock(); //配置系统时钟
initLcdSeg(); //初始化段式液晶
initAdc(); //初始化ADC
volatileunsignedintvalue=0;//设置判断变量while
(1) //进入程序主循环
{
ADC12CTL0|=ADC12SC;//开始采样转换value=ADC12MEM0;//把结果赋给变量
LCDSEG_DisplayNumber(value,0); //显示六位数,从111111-999999
delay_cycles(MCLK_FREQ/2);//延时500ms
}
}
2、设计性实验:
AD转换结束会产生中断,编写AD中断服务程序。
利用信号发生器输出信号(例如正弦波、三角波信号)作为AD转换的输入,根据输入电压的大小控制LED灯的亮灭(例如随
着输入电压值的增大,LED1到LED5按顺序点亮;随着输入电压值减小,LED灯按顺序熄
灭),LED和单片机IO口连接如下图所示。
#include
intmain(void)
{ WDTCTL=WDTPW+WDTHOLD;P4DIR|=BIT5+BIT6+BIT7;P5DIR|=BIT7;
P8DIR|=BIT0;ADC12CTL0=ADC12MSC+ADC12ON+ADC12SHT1_8;ADC12CTL1=ADC12CONSEQ1+ADC12SHP;ADC12MCTL0=ADC12INCH_7;ADC12CTL0|=ADC12ENC;
ADC12IE|=BIT0;
ADC12CTL0|=ADC12SC;
_EINT();
}
#pragmavector=ADC12_VECTOR
interruptvoidADC12ISR(void)
{ if(ADC12MEM0>=3413)
{ P4OUT|=BIT5+BIT6+BIT7;P5OUT|=BIT7;P8OUT|=BIT0;
}if(ADC12MEM0>=2730)
{ P4OUT&=~BIT5;
P4OUT|=BIT7+BIT6;
P5OUT|=BIT7;
P8OUT|=BIT0;
}if(ADC12MEM0>=2048)
{ P4OUT&=~(BIT6+BIT5);P4OUT|=BIT7;P5OUT|=BIT7;P8OUT|=BIT0;
}if(ADC12MEM0>=1365)
{ P4OUT&=~(BIT5+BIT6+BIT7);P5OUT|=BIT7;
P8OUT|=BIT0;
}if(ADC12MEM0>=683)
{ P4OUT&=~(BIT5+BIT6+BIT7);P5OUT&=~BIT7;P8OUT|=BIT0;
}if(ADC12MEM0>0)
{ P4OUT&=~(BIT5+BIT6+BIT7);
P5OUT&=~BIT7;
P8OUT&=~BIT0;
}
}
实验四 Zigbee无线通信及RS232串口通信实验
1、验证性实验
利用两个Zigbee模块通信,一个模块作发射,一个作接收。
发射模块所在实验箱按下按键控制接收模块所在实验箱上LED1的亮灭,从而实现无线点灯的功能。
#include
typedef
unsigned
char
uint8;
//无符号8位整型变量
typedef
signed
char
int8;
//有符号8位整型变量
typedef
unsigned
short
uint16;
//无符号16位整型变量
typedef
signed
short
int16;
//有符号16位整型变量
typedef
unsigned
long
uint32;
//无符号32位整型变
量
typedef
signed
long
int32;
//有符号32位整型变
量typedef位长度)typedef长度)
floatdouble
fp32;fp64;
//单精度浮点数(32
//双精度浮点数(64位
#define#define
TRUEFALSE
1
0
#define
NULL
0
//----------------------------------CC2520引脚定义-------------------
-----------
#defineRESET_ON() P4OUT|=BIT1
#defineRESET_OFF() P4OUT&=~BIT1
#defineSCLK_ON() P2OUT|=BIT4
#defineSCLK_OFF() P2OUT&=~BIT4
#defineMOSI_ON() P2OUT|=BIT5
#defineMOSI_OFF() P2OUT&=~BIT5
#defineCSN_ON() P3OUT|=BIT5#defineCSN_OFF() P3OUT&=~BIT5#defineVREG_EN_ON() P4OUT|=BIT4#defineVREG_EN_OFF() P4OUT&=~BIT4
#defineMISO_IN (P2IN&BIT6) //P2.6
//#defineGPIO4_IN (P2IN&0x40)
//#defineGPIO5_IN
#defineGPIO0_IN
(P2IN&0x20)
(P4IN&BIT0)
//P4.0
#defineGPIO1_IN
(P4IN&BIT2)
//P4.2
//-----------------------------------LED-----------------------------
-----------
#define
LED1_0
P8OUT&=~BIT0
//输出0
#define
LED1_1
P8OUT|=BIT0
//输出1
#define
LED1_10
P8OUT^=BIT0
//输出1/0
#define
LED2_0
P5OUT&=~BIT7
//输出0
#define
LED2_1
P5OUT|=BIT7
//输出1
#define
LED2_10
P5OUT^=BIT7
//输出1/0
//----------------------------------BELL-----------------------------
-----------
#define BELL_0 P6OUT&=~BIT3 //输出0#define BELL_1 P6OUT|=BIT3 //输出1
//-------------------------------射频芯片相关定义--------------------
-----------
#define
REG_READ
(0x80)
#define
REG_WRITE
(0xC0)
#define
MEM_READ
(0x10)
#define
MEM_WRITE
(0x20)
#define
RXFIFO_READ
(0x30)
#define
TXFIFO_WRITE
(0x3A)
//--------------------------------CC2520命令字定义-----------------
-----------
#defineCMD_SNOP (0x00)
#defineCMD_IBUFLD (0x02)#defineCMD_SIBUFEX (0x03)
#defineCMD_SSAMPLECCA (0x04)
#defineCMD_SRES (0x09)
#defineCMD_SXOSCON (0x40)#defineCMD_SRXON (0x42)
#defineCMD_STXON (0x43)#defineCMD_SRFOFF (0x45)
#defineCMD_SFLUSHRX (0x47)
#defineCMD_SFLUSHTX (0x48)
//------------------CC2520配置寄存器-------------------------------
----
#defineFRMFILT0 (0x00)
#defineFRMFILT1 (0x01)
#defineSRCMATCH (0x02)
#defineSRCSHORTEN0 (0x04)
#defineSRCSHORTEN1 (0x05)
#defineSRCSHORTEN2 (0x06)
#defineSRCEXTEN0 (0x08)
#defineSRCEXTEN1 (0x09)
#defineSRCEXTEN2 (0x0A)
#defineFRMCTRL0 (0x0C)
#defineFRMCTRL1 (0x0D)
#defineRXENABLE0 (0x0E)
#defineRXENABLE1 (0x0F)
#defineEXCFLAG0 (0x10)
#defineEXCFLAG1 (0x11)
#defineEXCFLAG2 (0x12)
#defineEXCMASKA0 (0x14)
#defineEXCMASKA1 (0x15)
#defineEXCMASKA2 (0x16)
#defineEXCMASKB0 (0x18)
#defineEXCMASKB1 (0x19)
#defineEXCMASKB2 (0x1A)
#defineEXCBINDX0 (0x1C)
#defineEXCBINDX1 (0x1D)
#defineEXCBINDY0 (0x1E)
#defineEXCBINDY1 (0x1F)
#defineGPIOCTRL0 (0x20)
#defineGPIOCTRL1 (0x21)
#defineGPIOCTRL2 (0x22)
#defineGPIOCTRL3 (0x23)
#defineGPIOCTRL4 (0x24)
#defineGPIOCTRL5 (0x25)
#defineGPIOPOLARITY (0x26)
#defineGPIOCTRL (0x28)
#defineDPUCON (0x2A)
#defineDPUSTAT (0x2C)
#defineFREQCTRL (0x2E)
#defineFREQTUNE (0x2F)
#defineTXPOWER (0x30)
#defineFSMSTAT0 (0x32)
#defineFSMSTAT1 (0x33)
#defineFIFOPCTRL (0x34)
#defineFSMCTRL (0x35)
#defineCCACTRL0 (0x36)
#defineCCACTRL1 (0x37)
#defineRSSI (0x38)
#defineRSSISTAT (0x39)
#defineRXFIRST (0x3C)
#defineRXFIFOCNT (0x3E)
#defineTXFIFOCNT (0x3F)
//-------------------PSDU相关定义---------------------------
//FRAME_CONTROL_FIELD
//FRAME_TYPE
#define
#define
FRAME_TYPE_BEACCON
FRAME_TYPE_DATA
0x00
0x01
#define
FRAME_TYPE_ACK
0x02
#define
FRAME_TYPE_MAC
0x03
#defineSECURITY_ENABLE 0x00
#defineFRAME_PENDING 0x00
#defineACKNOWLEDGMENT_REQUEST 0x00
#definePAN_ID_COMPRESSION 0x00
#defineDEST_ADDRESSING_MODE 0x03
#defineFRAME_VERSION 0x01
#defineSOURCE_ADDRESSING_MODE 0x03
//
#defineSEQUENCE_NUMBER 0x02
//--------------------CC2520RAM地址-------------------------------
----
#defineRAM_IEEEADR (0xEA)#defineRAM_PANID (0xF2)#defineRAM_SHORTADR (0xF4)
//----------------------函数原型------------------------
voidCC2520_Init(void);
uint8CC2520_ReadReg(uint8 addr);
voidCC2520_WriteReg(uint8 addr,uint8value);uint8CC2520_ReadRAM(uint8addrH,uint8addrL);
voidCC2520_WriteRAM(uint8addrH,uint8addrL,uint8value);voidCC2520_ReadRXFIFO(void);
voidCC2520_WriteTXFIFO(void);voidCC2520_Command(uint8cmd);
voidCC2520_SetRxMode(void);
uint8CC2520_RxPacket(void);voidCC2520_TxPacket(void);
voidSPI_Init(void);uint8SPI_Read(void);
voidSPI_Write(uint8txdata);uint8SPI_WriteRead(uint8txdata);
voidIO_Init(void);voiddelay_ms(uint8n);
voiddelay_10us(uint8n);
#defineCC2520_PSDU_Len 127
uint8 CC2520_PSDU[1+CC2520_PSDU_Len];
uint8CC2520_PSDU[1+CC2520_PSDU_Len];
uint8CC2520_Source_PANID[2]={0xcc,0xcc};uint8CC2520_Source_ShortAddr[2]={0xcc,0xcc};uint8CC2520_Source_IEEEAddr[8]=
{0x12,0x34,0x56,0x7c,0xcc,0xcc,0xcc,0xcc};
uint8CC2520_Destination_PANID[2]={0xcc,0xcc};uint8CC2520_Destination_ShortAddr[2]={0xcc,0xcc};uint8CC2520_Destination_IEEEAddr[8]=
{0x12,0x34,0x56,0x7c,0xcc,0xcc,0xcc,0xcc};
//*******************************************************************
***********
//系统初始化
//*******************************************************************
***********voidInitSys()
{
pins
pins
P1DIR|=BIT0; //ACLKsetoutto
P1SEL|=BIT0;
P3DIR|=BIT4; //SMCLKsetouttoP3SEL|=BIT4;
while(BAKCTL&LOCKIO) //UnlockXT1pinsforoperation
BAKCTL&=~(LOCKIO);
UCSCTL6&=~(XT1OFF); //XT1On
UCSCTL6|=XCAP_3; //Internalloadcap
//LoopuntilXT1faultflagiscleared
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- msp430f6638 单片机 实验 程序