微机原理编程_第1页
微机原理编程_第2页
微机原理编程_第3页
微机原理编程_第4页
微机原理编程_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

〃**m+流水|_6、L7、L8***********//#include<msp430.h>voidmain(void){volatileunsignedinti;unsignedintj=BIT4,count=0;WDTCTL=WDTPW+WDTHOLD;P4DIR|=BIT4+BIT5+BIT6; 〃设置P4.4、P4.5、P46引脚方向为输出whileCL){P4OUT二j;//L8亮for(i=0;i<50000;i++);j«=l; //j=BIT6;count++;if(count==3){j=BIT4;count=0;)}}//********中断机制,按下SW4,翻转L8********V/#include<msp430.h>voidmain(voidXWDTCTL=WDTPW+WDTHOLD;P4DIR&二〜BIT2;P4DIR|二BIT6;P4IES|二BIT2; 〃下降沿中断触发信号P4IE二BIT2; 〃使能P4.2的中断功能_enable_interruptO;//GIE=1P4IFG&=~BIT2;〃清除P4.2中断标志位while(l)(} 〃等待中断请求信号的到来}//*******中月艮^■,旱***********#pragmavector二PORT4_VECTOR_interruptvoidport4_ISR(void)(P4OUTA二BIT6; 〃翻转L8状态P4IFG&=~BIT2;}…采用中断方式编程实现:手动流水灯。具体要求:初始状态L6亮,当第一次按下一次SW4,L6灭,L7亮;…〃//******第二次按下SW4,L7灭,L8亮;第三次按下SW4,L8灭,L6亮;以后重复这一过程。……//#include<msp430.h>unsignedintj=BIT4,count=0;voidmain(void)(WDTCTL=WDTPW+WDTHOLD;P4DIR&二〜BIT2;P4DIR|=BIT4+BIT5+BIT6;P4OUT=j;P4IES|=BIT2; 〃下降沿中断触发信号P4IE|=BIT2; 〃使能P4.2的中断功能_enable_interruptO;//GIE=1P4IFG&=~BIT2; 〃清除P4.2中断标志位while(l)(} 〃等待中断请求信号的到来}//*******中月艮^■,旱**********^pragmavector=PORT4_VECTOR_interruptvoidport4_ISR(void)(j«=l;count++;if(count==3)(j=BIT4;count=0;}P4OUT=j;P4IFG&=~BIT2;}//****♦**♦*按下SW4,点亮L6;按下SW5,熄灭L6********//#include<msp430.h>〃*******延时函数durationms***//voiddelay_ms(unsignedintduration)(unsignedinti;for(i=0;i<5000*duration:!++);}voidmain(voidXWDTCTL=WDTPW+WDTHOLD;P4DIR&=〜(BIT2+BIT3);〃设置P4.2.P4.3引脚方向为输入P4DIR|二BIT6;//设置P4.6引卿方向为输出while(l)(if((P4IN&BIT2)==0)(//SW4技下?delay_ms(20);//延时20msif((P4IN&BIT2)==0);(//SW4技下while((P4IN&BIT2)==0);//等待SW4释放delay_ms(20);//延时20msif((P4IN&BIT2)!二0){P4OUTA二BIT6;//翻转L8状态}}}if((P4IN&BIT3)=0){ //SW5拔下?delay_ms(20); 〃延时20msif((P4IN&BIT3)==0){ //SW4按下while((P4IN&BIT3)=0);〃等待SW4释放delay_ms(20); ///延时2emsif((P4IN&BIT3)!二0){P4OUT&=~BIT4; 〃熄灭L6}}//*******循环往复流水LI-L8***//#include<msp430f6638.h>voidmain(voidXvolatileunsignedinti;unsignedintj=BIT4,count=0;WDTCTL=WDTPW+WDTHOLD;P1DIRI=BIT4+BIT5+BIT6; 〃设置Pl端口根引脚方向为输出whileCL){P4OUT=j; //L8亮for(i=0;i<50000;i++);j«=l; //j=BIT6;count++;if(count==3)(j=BIT4;count=0;}}}//****在如下电路图中,采用中断方式编程实现:手动流水灯。具体要求:初始状L6亮,当第一次按下一次SW4,L6灭,L7亮;“//〃**第二次按下SW4,L7灭L8亮;第三次按下SW4,L8灭,L6亮;以后重复这一过程”•//#include<msp430f6638.h>unsignedintj=BIT4,count=0;voidmain(void)(WDTCTL=WDTPW+WDTHOLD;P4DIR&二〜BIT2;P4DIR|=BIT4+BIT5+BIT6;P4OUT=j;P4IES|二BIT2; //下降沿中断触发信号P4IE|=BIT2; 〃使能P4.2的中断功能.enableJnterruptO;//GIE=1.P4IFG&=~BIT2;〃清除P4.2中断标志位while(l)(} 〃等待中断请求信号的到来}//m中野f月艮#pragmavector=PORT4_VECTOR-interruptvoidport4_ISR(void)(i«=i;count++;if(count==3)(j=BIT4;count=0;}P4OUT=j;P4IFG&=~BIT2;}//******利用看门狗定时器,流水L6、L7、L8:要求流水间隔为ls>*****//#include<msp430.h>volatileunsignedinti=BIT4,count=0;voidmain(void)WDTCTL=WDTPW+WDTSSEL0+WDTTMSEL+WDTCNTCL+WDTIS2;P4DIR|=BIT4+BIT5+BIT6;P4OUT=i;SFRIE1|=WDTIE;_BIS_SR(LPM3_bits+GIE);}#pragmavector=WDT_VECTOR-interruptvoidWDT_timer(void)(count++;i<<=l;if(count==3)(i=0xl0;count=0;}P4OUT=i;count++;i<<=l;if(count==3)(i=BIT4;count=0;}〃……利用硬件定时器,流水|_6、L7、L8,要求流水间隔为Is******//#include<msp430.h>voidmain(voidXWDTCTL=WDTPW+WDTHOLD;P4DIR|=BIT4+BIT5+BIT6;P4OUT二BIT4;TAOCTL=TASSEL_1+MC_3+TACLR; //ACLK时钟源,增/减数模式,清除TAORTA0CCR0=16384; 〃定时Is,//t=l/2T=0.05=2°/32768*TA0,TAO=16384TA0CCTL0=CCIE; 〃使能TAOCCRO中断_BIS_SR(GIE+LPM3_bits);}TAOCCRO的中断服务程序******^pragmavector=TIMERO_AO_VECTOR //TAOCCRO专用中断矢量名_interruptvoidtaO_ISR(void)(P4OUT«=1;if(P4OUT=BIT7)P4OUT=BIT4;}//*********利用TAO定时器,最终使Pl.2引脚输出周期为15.625ms,*****////********占空比为75%的PWM波形,使P1.3引脚输出25%占空比的PWM波形**〃#include<msp430.h>voidmain(void)(WDTCTL=WDTPW+WDTHOLD;P1DIR|=BIT2+BIT3; //Pl.2,Pl.3输出

