1.数字IO共有6组,其中P1,P2可以设置外部中断。
2.通用寄存器:
PxIN,PxOUT,PxDIR,PxSEL
上电默认PxDIR为0,即默认为输入。PxSEL若为1,则表示数字IO用作外设功能,这时候P1或P2的中断功能丢失。
3.P1的寄存器:每个地址对应8位寄存器,对应IO的8个PIN.- 026h P1SEL
- 025h P1IE: 中断使能
- 024h P1IES:中断响应上升沿变化(0),响应下降沿变化(1)
- 023h P1IFG:中断发生就置位为1,中断执行后要手动清除
- 022h P1DIR
- 021h P1OUT
- 020h P1IN read only
复制代码
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
5.流水灯程序:实现流水灯以三种流动方式和四种流动速度的不同组合而进行点亮"流动"
- #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;
- }
- }
复制代码这是什么
一周热门 更多>