当前位置:文档之家› 重大光电MSP430单片机实验代码

重大光电MSP430单片机实验代码

实验一#include <msp430f6638.h>int main(void)#include <msp430f6638.h>int main(void){WDTCTL=WDTPW+WDTHOLD;int flag=0;P4REN |=BIT0+BIT1+BIT2+BIT3+BIT4;P4OUT |=BIT0+BIT1+BIT2+BIT3+BIT4;P1DIR |=BIT0+BIT6+BIT7;while(1){ if((P4IN&BIT0)==0){if ((P4IN&BIT0)==0){ flag=7;}}if((P4IN&BIT4)==0){if ((P4IN&BIT4)==0){ flag=3;}}if((P4IN&BIT2)==0){if ((P4IN&BIT2)==0){ flag=5;}}if(flag==7){P1OUT |=BIT0;P1OUT |=BIT6;P1OUT &=~BIT7; }if(flag==3){P1OUT |=BIT0;P1OUT |=BIT7;P1OUT &=~BIT6; }if(flag==5){P1OUT &=~BIT0;}}}实验二#include <msp430f6638.h>void initAdc(){ADC12CTL0 |= ADC12MSC;//自动循环采样转换ADC12CTL0 |= ADC12ON;//启动ADC12模块ADC12CTL1 |= ADC12CONSEQ1 ;//选择单通道循环采样转换ADC12CTL1 |= ADC12SHP;//采样保持模式ADC12MCTL0 |= ADC12INCH_7; //选择通道15,连接拨码电位器ADC12CTL0 |= ADC12ENC;}int main(void){WDTCTL = WDTPW +WDTHOLD;P4DIR |=BIT5+BIT6+BIT7;P5DIR |=BIT7;P8DIR |=BIT0;ADC12CTL0=ADC12SHT0_8;initAdc();ADC12IE|=BIT0;ADC12CTL0|=ADC12SC;_EINT();// 开中断}#pragma vector=ADC12_VECTOR__interrupt void ADC12ISR(void){if(ADC12MEM0>=3686){P4OUT |=BIT5+BIT6+BIT7;P5OUT |=BIT7;P8OUT |=BIT0;}if(ADC12MEM0>=2867){ P4OUT &=~BIT5;P4OUT |=BIT6+BIT7;P5OUT |=BIT7;P8OUT |=BIT0;}if(ADC12MEM0>=2048){P4OUT &=~BIT5;P4OUT &=~BIT6;P4OUT |=BIT7;P5OUT |=BIT7;P8OUT |=BIT0;}if(ADC12MEM0>=1229){P4OUT &=~BIT5;P4OUT &=~BIT6;P4OUT &=~BIT7;P5OUT |=BIT7;P8OUT |=BIT0;}if(ADC12MEM0>=410){P4OUT &=~BIT5;P4OUT &=~BIT6;P4OUT &=~BIT7;P5OUT &=~BIT7;P8OUT |=BIT0;}else{P4OUT=0x00;P5OUT=0x00;P8OUT=0x00;}}实验三#include<msp430f6638.h>volatile unsigned int sin[256]={0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09,0x0A, 0x0B, 0x0D, 0x0E, 0x10, 0x11, 0x13, 0x15, 0x16, 0x18, 0x1A, 0x1C, 0x1E, 0x20, 0x22, 0x25,0x27, 0x29, 0x2B, 0x2E, 0x30, 0x33, 0x35, 0x38, 0x3A, 0x3D, 0x40, 0x43, 0x45, 0x48, 0x4C, 0x4E,0x51, 0x55, 0x57, 0x5A, 0x5D, 0x60, 0x63, 0x66, 0x69, 0x6C, 0x6F, 0x72, 0x76, 0x79, 0x7C,0x80, 0x80, 0x83, 0x86, 0x89, 0x8D, 0x90, 0x93,0x96,0x99,0x9C,0x9F,0x0A2,0x0A5,0x0A 8,0x0AB,0x0AE,0x0B1,0x0B4,0x0B7,0x0BA,0x 0BC,0x0BF,0x0C2,0x0C5,0x0C7,0x0CA,0x0CC,0 x0CF,0x0D1,0x0D4,0x0D6,0x0D8,0x0DA,0x0D D,0x0DF,0x0E1,0x0E3,0x0E5,0x0E7,0x0E9,0x0 EA,0x0EC,0x0EE,0x0EF,0x0F1,0x0F2,0x0F4,0x0 F5,0x0F6,0x0F7,0x0F8,0x0F9,0x0FA,0x0FB,0x0 FC,0x0FD,0x0FD,0x0FE,0x0FF,0x0FF,0x0FF,0x0 FF,0x0FF,0x0FF,0x0FF,0x0FF,0x0FF,0x0FF,0x0FF, 0x0FF,0x0FE,0x0FD,0x0FD,0x0FC,0x0FB,0x0FA, 0x0F9,0x0F8,0x0F7,0x0F6,0x0F5,0x0F4,0x0F2, 0x0F1,0x0EF,0x0EE,0x0EC,0x0EA,0x0E9,0x0E7, 0x0E5,0x0E3,0x0E1,0x0DE,0x0DD,0x0DA,0x0D 8,0x0D6,0x0D4,0x0D1,0x0CF,0x0CC,0x0CA,0x 0C7,0x0C5,0x0C2,0x0BF,0x0BC,0x0BA,0x0B7,0 x0B4,0x0B1,0x0AE,0x0AB,0x0A8,0x0A5,0x0A2 ,0x9F, 0x9C, 0x99, 0x96, 0x93, 0x90, 0x8D, 0x89, 0x86, 0x83, 0x80, 0x80, 0x7C, 0x79, 0x78, 0x72, 0x6F, 0x6C, 0x69, 0x66, 0x63, 0x60, 0x5D, 0x5A, 0x57, 0x55, 0x51,0x4E, 0x4C, 0x48, 0x45, 0x43, 0x40, 0x3D, 0x3A, 0x38, 0x35, 0x33, 0x30, 0x2E, 0x2B, 0x29, 0x27, 0x25, 0x22, 0x20, 0x1E, 0x1C, 0x1A, 0x18, 0x16, 0x15, 0x13, 0x11, 0x10, 0x0E, 0x0D, 0x0B, 0x0A, 0x09, 0x08, 0x07, 0x06, 0x05, 0x04, 0x03, 0x02, 0x02, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};void main(void){ volatile unsigned int i,j;WDTCTL = WDTPW + WDTHOLD; //关闭看门狗P7DIR |= BIT6;//设置P7.6口为输出口P7SEL |= BIT6;//使能P7.6口第二功能位DAC12_0CTL0 |= DAC12IR; //设置参考电压满刻度值,使Vout = Vref×(DAC12_xDAT/4096)DAC12_0CTL0 |= DAC12SREF_1; //设置参考电压为AVCCDAC12_0CTL0 |= DAC12AMP_5; //设置运算放大器输入输出缓冲器为中速中电流DAC12_0CTL0 |= DAC12CALON; //启动校验功能DAC12_0CTL0 |= DAC12OPS;//选择第二通道P7.6DAC12_0CTL0 |= DAC12ENC; //转化使能while(1){ for(j=0;j<5;j++){for(i=0;i<256;i++)DAC12_0DAT =16*sin[i];}//输入数据for(j=5;j<10;j++){for(i=0;i<256;i++)DAC12_0DAT =8*sin[i];}}}实验四#include <msp430.h>int flagTimer=0;int flagkey=0;int flagPC=0;int TimeNum=0;unsigned char send_data[]={'5'};unsigned char recv_data[];void TimerA_Init(void)//定时器TA初始化函数{TA0CTL |= MC_1 + TASSEL_2 + TACLR;TA0CCTL0 = CCIE;TA0CCR0 = 50000;}void UART_RS232_Init(void)//RS232函数{P8SEL|=0x0c;//模块功能接口设置,即P8.2与P8.3作为USCI的接收口与发射口UCA1CTL1|=UCSWRST;UCA1CTL1|=UCSSEL_1;//设置辅助时钟,用于发生特定波特率UCA1BR0=0x03;//设置波特率, BRCLK=32768Hz,BD=9600波特率UCBRx = INT(32768/9600)= 3;//取整UCA1BR1=0x00;UCA1MCTL=UCBRS_3+UCBRF_0;//波特率生成器中的调制控制UCA1CTL1&=~UCSWRST;//结束复位UCA1IE|=UCRXIE;//使能接收中断}int main(void){WDTCTL = WDTPW + WDTHOLD;P4DIR=BIT5+BIT6+BIT7;P5DIR=BIT7;P8DIR=BIT0;P4REN|=BIT4;P4OUT|=BIT4;UART_RS232_Init();TimerA_Init();__bis_SR_register(GIE);while(1){if((P4IN&BIT4)==0)flagkey=1;if(flagTimer==1){ flagTimer=0;if (flagkey==1){flagkey=0;send_data[0]++;if( send_data[0]>'9')send_data[0]='0';}UCA1TXBUF=send_data[0]; }if (flagPC==1){flagPC=0;switch(recv_data[0]){case '1': //LED1亮P8OUT|=BIT0;P5OUT&=~BIT7;P4OUT&=~BIT7;P4OUT&=~BIT5;P4OUT&=~BIT6;break;case '2': //LED2亮P5OUT|=BIT7;P8OUT&=~BIT0;P4OUT&=~BIT7;P4OUT&=~BIT5;P4OUT&=~BIT6;break;case '3': //LED3亮P8OUT&=~BIT0;P5OUT&=~BIT7;P4OUT |=BIT7;P4OUT&=~BIT5;P4OUT&=~BIT6;break;case '4': //LED4亮P8OUT&=~BIT0;P5OUT&=~BIT7;P4OUT&=~BIT7;P4OUT&=~BIT5;P4OUT|=BIT6;P4OUT&=~BIT7;break;case '5': //LED5亮P8OUT&=~BIT0;P5OUT&=~BIT7;P4OUT|=BIT5;P4OUT&=~BIT6;P4OUT&=~BIT7;break;}}}}#pragma vector = TIMER0_A0_VECTOR //定时器TA中断服务函数__interrupt void Timer_A (void){TimeNum++;//自定义一个变量TimeNumif(TimeNum >=20)//计满二十次为1s{TimeNum =0;flagTimer =1; //1S时间到的标志置1}}#pragma vector=USCI_A1_VECTOR //USCI中断服务函数__interrupt void USCI_A1_ISR(void){switch(__even_in_range(UCA1IV,4)){case 0: break; //无中断case 2: //接收中断处理while(!(UCA1IFG&UCTXIFG));//等待完成接收recv_data[0]=UCA1RXBUF;//数据读出flagPC=1; //表明PC机已发送了数据break;case 4:break; //发送中断不处理default:break; //其他情况无操作}}。

相关主题