P1SELI=BIT2+BIT3; //Pl.2为定时器输出模块TA1.P1.3为定时器输出模块TA2//TAO主计数器时钟选择ACLK,增计数模式,清除//TAO主计数器时钟选择ACLK,增计数模式,清除TAOR〃设置PWM周期〃捕获/比较控制寄存器设置输出模式7〃占空比384/512=0.75〃捕获/比较控制寄存器设置输出模式7〃占空比128/512-0.25〃进入低功耗模式3TA0CCR0=512-l;TAOCCTL1=OUTMOD_7;TAOCCR1=384;TAOCCTL2=OUTMOD_7;TA0CCR2=128;,BIS_SR(LPM3_bits);}//******采用USCI_A1模块的UART在ISR中将接收的字符原样发送出去,********************////******!作于超低功耗LPM3模式下,时钟频率选择为ACLK二32768Hz,波特率为4800********//#include<msp430.h>voidmain(void)〃复位USCIAl状态机//CLK=ACLK〃复位USCIAl状态机//CLK=ACLK=32kHz//32kHz/4800=6.83UCA1CTL1|=UCSWRST;UCA1CTL1|=UCSSEL_1;UCA1BR0=0x06;UCA1BR1=0x00;UCA1MCTL=UCBRS7+UCBRF0;//UCBRS=0.83*8=6.64=7P8SEL|=BIT2+BIT3;P8DIR|=BIT2+BIT3;UCA1CTL1&二〜UCSWRST; 〃初始化复位USCI_Al状态机UCA1IE|=UCRXIE;〃使能USCIA1接收中断_bis_SR_register(LPM3_bits+GIE);〃进入LPM3,使能全局中断}#pragmavector=USCl_A0_VECTOR_interruptvoidUSCI_AO_ISR(void)switch(_even_in_range(UCA0IV,4))case0:break;//Vector0-无中断case2: //Vector2-RXIFGwhile(!(UCAOIFG&UCTXIFG));//USCI_Al发送缓冲是否准备就绪?UCAODCBUF二UCA0RXBUF; 〃将接收到的字符传递给发送缓冲//Vector4-TXIFGbreak:case4://Vector4-TXIFG}}〃……采用USCLAl模块的UART在ISR中将接收的字符原样发送出去,工作于超低功耗LPM3模式下,时钟频率选择为ACLK=32768Hz,波特率为9600。#include<msp430f6638.h>voidmain(void)

