概述
首先我们要知道哪些io口可以实现中断。(如上图所示)
一、基本
那么什么是中断呢。我们可以认为是放下目前要做的事A,去做另外的事B,做完B后再回来继续做A。比如说我们要写一个程序,中途渴了要去喝水,我们喝完水后再继续写程序。停止写程序就相当于中断,而喝水就相当于是中断里面做的事情。中断里面做的事情就是中断函数。,
把它类比到函数中,写程序就相当于main函数,那么去喝水就相当于是中断函数。
430中的IO中的一部分、定时器、ADC等都具有中断功能。
二、各种中断
1 IO口的中断
#include <msp430.h>
int main(){
//关闭看门狗,必须要这一步
WDTCTL = WDTPW | WDTHOLD;
P2DIR &=~BIT3 ; //开启2.3口中断 也就是设置2.3为输入io口
P2IES |= BIT3 ; //设定2.3口为下降沿触发,如果是上升沿触发则P2IE &=~BIT3
P2IFG &=~BIT3 ; //清除中断标志
P2IE |= BIT3 ; //P2.3中断使能
_EINT(); //开启总中断
}
#pragma vector = PORT2_VECTOR //中断服务开启,是哪个端口就填哪个具体请查看头文件
//中断函数固定写法:
__interrupt void port1_zhongduan (void){
//如果是2.3口产生了中断
if(P2IFG&BIT3){
P2IFG &=~BIT3; //固定写法,每次中断产生都要清除中断标志位
/*然后写中断产生后,你想要执行的代码,如:让2.4io口置1*/
P2DIR|=BIT4; //配置2.4为输出口
P2OUT|=BIT4; //让2.4输出1
}
}
2 定时器的中断
#include <msp430.h>
//用TA0里面的CCR2来控制CCR1;
/*
* main.c
*/
unsigned int t;
int main(void) {
WDTCTL = WDTPW | WDTHOLD; // Stop watchdog timer
UCSCTL5=DIVS__2 ; //现在SMCLK为500 000HZ
t=600;
P4DIR|=BIT2;
P4OUT|=BIT2;
P4DIR|=BIT3;
P4OUT|=BIT3; //配置IO
TA0CTL=TASSEL__SMCLK+MC__UP+ID__8+TACLR;
//配置定时器,时钟选择SMCLK,UP模式,八分频
TA0CCR0=10000; //CCR0设置为10000,也就是说,当以500000/8的周期计数记//到10000的时候,重新计数
TA0CCR1=t; //CCR1为t
TA0CCR2=5000; //CCR2为5000
TA0CCTL0 = CCIE;
TA0CCTL1 = CCIE;
TA0CCTL2 = CCIE;
//开启每一个捕获器的中断使能
_EINT(); //开启总中断
}
#pragma vector=TIMER0_A0_VECTOR
__interrupt void TIME0_A0_ISR(void)
{
P4OUT|=BIT2;
P4OUT|=BIT3;
}
#pragma vector=TIMER0_A1_VECTOR
__interrupt void TIME0_A1_ISR(void)
{
{
switch(TA0IV)
{
case 2:
{
P4OUT &= ~BIT2;
break;
}
case 4:
{
P4OUT &= ~BIT3;
if(t<8000)
t=t+100;
else
t=600;
TA0CCR1=t; //当CCR2产生中断的时候改变CCR1的值
break;
}
case 10:break;
}
}
}
定时器的基本配置流程简述
1、设置时钟
2、TAxCTL选择模式、时钟等等
3、TAxCCRn设置CCR
4、设置中断
5、中断函数
具体判断TA1IV中的值。然后在相应的值里面做操作。如果不用这个的话是没有办法做出来中断
3 ADC的中断
ADC12CTL0 = SHT0_2 + ADC12ON; // 设置采样时间
ADC12CTL1 = SHP; //
ADC12IE = 0x01; // 打开使能
ADC12CTL0 |= ENC; // 打开转换开关
P6SEL |= 0x01; // 选择P6.0端口的电压进行转换
P2DIR |= 0x01;
ADC12CTL0 |= ADC12SC;
#pragma vector=ADC12_VECTOR
__interrupt void ADC12_ISR (void)
{
if (ADC12MEM0 < 0x7FF)
P2OUT = 0; // 关闭P1.0的全部灯
else
P2OUT = 0XFF; // 打开P1.0的全部灯
__low_power_mode_off_on_exit();
}
基本步骤
- 1.设置ADC12CTL0,使ADC12通道0采样保持时间为16 ADC12CLK(SHT0_2),开启ADC12模块(ADC12ON);
- 2.设置ADC12CTL1,选择采样保持脉冲模式即SAMPCON为采样定时器(SHP)
- 3.设置ADC12IE,是通道0中断使能(0x01);
- 4.设置ADC12CTL0,使能AD转换(ENC)
- 5.设置模拟信号输入IO口P60
- 7.设置ADC12CTL0,开启AD转换(ADC12SC),等待中断
- 8.中断中读取通道0转换值ADC12MEM0
学习了这么久msp430中断发现最重要的就是寄存器的配置,我们必须熟悉各类寄存器的对应的功能,多多利用好用户手册,就可以发挥出430系列单片机强大的性能。
最后
以上就是寂寞橘子为你收集整理的msp430中断的全部内容,希望文章能够帮你解决msp430中断所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复