好文档 - 专业文书写作范文服务资料分享网站

MSP430_C语言例程注释详

天下 分享 时间: 加入收藏 我要投稿 点赞

www.Microcontrol.cn 微控设计网 中国MSP430单片机专业网站Simpo PDF Password Remover Unregistered Version - http://www.simpopdf.comwww.Microcontrol.cn 微控设计网 unsigned char seg[10]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90}; WDTCTL= WDTPW + WDTHOLD; //设置看门狗控制寄存器,关看门狗 TACTL = TASSEL0 + TACLR; // 设置定时器A控制寄存器, // TASSEL0=0x0100,选择辅助时钟ACLK, // TACLR=0x0004,清除定时器A计数器 CCTL0 = CCIE; //设置捕获/比较控制寄存器,CCIE=0x0010,使能捕获比较中断 CCR0 =16384; //设置捕获/比较寄存器,初始值为16384,对于32768Hz的频率,相当于0.5s TACTL |= MC0; //设置定时器A控制寄存器,MC0=0x0010,使计数模式为增计数 _EINT(); //使能中断,这是一个C编译器支持的内部过程。 P3DIR =0XFF; //P3为输出 P4DIR=0XFF;//P4为输出 P5DIR=0XFF;//P5为输出 P1DIR=0x00; // P1口为输入 state=0; P3OUT=0XFF; data1=0; kk=1; while(1) //无限次while循环 { x1=data1; //个位 y1=state;//P1IN;//data1/10; //十位 P4OUT=seg[x1]; //显示个位 P5OUT=seg[y1]; //显示十位 Key(); if( state==0 && data1==4 ) {P3OUT=0X7D; //主路红,小路绿 state=1; data1=0; data2=0;} if(state==1 && data2==7 && kk==1) {P3OUT=0X7B; //主路红,小路黄 state=2; data1=0;} if( state==2 && data1==4 ) {P3OUT=0XD7; //主路绿,小路黄 state=3; data1=0;} if(state==3 && (data1==9 || kk==0)) {P3OUT=0XB7; state=0; data1=0;} //0状态,主路黄,小路红 } } interrupt[TIMERA0_VECTOR] void Timer_A (void) //定时器A的CC0中断处理程序 //TIMERA0_VECTOR=6*2,等于基地址0xFFE0+12=0xFFEC { //P3OUT ^= BIT7; //将P3.7引脚取反,就是使发光二极管闪烁 data1++; if (data1>=91) data1=0; data2++; //产生一个大于7就等于7的计数值 if (data2>=7) data2=7; } void delay(int v) //键盘判断延时子程序 { Page 16 of 21 基于模拟前端信号处理与控制技术的专业论坛、网站 基于模拟前端信号处理与控制技术的专业论坛、网站www.Microcontrol.cn 微控设计网 中国MSP430单片机专业网站Simpo PDF Password Remover Unregistered Version - http://www.simpopdf.comwww.Microcontrol.cn 微控设计网 while(v!=0) v--; } void Key(void) //接P1.0的按键函数 { if(P1IN==0xFE)//如果按键按下 { delay(2666); if(P1IN ==0xFE) //如果按键按下 kk=0; } else kk=1; } 例5. 两路模拟量AD转换 说明:按钮P1.0控制交替显示,P1.1 显示P6.0输入的模拟电压,P1.2 显示P6.1输入的模拟电压。 #include unsigned int Volt0,Volt1=0; //设置电压变量 unsigned long int Volttem0,Volttem1; unsigned data0=0,data1=0,kk0=0,kk1=0,counter=0,keyvaluep1; unsigned int ADresult0,ADresult1; //设置A/D转换结果变量 void Adcvolt (void); void main(void) { unsigned int a[10]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};//数码管不带小数点译码 unsigned int b[10]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10};//数码管带小数点译码 WDTCTL=WDTPW+WDTHOLD; //停看门狗 BCSCTL1&=~XT2OFF; //开启XT2CLK振荡器,ACLK=32768Hz BCSCTL2|=SELM_2+SELS; //主时钟MCLK选择8MHz时钟,子时钟SMCLK=8MHz P1DIR=0x00; //P1口为输入 P1IFG=0x00; //清除P1口的中断标志 P1IES=0xff; //设置P1口中断是下降沿触发 P1IE=0xff; //允许P1口中断 P4DIR=0xFF; //P4口外接数码管 P4OUT=0xFF; //熄灭P4口数码管 P5DIR=0xFF; //P5口外接数码管 P5OUT=0xFF; //熄灭P5口数码管 P3DIR=0XFF; P6SEL|=BIT0+BIT1; //P6.0,P6.1用于模拟输入通道 TACTL=TASSEL0+TACLR; //TIMERA初始化,时钟源为ACLK=32768 CCTL0=CCIE; //TIMERA中断使能 CCR0=2048; //设置比较值,定时1S TACTL|=MC0; //TIMERA增计数模式,同时启动TIMERA Adcvolt (); //AD初始化 _EINT(); while(1) { if(kk0==1) //按键P1.0和P1.1控制下只显示第1路采样值 //总中断使能 Page 17 of 21 基于模拟前端信号处理与控制技术的专业论坛、网站 基于模拟前端信号处理与控制技术的专业论坛、网站www.Microcontrol.cn 微控设计网 中国MSP430单片机专业网站Simpo PDF Password Remover Unregistered Version - http://www.simpopdf.comwww.Microcontrol.cn 微控设计网 { P5OUT=b[Volt0/10]; //P5口显示第1路采样值的十位 P4OUT=a[Volt0]; //P4口显示第1路采样值的个位 P3OUT|=0X0F; P3OUT&=0XFE; } if(kk0==2) //按键P1.0和P1.1控制下只显示第2路采样值 { P5OUT=b[Volt1/10]; //P5口显示第2路采样值的十位 P4OUT=a[Volt1]; //P4口显示第2路采样值的个位 P3OUT|=0X0F; P3OUT&=0XFD; } if(data1==0&&kk0==0) //自动交替显示下,data1为零期间显示第1路采样值 { P5OUT=b[Volt0/10]; //P5口显示第1路采样值的十位 P4OUT=a[Volt0]; //P4口显示第1路采样值的个位 P3OUT|=0X0F; P3OUT&=0XFE; } if(data1==1&&kk0==0) //自动交替显示下,data1为1期间显示第2路采样值 { } } void Adcvolt (void) //进行电压转换时ADC12的初始化 { ADC12CTL0&=~ENC; //ENC为低电平,设置AD控制寄存器 ADC12CTL0|=ADC12ON+MSC; //打开ADC12,可以进行AD转换,参考电压选3.3V ADC12CTL1=CSTARTADD_0+CONSEQ_1+SHP; //单通道单次转换,采样频率源自采样定时器 ADC12MCTL0=INCH_0; //选择模拟输入通道2 ADC12MCTL1=EOS+INCH_1; //选择模拟输入通道2 ADC12IE|=BIT0+BIT1; //AD转换中断允许 ADC12CTL0|=ENC; //转换允许 ADC12CTL0|=ADC12SC; //开始A/D转换 } interrupt[PORT1_VECTOR] void PORT1 (void) { unsigned temp,i; //局部变量temp暂时存放端口的中断标志寄存器中的值 for(i=0;i<=2000;i++); //消除抖动延时 if ((P1IN&0xff)!=0xff)//如果有键按下 { Page 18 of 21 基于模拟前端信号处理与控制技术的专业论坛、网站 P5OUT=b[Volt1/10]; //P5口显示第2路采样值的十位 P4OUT=a[Volt1]; //P4口显示第2路采样值的十位 P3OUT|=0X0F; P3OUT&=0XFD; } 基于模拟前端信号处理与控制技术的专业论坛、网站www.Microcontrol.cn 微控设计网 中国MSP430单片机专业网站Simpo PDF Password Remover Unregistered Version - http://www.simpopdf.comwww.Microcontrol.cn 微控设计网 { } interrupt[TIMERA0_VECTOR] void Timer_A(void) //TIMERA中断子程序 { data0++; if(data0>=30) data1=1; else data1=0; if (data0>=60) data0=0; Page 19 of 21 基于模拟前端信号处理与控制技术的专业论坛、网站 ADresult0=ADC12MEM0; //转换结果寄存器给了变量ADresult0 Volttem0=((long)ADresult0*33)/4095; //计算实际电压值 ADresult1=ADC12MEM1; //转换结果寄存器给了变量ADresult1 Volttem1=((long)ADresult1*33)/4095; //计算实际电压值 Volt0=Volttem0; Volt1=Volttem1; } } if(keyvaluep1==0 ) //P1.0? {kk0=0; P3OUT |= 0XF0; P3OUT &= 0X7F; } if(keyvaluep1==1 ) // {kk0=1; P3OUT |= 0XF0; P3OUT &= 0XBF;} if(keyvaluep1==2) {kk0=2; P3OUT |= 0XF0; P3OUT &= 0XDF;} P1IFG=0X00; //清除中断标志,返回主程序 temp=P1IFG; //temp记录中断标志 switch(temp) { case 1: keyvaluep1=0;break; case 2: keyvaluep1=1;break; case 4: keyvaluep1=2;break; case 8: keyvaluep1=3;break; case 16: keyvaluep1=4;break; case 32: keyvaluep1=5;break; case 64: keyvaluep1=6;break; case 128: keyvaluep1=7;break; default: keyvaluep1=8;break; } interrupt[ADC_VECTOR] void ADC(void) //A/D转换中断子程序 基于模拟前端信号处理与控制技术的专业论坛、网站www.Microcontrol.cn 微控设计网 中国MSP430单片机专业网站Simpo PDF Password Remover Unregistered Version - http://www.simpopdf.comwww.Microcontrol.cn 微控设计网 P3OUT ^= BIT3; ADC12CTL0|=ADC12SC; //每隔一定时间进行一次转换 } 例6. PWM方式控制发光二极管的亮度 说明: 按钮控制PWM输出,使P4.1的发光二极管(数码管的b段),由亮到灭分为8级控制,一个按钮增加亮度,另外一个减少亮度,数码管显示亮度等级,P1.0控制变亮,P1.1控制变暗. #include unsigned int count=0; //定义亮度等级变量 const unsigned char seg[]={0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80}; //显示段码表 void main(void) { WDTCTL=WDTPW+WDTHOLD; //停止看门狗 TBCTL=TBSSEL_2+TBCLR+MC0; //定时器B的时钟是SMCLK(800K),16位计数,只用CCR0,增计数模式,允许中断 TBCCTL1=OUTMOD_3; //PWM输出模式:置位/复位 TBCCR0=8000; //PWM中断周期 TBCCR1=1000; //PWM的低电平时间 P4DIR=0X02; //P4.1输出,P4.1受TBCCR1控制 P4SEL=0X02; //P4.1作为定时器B的PWM输出 P1DIR=0xFC; //P1.0和P1.1输入 P1IE=0x03; //允许中断P1.0和P1.1 P1IES=0xfc; //上升沿中断 P5DIR=0XFF; //P5口为输出 P5OUT=0xf9; //输出等级为1 _EINT(); //开总中断 while(1); } interrupt [PORT1_VECTOR] void PORT1_INTERRUPT(void) { unsigned int i; //定义延时常数 for(i=8000;i>0;i--); //延时,消抖 if (P1IFG&BIT0) { { TBCCR1=TBCCR1+1000; count=count+1; //亮度等级递增 P5OUT=seg[count]; //显示亮度等级1~8 //如果P1.0的按键确实是按下了一次,则低电平时间增长一次,P4.0的发光亮度增强一次 Page 20 of 21 基于模拟前端信号处理与控制技术的专业论坛、网站 else if(TBCCR1>=8000) //如果已达到最亮,则复位,重新开始 { TBCCR1=1000; //低电平时间不变 count=0; //亮度等级不变 P5OUT=seg[count]; //显示亮度等级1~8 } 基于模拟前端信号处理与控制技术的专业论坛、网站

MSP430_C语言例程注释详

www.Microcontrol.cn微控设计网中国MSP430单片机专业网站SimpoPDFPasswordRemoverUnregisteredVersion-http://www.simpopdf.comwww.Microcontrol.cn微控设计网unsignedcharseg[10]={0xC0,0xF9,0xA4,0xB0,0x99,0x9
推荐度:
点击下载文档文档为doc格式
8pss5517te4mn0g1lufn
领取福利

微信扫码领取福利

微信扫码分享