WDTCTL=WDTPW+WDTHOLD;UCA1CTL1|二WDTCTL=WDTPW+WDTHOLD;UCA1CTL1|二UCSWRST;UCA1CTL1|二UCSSEL.l;UCA1BRO=0x03;UCA1BRI=0x00;UCA1MCTL=UCBRS3+UCBRF0;P8SEL|=BIT2+BIT3;UCA1CTL1&二-UCSWRST;UCA1IE|=UCRXIE;_bis_SR_register(LPM3_bits+GIE);}^pragmavector=USCI_A1_VECTOR_interruptvoidUSCI_Al_ISR(void)(switch(_even_in_range(UCAHV,4))(case0:break;case2:while(!(UCA1IFG&UCTXIFG));UCA1TKBUF=UCA1RXBUF;break:case4:break;default:break;//复位USCI_A1状态机//CLK=ACLK=32kHz//32kHz/9600=3.41//UCBRS=round[(N-INT(N))x8]=3//初始化复位USCI_A1状态机//使能USCI_A1接收中断//进入LPM3,使能全局中断//Vector0-无中断//Vector2-RXIFG//USCLA1发送缓冲是否准备就绪?//将接收到的字符传递给发送缓冲//Vector4-TXIFG//-****将看门狗定时器工作在定时器模式,利用ACLK作为参考时钟,在P4.4端口产生一个周期为2s的方波。#include<msp430f6638.h>voidmain(void)(WDTCTL=WDTPW+WDTSSEL0+WDTTMSEL+WDTCNTCL+WDTIS2;//WDTCTL=WDT.ADLY_1000;〃选择ACLK时钟源,定时工作模式,定时Is。P4DIR|二BIT4;P4OUT|二BIT4;SFRIE1|=WDTIE;_BIS_SR(LPM3_bits+GIE);}//**********看门狗定时工作模式中断服务子程序#pragmavector=WDT_VECTORinterruptvoidWDTtimer(void)(P4OUTA二BIT4://******利用TAO定时器,使其工作在增计数模式,采用SMCLK作为其计数参考时钟,并启用TA0CCR0计数中断’在P44端口产生一个10Hz的方波。#include<msp430f6638.h>voidmain(void)WDTCTL=WDTPW+WDTHOLD;//关闭看门狗P4DIR|=BIT4;TAOCTL=TASSEL1+MC0+TACLR: //SMCLK,增计数模式,清除TAR计数器TAOCCTLO=CCIE;//CCRO中断使能TAOCCRO=50000; //t=l/2T=0.05=2°/32768*TA0,TAO=16384_BIS_SR(LPMO_bits+GIE);}//““****TA0中断服务程序#pragmavector=TlMERO_AO_VECTOR-interruptvoidTimer_A(void)(P4OUTBIT4; //取反P4.4}利用TAO定时器,使其工作在连续计数模式,采用SMCLK作为其计数参考时钟,并启用CCIFG中断,产生固定时间间隔,并通过P4.5输出。#include<msp430f6638.h>#definetimerl50000voidmain(void)(WDTCTL=WDTPW+WDTHOLD;//关闭看门狗P4DIR|=BIT5;TAOCCTLO=CCIE;//CCRO中断使能TAOCCRO=50000; //t=l/2T=0.05=2°/32768*TA0,TA0=16384TAOCTL二TASSEL1+MC1+TACLR: //SMCLK,连续计数模式清除TAR计数器_bis_SR.register(LPMO_bits+GIE);}#pragmavector=TlMER0_A0_VECTOR-interruptvoidTimer_Al(void)(TA0CCR0+=timerl;P4OUT△=BIT5;}利用TAO定时器,使其工作在增/减计数模式,采用SMCLK作为其计数参考时钟,并启用TAOCCRO计数中断,在TA0中断服务程序反转一次P4.4端口状态(从P4.4输出一个方波)。#include<msp430f6638.h>voidmain(void)(WDTCTL=WDTPW+WDTHOLD;//关闭看门狗P4DIR|=BIT4;TAOCCTLO=CCIE;//CCRO中断使能TAOCCRO=50000;TAOCTL二TASSEL1+MC1+MC0+TACLR;//SMCLK,增/减计数模式,清除TAR计数器_bis_SR_register(LPMO_bits+GIE);}〃”…TAO中断服务程序#pragmavector=TIMERO_AO_VECTOR_interruptvoidTimer_A(void)(P4OUTBIT4; //取反P4.4}//”…设ACLK=32768Hz,要求采用定时器A,从P51输出一个方波。#include<msp430f6638.h>voidmain(void)(WDTCTL=WDTPW+WDTHOLD;TAOCTL二TASSELO+MCO+TACLR;TAOCCTLO二CCIE;TA0CCR0=1000;P5DIR|二BIT1;,BIS_SR(LPM3_bits+GIE);}#pragmavector=TIMERO_AO_VECTOR_interruptvoidtimerA(void)(P5OUTA二BIT1;}//”…设ACLK=32768Hz,要求采用看门狗,从P5.1输出一个方波。#include<msp430f6638.h>voidmain(void)(WDTCTL=WDTPW+WDTSSEL0+WDTTMSEL+WDTCNTCL+WDTIS2;//WDTCTL二WDTADLY1000;SFRIE1|=WDTIE;P5DIR|=BIT1;,BIS_SR(LPM3_bits+GIE);}#pragmavector=WDT_VECTOR_interruptvoidWDT_timer(void)(P5OUTA二BIT1;}//”…设MCLK=SMCLK=800kH乙利用定时器A的连续计数模式,从P51产生一个频率约为16Hz的方波。#include<msp430f6638.h>#definetO25000voidmain(void)WDTCTL=WDTPW+WDTHOLD;TAOCTL二TASSEL1+MC1+TACLR;TAOCCTLO二CCIE;TA0CCR0=25000;P5DIR|二BIT1;,BIS_SR(LPMO_bits+GIE);}#pragmavector=TIMERO_AO_VECTOR_interruptvoidtimerA(void)(P5OUTA二BIT1;TA0CCR0+=tO;}// 利用按键改变LED的亮灭按键对应的引脚配置为中断方式。#include<msp430f6638.h>voidmain(void)(WDTCTL=WDTPW|WDTHOLD;//关闭看门狗P4DIR|=BIT3; //选择P4.3为输出P2DIR&=〜BIT6; //选择P2.6为输入P2IE|=BIT6; //使能P2.6中断P2IES|二BIT6; //

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论