msp430f6638單片機(jī)實(shí)驗(yàn)程序_第1頁
msp430f6638單片機(jī)實(shí)驗(yàn)程序_第2頁
msp430f6638單片機(jī)實(shí)驗(yàn)程序_第3頁
msp430f6638單片機(jī)實(shí)驗(yàn)程序_第4頁
msp430f6638單片機(jī)實(shí)驗(yàn)程序_第5頁
已閱讀5頁,還剩19頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、.實(shí)驗(yàn)一驗(yàn)證性試驗(yàn)#include <msp430f6638.h>int flag;void DCmotor(int p) switch(p) case 0: P1OUT &= BIT0; /停轉(zhuǎn) P1OUT &= BIT6; P1OUT &= BIT7; break; case 1: P1OUT |= BIT0; /正轉(zhuǎn) P1OUT |= BIT6; P1OUT &= BIT7; break; case 2: P1OUT |= BIT0; P1OUT &= BIT6; P1OUT |= BIT7; break; int main(void)

2、 WDTCTL = WDTPW | WDTHOLD;/ Stop watchdog timer P4REN |=BIT0+BIT1+BIT2+BIT3+BIT4; / 上下拉電阻使能 P4OUT |=BIT0+BIT1+BIT2+BIT3+BIT4; /設(shè)置為上拉電阻 P4DIR |=BIT5+BIT6+BIT7; /LED管腳設(shè)置 P5DIR |=BIT7; P8DIR |=BIT0; P1DIR |= BIT0+BIT6+BIT7; while(1) if(P4IN&BIT0)=0) /按鍵S7 _delay_cycles(160000); if(P4IN&BIT0)=0)

3、 flag=2; if(P4IN&BIT4)=0) /按鍵S3 _delay_cycles(160000); if(P4IN&BIT4)=0) flag=1; DCmotor(flag);設(shè)計(jì)性試驗(yàn)#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

