msp430模块程序

2019-08-03 12:19

基础时钟模块应用举例

例1 设MCLK=XT2,SMCLK=DCOCLK,将MCLK 由5.4 输出程序如下: #include void main(void) {

unsigned int i;

WDTCTL = WDTPW + WDTHOLD; //停止看门狗 P5DIR |= 0X10; P5SEL |= 0X10;

BCSCTL1 &= ~XT2OFF; do{

IFG1 &= ~OFIFG; for(i = 0xFF;i>0;i--); }

while((IFG1 & OFIFG) != 0); BCSCTL2 |= SELM1; for(;;); }

例2 设ACLK=MCLK=LFXT1=LF #include void main(void) {

unsigned int i;

WDTCTL = WDTPW + WDTHOLD; //停止看门狗 P5DIR |= 0X10; P5SEL |= 0X10; BCSCTL1 &= XTS; do{

IFG1 &= ~OFIFG; for(i = 0xFF;i>0;i--); }

while((IFG1 & OFIFG) != 0); BCSCTL2 |= SELM1+SELM0; for(;;); }

例3 改变BCSCTL1 中Rsel0,Rsel1,Rsel2 的值测量DCO 频率(默认情况MCLK、 SMCLK 均为DCO 时钟,P1.4 输出ACLK,P2.0 输出SMCLK,P5.4 输出MCLK) #include void main(void) {

WDTCTL=WDTPW+WDTHOLD;//看门狗停止P1DIR=0x10;//p1.4 输出 P1SEL=0x10;//P1.4=SMCLk P2DIR=0x01;//p2.0 输出 P2SEL=0x01;//P2.0=ACLk

P5DIR=0x10;//p5.4 输出 P5SEL=0x10;//P5.4=SMCLk

BCSCTL1 =0x00 ;//xt2off,xts,diva.1,diva.0xt5v,,res3 //BCSCTL1 =0x01; //BCSCTL1 =0x02; //BCSCTL1 =0x03; //BCSCTL1 =0x04; //BCSCTL1 =0x05; //BCSCTL1 =0x06; //BCSCTL2=0x07; for(;;) {__NOP();

//_BIS_SR(CPUOFF);// } }

举例1 使用软件定时周期性取反P2.1 #include void main(void) {

WDTCTl = WDTPW + WDTHOLD; P2DIR |= 0x02; for(;;) {

unsigned int i; i = 50000; do (i--); while (i != 0); } }

举例2 单片机在P3.1 产生方波,并把P3.1 与P1.7 相连,P1.7 接收中断,在中断服 务程序中让P3.3 产生方波。 #include void main(void) {

WDTCTL=WDTPW+WDTHOLD; P3OUT =0x00;//P3 引脚低电平 P3DIR |=0xff;//P3 方向输出 P1OUT=0x00;

P1IES |=0x00;//上升沿触发

P1IFG= 0x00; //因为P1IES 设置会使中断标志置位,故清零。 P1IE |=0xff;// P1 模块中断允许 _EINT();//系统中断允许 int i; for(;;)

{

for(i=1;i<=32000;i++) _NOP();

P3OUT ^=0x02;//P3.1 每隔8000 个机器指令周期产生一次跳变 }}

#pragma vector = PORT1_VECTOR __interrupt void P1_Interrupt(void){ if (P1IFG==0x80) { P1IFG=0x00; P3OUT ^= 0x08; } else P1IFG=0x00; }

#include void main(void) {

WDTCTL = WDT_MDLY_32; IE1 |= WDTIE; P1DIR |=0x01; _EINT(); for(;;) {

_BIS_SR(CPUOff); _NOP(); } }

#pragma vector = WDT_VECTOR __interrupt void watchdog_timer(void) {

P1OUT ^= 0x01; }

例2: 看门狗模式

#include void main(void) {

P3DIR=0XFF; //P3 输出

WDTCTL=WDT_MRST_32; //WDTPW+WDTCNTCL 看门狗32 毫秒 int i;

for(i=0;i<5000;i++) _NOP();

P3OUT ^=0X02; // P3.1 灯亮或灭 for(;;) {

WDTCTL =WDT_MRST_32; //喂狗,看门狗计数器清零即 //WDTPW+WDTCNTCL;

for(i=0;i<=5000;i++) _NOP();

P3OUT ^=0x0c; // P3.2 p3.3 灯亮或灭 } }

例1:

//定时开关P3,即P3 输出取反;定时时间到,进入中断 //ACLK=32768HZ,MCLK=SMCLK=DCOCLK=1.048576M //周期性P3 取反,频率为1.048576M/65536/2=8Hz #include void main(void) {

WDTCTL=WDTPW+WDTHOLD;

TACTL =TASSEL1+TACLR+MC1+TAIE;//SMCL,CLEAR TAR, //TIMER_A 连续计数描 述//

//TA 定时器溢出中断允许 P3DIR=0xFF;

//TACTL |=MC1;//TIMER_A 连续计数描述 _EINT(); for(;;) {

_BIS_SR(CPUOFF); _NOP(); } }

#pragma vector=TIMERA1_VECTOR __interrupt void TIMER_A(void) {

switch(TAIV) {

case 2: break; case 4: break;

case 10: P3OUT^=0xFF; break; } }

例2:

//ACLK=32768HZ,MCLK=SMCLK=DCOCLK=1.048576M //周期性P3.1 取反,频率为1.048576M/65535(TA 中断响应)

//周期性P3.3 取反,频率为20000(捕获中断响应)可以看出:P3.1 闪亮的周期约是P3.3 的3 倍

#include void main(void) {

WDTCTL=WDTPW+WDTHOLD;

TACTL =TASSEL1+ID0+ID1+TACLR+TAIE;//MCLK,8 分频,CLEAR TAR,//TA 定时器溢

出中断允许

CCTL0=CCIE; // CCR0=20000;

TACTL |=MC1;//TIMER_A 增减计数描述 P3DIR=0xFF; P3OUT=0xFF; _EINT(); for(;;) {

_BIS_SR(CPUOFF); _NOP(); } }

#pragma vector=TIMERA1_VECTOR //定时器中断__interrupt void TIMER_A(void) {

switch(TAIV) {

case 2: break; case 4: break;

case 10: P3OUT^=0x02; break; } }

#pragma vector=TIMERA0_VECTOR //当TAR=CCR0 产生中断 __interrupt void TIMER_cc(void) {

P3OUT^=0x08; CCR0+=20000; }

举例: 例1:

//软循环产生方波,从p3.1 输出(闪) //CCI0、CCI1 设置为捕获模式,

//P3.1 与P1.1 和P1.2(即CCI0A、CCI1A)相连,当P3.1 产生沿变化,将产生捕获中 断

//CCI0 中断使得P3.3 闪,CCI1 中断使得P3.2 闪j,k 计算前后两次捕获的时间间隔(结 果K= j/2,why) int i,j,k;

#include void main(void) {

WDTCTL=WDTPW+WDTHOLD;

TACTL =TASSEL1+ID0+ID1+MC1+TACLR;//+TAIE;//MCLK,8 分频,CLEAR TAR,连续


msp430模块程序.doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:基因工程原理 - 王莹 - 基因工程题库

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: