以下内容基于MSP430F169。
MSP430 IO口操作
MSP430的IO口操作比较简单,只有DIR,OUT,IN,SEL几个寄存器。每一组IO口都有各自对应的寄存器,比如P1DIR,P1OUT,P1IN,P1SEL控制P1.0~P1.7八个IO口。
输入/输出控制寄存器PxDIR
Bit = 0:对应的IO口设置为输入
Bit = 1:对应的IO口设置为输出
输入数据寄存器PxIN(只读)
Bit = 0:对应的IO口输入为低电平
Bit = 1:对应的IO口输入为高电平
输出数据寄存器PxOUT
Bit = 0:对应的IO口输出设置为低电平
Bit = 1:对应的IO口输出设置为高电平
功能选择寄存器PxSEL
Bit = 0:对应的IO口配置为通用IO功能
Bit = 1:对应的IO口配置为外围模块功能
MSP430 外部中断
MSP430只有P1和P2支持外部中断功能
中断使能寄存器P1IE和P2IE
Bit = 0:禁用对应的IO口中断
Bit = 1:使能对应的IO口中断
中断标志位寄存器P1IFG和P2IFG
Bit = 0:没有中断发生
Bit = 1:有中断发生
全局中断以及对应的IO口中断(PxIE)打开该寄存器才生效。
也可以通过软件对该寄存器写“1”来产生中断。
通过对该寄存器软件写“0”来清除标志位,必须清零,否则会重复进入对应中断。
中断触发边沿设置P1IES和P2IES
Bit = 0:上升沿触发中断
Bit = 1:下降沿触发中断
设置PxIES寄存器可能会导致对应的中断标志位置一
示例代码
P2.7接LED灯,P1.6接按键
P2.7设置为输出
P2DIR |= BIT7;
P2OUT &= ~BIT7;
P1.6设置输入,下降沿触发中断
P1DIR &= ~BIT6;
P1IE |= BIT6;
P1IES |= BIT6;
P1IFG &= ~(BIT6);
中断处理函数,在中断里翻转P27:
#pragma vector = PORT1_VECTOR
__interrupt void PORT_1(void)
{
static unsigned char flg = 0;
if (flg == 0) {
P2OUT |= BIT7;
flg = 1;
} else {
P2OUT &= ~(BIT7);
flg = 0;
}
P1IFG &= ~(BIT6);
}
关键字:MSP430系列 IO口操作 外部中断
引用地址:
MSP430系列教程(二) IO口操作及外部中断
推荐阅读最新更新时间:2024-10-20 18:36
MSP430系列教程(二) IO口操作及外部中断
以下内容基于MSP430F169。 MSP430 IO口操作 MSP430的IO口操作比较简单,只有DIR,OUT,IN,SEL几个寄存器。每一组IO口都有各自对应的寄存器,比如P1DIR,P1OUT,P1IN,P1SEL控制P1.0~P1.7八个IO口。 输入/输出控制寄存器PxDIR Bit = 0:对应的IO口设置为输入 Bit = 1:对应的IO口设置为输出 输入数据寄存器PxIN(只读) Bit = 0:对应的IO口输入为低电平 Bit = 1:对应的IO口输入为高电平 输出数据寄存器PxOUT Bit = 0:对应的IO口输出设置为低电平 Bit = 1:对应的IO口输出设置为高电平 功能选择寄存器
[单片机]
msp430f5529学习笔记(3)一文学会GPIO口操作
什么是GPIO口 GPIO口意思为通用输入/输出端口,通俗地说,就是一些引脚,可以通过它们输出高低电平或者通过它们读入引脚的状态-是高电平或是低电平。 如何操作GPIO口 寄存器操作 430f5529通过宏定义的方式简化了寄存器的名称,让他们可以轻易的读懂。 #define P1IN (PAIN_L) /*P1输入*/ #define P1OUT (PAOUT_L) /*P1输出*/ #define P1DIR (PADIR_L) /*P1模式*/ #define P1REN (PAREN_L) /*P1中断使能*/ #define P1DS (PADS_L)
[单片机]
MSP430单片机控制IO口操作-LED灯闪烁
//******************************************************************************* // D13x Demo - 在上一节基础上改变系统时钟,观察LED灯的闪烁频率 // // 描述:通过改变系统时钟,来改变闪烁频率;通过 P1 异或 来取反 P1.5;软件循环延时 // ACLK= n/a, MCLK= SMCLK= default DCO ~ 800k // // MSP430F13x // ----------------- // /|| XIN|- // | | | // --|RST XOUT|- // | | // | P1.5|-- LE
[单片机]
MSP430单片机控制IO口操作-LED灯闪烁
//******************************************************************************* // D13x Demo - 在上一节基础上改变系统时钟,观察LED灯的闪烁频率 // // 描述:通过改变系统时钟,来改变闪烁频率;通过 P1 异或 来取反 P1.5;软件循环延时 // ACLK= n/a, MCLK= SMCLK= default DCO ~ 800k // // MSP430F13x // ----------------- // /|\| XIN|- // | | | // --|RST XOUT|- // | | // | P1.5|-- L
[单片机]
STM32-GPIO口设为外部中断时,中断函数名称
以A口为例,A0~A4中断函数名称为: void EXTI0_IRQHandler(void ); void EXTI1_IRQHandler(void ); void EXTI2_IRQHandler(void ); void EXTI3_IRQHandler(void ); A5~A9: void EXTI9_5_IRQHandler(void ); A10~A15: void EXTI15_10_IRQHandler(void );
[单片机]
51单片机STC89C52点亮一个LED(IO口的位操作)
程序源码 /*-----------------------包含头文件区域-------------------------*/ #include reg52.h //单片机头文件 /*-----------------------端口/引脚定义区域----------------------*/ sbit LED=P2^0; //位定义P2.0引脚名为LED /*-----------------------主函数区域-----------------------------*/ void main() { LED=0; //LED端口输出低电平,即点亮LED, while(1); //死循
[单片机]
51单片机STC89C52点亮多个LED(IO口的字节操作)
程序源码 /*-----------------------包含头文件区域-------------------------*/ #include reg52.h //单片机头文件 /*-----------------------主函数区域-----------------------------*/ void main() { P2=0x0F; //P2端口高四位输出低电平,低四位输出高电平,即D5~D8亮,D1~D4灭 while(1); //死循环,主程序停留在此不再往下执行 } 运行结果
[单片机]
2440的外部中断操作过程
要想正确地执行2440的外部中断,一般需要完成两个部分内容:中断初始化和中断处理函数。 在具体执行中断之前,要初始化好要用的中断。2440的外部中断引脚EINT与通用IO引脚F和G复用,要想使用中断功能,就要把相应的引脚配置成中断模式,如我们想把端口F0设置成外部中断,而其他引脚功能不变,则GPFCON=(GPFCON & ~0x3) | 0x2。配置完引脚后,还需要配置具体的中断功能。我们要打开某一中断的屏蔽,这样才能响应该中断,相对应的寄存器为INTMSK;还要设置外部中断的触发方式,如低电平、高电平、上升沿、下降沿等,相对应的寄存器为EXTINTn。另外由于EINT4到EINT7共用一个中断向量,EINT8到EINT
[单片机]