4、(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、驗(yàn)證性實(shí)驗(yàn):利用 MSP430F6638 開發(fā)板上的撥盤電位器,控制改變AD 轉(zhuǎn)換

5、的輸入電壓值,轉(zhuǎn)換后的數(shù)字量顯示在段式液晶上面。使用萬用表測(cè)得當(dāng)前輸入電壓,通過計(jì)算得到轉(zhuǎn)換后的理想的數(shù)字量與液晶顯示的數(shù)字量進(jìn)行比較。/* * main.c */#include <msp430f6638.h>#include <stdint.h>#include <stdio.h>#include <string.h>#include "dr_lcdseg.h" /調(diào)用段式液晶驅(qū)動(dòng)頭文件#define XT2_FREQ 4000000#define MCLK_FREQ 16000000#define SMCLK_FREQ

6、4000000void initAdc() ADC12CTL0 |= ADC12MSC;/自動(dòng)循環(huán)采樣轉(zhuǎn)換 ADC12CTL0 |= ADC12ON;/啟動(dòng)ADC12模塊 ADC12CTL1 |= ADC12CONSEQ1 ;/選擇單通道循環(huán)采樣轉(zhuǎn)換 ADC12CTL1 |= ADC12SHP;/采樣保持模式 ADC12MCTL0 |= ADC12INCH_15; /選擇通道15,連接撥碼電位器 ADC12CTL0 |= ADC12ENC;void initClock() while(BAKCTL & LOCKIO) /解鎖XT1引腳操作 BAKCTL &= (LOCKIO);

7、 UCSCTL6 &= XT1OFF; /啟動(dòng)XT1,選擇內(nèi)部時(shí)鐘源 P7SEL |= BIT2 + BIT3; /XT2引腳功能選擇 UCSCTL6 &= XT2OFF; /啟動(dòng)XT2while (SFRIFG1 & OFIFG) /等待XT1、XT2與DCO穩(wěn)定 UCSCTL7 &= (DCOFFG+XT1LFOFFG+XT2OFFG); SFRIFG1 &= OFIFG; UCSCTL4 = SELA_XT1CLK + SELS_XT2CLK + SELM_XT2CLK; /避免DCO調(diào)整中跑飛 UCSCTL1 = DCORSEL_5; /6000

8、kHz23.7MHz UCSCTL2 = MCLK_FREQ / (XT2_FREQ / 16); /XT2頻率較高,分頻后作為基準(zhǔn)可獲得更高的精度 UCSCTL3 = SELREF_XT2CLK + FLLREFDIV_16; /XT2進(jìn)行16分頻后作為基準(zhǔn) while (SFRIFG1 & OFIFG) /等待XT1、XT2與DCO穩(wěn)定 UCSCTL7 &= (DCOFFG+XT1LFOFFG+XT2OFFG); SFRIFG1 &= OFIFG; UCSCTL5 = DIVA_1 + DIVS_1 + DIVM_1; /設(shè)定幾個(gè)CLK的分頻 UCSCTL4 = S

9、ELA_XT1CLK + SELS_XT2CLK + SELM_DCOCLK; /設(shè)定幾個(gè)CLK的時(shí)鐘源void main(void) WDTCTL = WDTPW | WDTHOLD;/ 停止看門狗 initClock(); /配置系統(tǒng)時(shí)鐘 initLcdSeg(); /初始化段式液晶 initAdc(); /初始化ADC volatile unsigned int value = 0;/設(shè)置判斷變量 while(1) /進(jìn)入程序主循環(huán) ADC12CTL0 |= ADC12SC;/開始采樣轉(zhuǎn)換 value = ADC12MEM0;/把結(jié)果賦給變量 LCDSEG_DisplayNumber(v

10、alue,0); /顯示六位數(shù),從111111-999999 _delay_cycles(MCLK_FREQ/2);/延時(shí)500ms 2、設(shè)計(jì)性實(shí)驗(yàn):AD 轉(zhuǎn)換結(jié)束會(huì)產(chǎn)生中斷,編寫AD 中斷服務(wù)程序。利用信號(hào)發(fā)生器輸出信號(hào)(例如正弦波、三角波信號(hào))作為AD 轉(zhuǎn)換的輸入,根據(jù)輸入電壓的大小控制LED 燈的亮滅(例如隨著輸入電壓值的增大,LED1 到LED5 按順序點(diǎn)亮;隨著輸入電壓值減小,LED 燈按順序熄滅),LED 和單片機(jī)IO 口連接如下圖所示。#include <msp430f6638.h>int main(void)WDTCTL = WDTPW +WDTHOLD;P4DIR

11、|=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();#pragma vector=ADC12_VECTOR_interrupt void ADC12ISR(void)if(ADC12MEM0>=3413)P4OUT|=BIT5+BIT6+BIT7;P5O

12、UT|=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+BI

13、T7);P5OUT&=BIT7;P8OUT|=BIT0;if(ADC12MEM0>0)P4OUT&=(BIT5+BIT6+BIT7);P5OUT&=BIT7;P8OUT&=BIT0;實(shí)驗(yàn)四 Zigbee無線通信及RS232串口通信實(shí)驗(yàn) 1、驗(yàn)證性實(shí)驗(yàn)利用兩個(gè)Zigbee模塊通信,一個(gè)模塊作發(fā)射,一個(gè)作接收。發(fā)射模塊所在實(shí)驗(yàn)箱按下按鍵控制接收模塊所在實(shí)驗(yàn)箱上LED1的亮滅,從而實(shí)現(xiàn)無線點(diǎn)燈的功能。#include <msp430f6638.h>typedef unsigned char uint8; / 無符號(hào)8位整型變量typedef sign

14、ed char int8; / 有符號(hào)8位整型變量typedef unsigned short uint16; /無符號(hào)16位整型變量typedef signed short int16; /有符號(hào)16位整型變量typedef unsigned long uint32; / 無符號(hào)32位整型變量typedef signed long int32; / 有符號(hào)32位整型變量typedef float fp32; / 單精度浮點(diǎn)數(shù)(32位長度)typedef double fp64; /雙精度浮點(diǎn)數(shù)(64位長度)#define TRUE 1#define FALSE 0#define NULL 0

15、/-CC2520引腳定義-#define RESET_ON() P4OUT |= BIT1#define RESET_OFF() P4OUT &=BIT1#define SCLK_ON() P2OUT |= BIT4#define SCLK_OFF() P2OUT &=BIT4#define MOSI_ON() P2OUT |= BIT5#define MOSI_OFF() P2OUT &=BIT5#define CSN_ON() P3OUT |= BIT5#define CSN_OFF() P3OUT &=BIT5#define VREG_EN_ON() P4

