msp430f6638单片机实验程序Word格式文档下载.docx
《msp430f6638单片机实验程序Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《msp430f6638单片机实验程序Word格式文档下载.docx(30页珍藏版)》请在冰豆网上搜索。
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引脚功能选择
=~XT2OFF;
//启动XT2
while(SFRIFG1&
OFIFG)//等待XT1、XT2与DCO稳定
UCSCTL7&
=~(DCOFFG+XT1LFOFFG+XT2OFFG);
SFRIFG1&
=~OFIFG;
UCSCTL4=SELA__XT1CLK+SELS__XT2CLK+SELM__XT2CLK;
//避免DCO调整中跑飞
UCSCTL1=DCORSEL_5;
//6000kHz~23.7MHz
UCSCTL2=MCLK_FREQ/(XT2_FREQ/16);
//XT2频率较高,分频后作为基准可获得更高的精度
UCSCTL3=SELREF__XT2CLK+FLLREFDIV__16;
//XT2进行16分频后作为基准
while(SFRIFG1&
{
UCSCTL5=DIVA__1+DIVS__1+DIVM__1;
//设定几个CLK的分频
UCSCTL4=SELA__XT1CLK+SELS__XT2CLK+SELM__DCOCLK;
//设定几个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口连接如下图所示。
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;
=2048)
=~(BIT6+BIT5);
P4OUT|=BIT7;
=1365)
=~(BIT5+BIT6+BIT7);
=683)
P5OUT&
=~BIT7;
0)
P8OUT&
实验四Zigbee无线通信及RS232串口通信实验
1、验证性实验
利用两个Zigbee模块通信,一个模块作发射,一个作接收。
发射模块所在实验箱按下按键控制接收模块所在实验箱上LED1的亮灭,从而实现无线点灯的功能。
typedefunsignedcharuint8;
//无符号8位整型变量
typedefsignedcharint8;
//有符号8位整型变量
typedefunsignedshortuint16;
//无符号16位整型变量
typedefsignedshortint16;
//有符号16位整型变量
typedefunsignedlonguint32;
//无符号32位整型变量
typedefsignedlongint32;
//有符号32位整型变量
typedeffloatfp32;
//单精度浮点数(32位长度)
typedefdoublefp64;
//双精度浮点数(64位长度)
#defineTRUE1
#defineFALSE0
#defineNULL0
//----------------------------------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&
#defineVREG_EN_ON()P4OUT|=BIT4
#defineVREG_EN_OFF()P4OUT&
#defineMISO_IN(P2IN&
BIT6)//P2.6
//#defineGPIO4_IN(P2IN&
0x40)
//#defineGPIO5_IN(P2IN&
0x20)
#defineGPIO0_IN(P4IN&
BIT0)//P4.0
#defineGPIO1_IN(P4IN&
BIT2)//P4.2
//-----------------------------------LED----------------------------------------
#defineLED1_0P8OUT&
=~BIT0//输出0
#defineLED1_1P8OUT|=BIT0//输出1
#defineLED1_10P8OUT^=BIT0//输出1/0
#defineLED2_0P5OUT&
=~BIT7//输出0
#defineLED2_1P5OUT|=BIT7//输出1
#defineLED2_10P5OUT^=BIT7//输出1/0
//----------------------------------BELL----------------------------------------
#defineBELL_0P6OUT&
=~BIT3//输出0
#defineBELL_1P6OUT|=BIT3//输出1
//-------------------------------射频芯片相关定义-------------------------------
#defineREG_READ(0x80)
#defineREG_WRITE(0xC0)
#defineMEM_READ(0x10)
#defineMEM_WRITE(0x20)
#defineRXFIFO_READ(0x30)
#defineTXFIFO_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
#defineFRAME_TYPE_BEACCON0x00
#defineFRAME_TYPE_DATA0x01
#defineFRAME_TYPE_ACK0x02
#defineFRAME_TYPE_MAC0x03
#defineSECURITY_ENABLE0x00
#defineFRAME_PENDING0x00
#defineACKNOWLEDGMENT_REQUEST0x00
#definePAN_ID_COMPRESSION0x00
#defineDEST_ADDRESSING_MODE0x03
#defineFRAME_VERSION0x01
#defineSOURCE_ADDRESSING_MODE0x03
//
#defineSEQUENCE_NUMBER0x02
//--------------------CC2520RAM地址-----------------------------------
#defineRAM_IEEEADR(0xEA)
#defineRAM_PANID(0xF2)
#defineRAM_SHORTADR(0xF4)
//----------------------函数原型------------------------
voidCC2520_Init(void);
uint8CC2520_ReadReg(uint8addr);
voidCC2520_WriteReg(uint8addr,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_Len127
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()
P1DIR|=BIT0;
//ACLKsetouttopins
P1SEL|=BIT0;
P3DIR|=BIT4;
//SMCLKsetouttopins
P3SEL|=BIT4;
LOCKIO)//UnlockXT1pinsforoperation
=~(XT1OFF);
//XT1On
UCSCTL6|=XCAP_3;
//Internalloadcap
//LoopuntilXT1faultflagiscleared
do
=~(XT2OFFG+XT1LFOFFG+DCOFFG);
//ClearXT2,XT1,DCOfaultflags
//Clearfaultflags
}while(SFRIFG1&
OFIFG);
//Testoscillatorfaultflag
//InitializeDCOto2.45MHz
__bis_SR_register(SCG0);
//DisabletheFLLcontrolloop
UCSCTL0=0x0000;
//SetlowestpossibleDCOx,MODx
//SetRSELxforDCO=8MHz
UCSCTL2=FLLD_1+243;
//SetDCOMultiplierfor2.45MHz
//(N+1)*FLLRef=Fdco
//(243+1)*32768=8MHz
//SetFLLDiv=fDCOCLK/2
__bic_SR_register(SCG0);
//EnabletheFLLcontrolloop
//Worst-casesettlingtimefortheDCOwhentheDCOrangebitshavebeen
//changedisnx32x32xf_MCLK/f_FLL_reference.SeeUCSchapterin5xx
//UGforoptimization.
//32x32x2.45MHz/32,768Hz=76563=MCLKcyclesforDCOtosettle
__delay_cycles(250000);
//LoopuntilXT1,XT2&
DCOfaultflagiscleared
=~(XT2OFFG+XT1LFOFFG+XT1HFOFFG+DCOFFG);
//UCSCTL4=SELM__DCOCLK+SELM__DCOCLK;
//--------------------------SPI初始化函数---------------------