026h P1SEL 025h P1IE: 中断使能 024h P1IES:中断响应上升沿变化(0),响应下降沿变化(1) 023h P1IFG:中断发生就置位为1,中断执行后要手动清除 022h P1DIR 021h P1OUT 020h P1IN read only
收藏0 举报
#include <msp430x14x.h> typedef unsigned int uint; uint i = 0,j = 0,dir = 0; uint flag = 0,speed = 0; //flag--灯光流动方式,speed--灯光流动速度 /****************主函数****************/ void main(void) { /*给IO一个初始的状态*/ P1DIR = 0XFF;P1OUT = 0XFF; P2DIR = 0XFF;P2OUT = 0XFF; P3DIR = 0XFF;P3OUT = 0XFF; P4DIR = 0XFF;P4OUT = 0XFF; P5DIR = 0XFF;P5OUT = 0XFF; P6DIR = 0XFF;P6OUT = 0XFF; WDTCTL = WDTPW + WDTHOLD; //关闭看门狗 P6DIR |= BIT2;P6OUT |= BIT2; //关闭电平转换 P5OUT &= ~BIT7; CCTL0 = CCIE; //使能CCR0中断 CCR0 = 50000; TACTL = TASSEL_2 + ID_3 + MC_1; //定时器A的时钟源选择SMCLK,增计数模式 P2DIR = 0xff; //设置P2口方向为输出 P2OUT = 0xff; _EINT(); //使能全局中断 LPM0; //CPU进入LPM0模式 } /******************************************* 函数名称:Timer_A 功 能:定时器A的中断服务函数,在这里通过标志 控制流水灯的流动方向和流动速度 参 数:无 返回值 :无 ********************************************/ #pragma vector = TIMERA0_VECTOR __interrupt void Timer_A (void) { if(flag == 0) { P2OUT = ~(0x80>>(i++)); //灯的点亮顺序D8 -> D1 } else if(flag == 1) { P2OUT = ~(0x01<<(i++)); //灯的点亮顺序D1 -> D8 } else { if(dir) //灯的点亮顺序D8->D1,D1->D8,循环绕圈 { P2OUT = ~(0x80>>(i++)); } else { P2OUT = ~(0x01<<(i++)); } } if(i == 8) { i = 0; dir = ~dir; } j++; if(j == 40) //循环5次就改变flag改变流动方向 { i = 0; j = 0; flag++; if(flag == 4) flag = 0; switch(speed) { case 0: TACTL &=~ (ID0 + ID1); TACTL |= ID_3; break; case 1: TACTL &=~ (ID0 + ID1); TACTL |= ID_2; break; case 2: TACTL &=~ (ID0 + ID1); TACTL |= ID_1; break; case 3: TACTL &=~ (ID0 + ID1); TACTL |= ID_0; break; default: break; } if(flag != 3) speed++; if(speed == 4) speed = 0; } }
026h P1SEL 025h P1IE: 中断使能 024h P1IES:中断响应上升沿变化(0),响应下降沿变化(1) ......
本版积分规则 发表回复 回帖并转播 回帖后跳转到最后一页
人才类勋章
发帖类勋章
等级类勋章
时间类勋章
37
306
2
扫码关注 21ic 官方微信
扫码关注嵌入式微处理器
扫码关注电源系统设计
扫码关注21ic项目外包
扫码浏览21ic手机版
本站介绍 | 申请友情链接 | 欢迎投稿 | 隐私声明 | 广告业务 | 网站地图 | 联系我们 | 诚聘英才
京公网安备 11010802024343号