16、OUT |= BIT4#define VREG_EN_OFF() P4OUT &=BIT4#define MISO_IN (P2IN&BIT6) /P2.6/#define GPIO4_IN (P2IN&0x40)/#define GPIO5_IN (P2IN&0x20)#define GPIO0_IN (P4IN&BIT0) /P4.0#define GPIO1_IN (P4IN&BIT2) /P4.2/-LED-#define LED1_0 P8OUT &=BIT0 /輸出0#define LED1_1 P8OUT |= BIT0 /

17、輸出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/-射頻芯片相關(guān)定義-#define REG_READ (0x80)#define REG_WRITE (0xC0)#define MEM_READ (0x10)#

18、define MEM_WRITE (0x20)#define RXFIFO_READ (0x30)#define TXFIFO_WRITE (0x3A)/- CC2520 命令字定義-#define CMD_SNOP (0x00)#define CMD_IBUFLD (0x02)#define CMD_SIBUFEX (0x03)#define CMD_SSAMPLECCA (0x04)#define CMD_SRES (0x09)#define CMD_SXOSCON (0x40)#define CMD_SRXON (0x42)#define CMD_STXON (0x43)#define

19、CMD_SRFOFF (0x45)#define CMD_SFLUSHRX (0x47)#define CMD_SFLUSHTX (0x48)/- CC2520 配置寄存器-#define FRMFILT0 (0x00)#define FRMFILT1 (0x01)#define SRCMATCH (0x02)#define SRCSHORTEN0 (0x04)#define SRCSHORTEN1 (0x05)#define SRCSHORTEN2 (0x06)#define SRCEXTEN0 (0x08)#define SRCEXTEN1 (0x09)#define SRCEXTEN2

20、(0x0A)#define FRMCTRL0 (0x0C)#define FRMCTRL1 (0x0D)#define RXENABLE0 (0x0E)#define RXENABLE1 (0x0F)#define EXCFLAG0 (0x10)#define EXCFLAG1 (0x11)#define EXCFLAG2 (0x12)#define EXCMASKA0 (0x14)#define EXCMASKA1 (0x15)#define EXCMASKA2 (0x16)#define EXCMASKB0 (0x18)#define EXCMASKB1 (0x19)#define EXC

21、MASKB2 (0x1A)#define EXCBINDX0 (0x1C)#define EXCBINDX1 (0x1D)#define EXCBINDY0 (0x1E)#define EXCBINDY1 (0x1F)#define GPIOCTRL0 (0x20)#define GPIOCTRL1 (0x21)#define GPIOCTRL2 (0x22)#define GPIOCTRL3 (0x23)#define GPIOCTRL4 (0x24)#define GPIOCTRL5 (0x25)#define GPIOPOLARITY (0x26)#define GPIOCTRL (0x

22、28)#define DPUCON (0x2A)#define DPUSTAT (0x2C)#define FREQCTRL (0x2E)#define FREQTUNE (0x2F)#define TXPOWER (0x30)#define FSMSTAT0 (0x32)#define FSMSTAT1 (0x33)#define FIFOPCTRL (0x34)#define FSMCTRL (0x35)#define CCACTRL0 (0x36)#define CCACTRL1 (0x37)#define RSSI (0x38)#define RSSISTAT (0x39)#defin

23、e RXFIRST (0x3C)#define RXFIFOCNT (0x3E)#define TXFIFOCNT (0x3F)/-PSDU相關(guān)定義-/FRAME_CONTROL_FIELD/FRAME_TYPE#define FRAME_TYPE_BEACCON 0x00#define FRAME_TYPE_DATA 0x01#define FRAME_TYPE_ACK 0x02#define FRAME_TYPE_MAC 0x03#define SECURITY_ENABLE 0x00#define FRAME_PENDING 0x00#define ACKNOWLEDGMENT_REQU

24、EST 0x00#define PAN_ID_COMPRESSION 0x00#define DEST_ADDRESSING_MODE 0x03#define FRAME_VERSION 0x01#define SOURCE_ADDRESSING_MODE 0x03/#define SEQUENCE_NUMBER 0x02/- CC2520 RAM 地址-#define RAM_IEEEADR (0xEA)#define RAM_PANID (0xF2)#define RAM_SHORTADR (0xF4)/-函數(shù)原型-void CC2520_Init(void);uint8 CC2520_R

25、eadReg(uint8 addr);void CC2520_WriteReg(uint8 addr, uint8 value);uint8 CC2520_ReadRAM(uint8 addrH,uint8 addrL);void CC2520_WriteRAM(uint8 addrH,uint8 addrL, uint8 value);void CC2520_ReadRXFIFO(void);void CC2520_WriteTXFIFO(void);void CC2520_Command(uint8 cmd);void CC2520_SetRxMode(void);uint8 CC2520

26、_RxPacket(void) ;void CC2520_TxPacket(void);void SPI_Init(void);uint8 SPI_Read(void);void SPI_Write(uint8 txdata);uint8 SPI_WriteRead(uint8 txdata);void IO_Init(void);void delay_ms(uint8 n);void delay_10us(uint8 n);#define CC2520_PSDU_Len 127uint8 CC2520_PSDU1+CC2520_PSDU_Len;uint8 CC2520_PSDU1+CC25

27、20_PSDU_Len;uint8 CC2520_Source_PANID2 = 0xcc,0xcc;uint8 CC2520_Source_ShortAddr2 = 0xcc,0xcc;uint8 CC2520_Source_IEEEAddr8 = 0x12,0x34,0x56,0x7c,0xcc,0xcc,0xcc,0xcc;uint8 CC2520_Destination_PANID2 = 0xcc,0xcc;uint8 CC2520_Destination_ShortAddr2 = 0xcc,0xcc;uint8 CC2520_Destination_IEEEAddr8 = 0x12,

28、0x34,0x56,0x7c,0xcc,0xcc,0xcc,0xcc;/*/系統(tǒng)初始化/*void InitSys() P1DIR |= BIT0; / ACLK set out to pins P1SEL |= BIT0; P3DIR |= BIT4; / SMCLK set out to pins P3SEL |= BIT4; while(BAKCTL & LOCKIO) / Unlock XT1 pins for operation BAKCTL &= (LOCKIO); UCSCTL6 &= (XT1OFF); / XT1 On UCSCTL6 |= XCAP_

29、3; / Internal load cap / Loop until XT1 fault flag is cleared do UCSCTL7 &= (XT2OFFG + XT1LFOFFG + DCOFFG); / Clear XT2,XT1,DCO fault flags SFRIFG1 &= OFIFG; / Clear fault flags while (SFRIFG1&OFIFG); / Test oscillator fault flag / Initialize DCO to 2.45MHz _bis_SR_register(SCG0); / Disa

30、ble the FLL control loop UCSCTL0 = 0x0000; / Set lowest possible DCOx, MODx UCSCTL1 = DCORSEL_5; / Set RSELx for DCO = 8 MHz UCSCTL2 = FLLD_1 + 243; / Set DCO Multiplier for 2.45MHz / (N + 1) * FLLRef = Fdco / (243 + 1) * 32768 = 8MHz / Set FLL Div = fDCOCLK/2 _bic_SR_register(SCG0); / Enable the FL

31、L control loop / Worst-case settling time for the DCO when the DCO range bits have been / changed is n x 32 x 32 x f_MCLK / f_FLL_reference. See UCS chapter in 5xx / UG for optimization. / 32 x 32 x 2.45 MHz / 32,768 Hz = 76563 = MCLK cycles for DCO to settle _delay_cycles(250000); / Loop until XT1,

32、XT2 & DCO fault flag is cleared do UCSCTL7 &= (XT2OFFG + XT1LFOFFG + XT1HFOFFG + DCOFFG); / Clear XT2,XT1,DCO fault flags SFRIFG1 &= OFIFG; / Clear fault flags while (SFRIFG1&OFIFG); /UCSCTL4 =SELM_DCOCLK+SELM_DCOCLK;/-SPI初始化函數(shù)-void SPI_Init(void)SCLK_OFF();CSN_ON();/-SPI單字節(jié)讀取函數(shù)-uint

33、8 SPI_Read(void)uint8 i,rxdata;rxdata = 0x00;for (i = 0;i < 8;i+)rxdata = rxdata<<1;SCLK_ON();if (MISO_IN) rxdata |= 0x01;elserxdata &= 0x01;SCLK_OFF(); return rxdata;/-SPI單字節(jié)寫入函數(shù)-void SPI_Write(uint8 txdata)uint8 i;for (i = 0;i < 8;i+)if (txdata&0x80)MOSI_ON();elseMOSI_OFF();SCL

34、K_ON();txdata = txdata<<1;SCLK_OFF();/-SPI單字節(jié)寫入讀取函數(shù)-uint8 SPI_WriteRead(uint8 txdata)uint8 i,rxdata;rxdata = 0x00;for (i = 0;i < 8;i+)rxdata = rxdata<<1;if (txdata&0x80)MOSI_ON();elseMOSI_OFF();SCLK_ON();if (MISO_IN)rxdata |= 0x01;elserxdata &= 0x01;SCLK_OFF();txdata = txdata&

35、lt;<1; return rxdata;/-CC2520寄存器讀取函數(shù)-uint8 CC2520_ReadReg(uint8 addr)uint16 value;CSN_OFF();SPI_Write(addr|REG_READ);value = SPI_Read();CSN_ON();return value;/-CC2520寄存器寫入函數(shù)-void CC2520_WriteReg(uint8 addr, uint8 value)CSN_OFF();SPI_Write(addr|REG_WRITE);SPI_Write(value);CSN_ON();/-CC2520 RAM 讀取函

36、數(shù)-uint8 CC2520_ReadRAM(uint8 addrH,uint8 addrL)uint8 value;CSN_OFF();SPI_Write(addrH|MEM_READ);SPI_Write(addrL);value = SPI_Read();CSN_ON();return value;/-CC2520 RAM 寫入函數(shù)-void CC2520_WriteRAM(uint8 addrH,uint8 addrL, uint8 value)CSN_OFF();SPI_Write(addrH|MEM_WRITE);SPI_Write(addrL);SPI_Write(value);

37、CSN_ON();/-CC2520 RXFIFIO 讀取函數(shù)-void CC2520_ReadRXFIFO(void)uint8 i;CSN_OFF();SPI_Write(RXFIFO_READ);CC2520_PSDU0 = SPI_Read();for(i=0;i<CC2520_PSDU0;i+)CC2520_PSDU1+i = SPI_Read();CSN_ON();CC2520_Command(CMD_SFLUSHRX);/-CC2520 TXFIFIO 寫入函數(shù)-void CC2520_WriteTXFIFO(void)uint8 i;CC2520_Command(CMD_S

38、FLUSHTX);CSN_OFF();SPI_Write(TXFIFO_WRITE);SPI_Write(CC2520_PSDU0);for(i=0;i<CC2520_PSDU0;i+)SPI_Write(CC2520_PSDU1+i);CSN_ON();/-CC2520命令函數(shù)-void CC2520_Command(uint8 cmd)CSN_OFF();SPI_Write(cmd);CSN_ON();/-CC2520 設(shè)置接收函數(shù)-void CC2520_SetRxMode(void)CC2520_Command(CMD_SRFOFF);CC2520_Command(CMD_SRX

39、ON);/-CC2520 判斷接收函數(shù)-uint8 CC2520_RxPacket(void) if(!GPIO0_IN)&&(GPIO1_IN)return TRUE;return FALSE;/-CC2520 發(fā)送函數(shù)-void CC2520_TxPacket(void)CC2520_Command(CMD_SRFOFF);CC2520_Command(CMD_STXON);while(!GPIO0_IN);while(GPIO0_IN);/-led端口設(shè)置-void LED_IO_set(void) P8DIR |= BIT0; P5DIR |= BIT7;/-RF2520端口設(shè)置-void RF2520_IO_set(void) P2DIR |= BIT4+BIT5; P3DIR |= BIT5; P2DIR &= BIT6; P4DIR &= BIT0 + BIT2; P4DIR |= BIT1+BIT4;/-BELL端口設(shè)置-void BELL_IO_set(void) P6DIR |=

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論