PIC 18F 中断

2019-03-25 18:56发布

#include <p18f25K22.h>
#include<xc.h>
void uart_init()
{
///////////////端口A设置///////////////////
  PORTA=0X00;                  //端口状态为
  LATA=0X00;
  ANSELA=0X08;
  TRISA=0X20;
///////////////////端口B设置////////////////
  PORTB=0x02;                    //端口状态为
  LATB=0;
  ANSELB=0;
  TRISB=0X03; //设置端口状态 RB0为输入
////////////端口C设置/////////////
  PORTC=0;                   //端口状态为
  LATC=0;
  ANSELC=0;               //?????                    
  TRISC=0XD0;                //设置端口方向
///////////////////串口初始化///////////////////////////
  TXSTA1&=0X8f;           //    (6)8位数据0,(5)禁止发送0,(4)异步模式0;
  TXSTA1|=0X04;           //    (2)高速,
  RCSTA1|=0x90;           //    (7)使能串口1;(4)使能接受1
  RCSTA1&=0xBF;           //    (6)8位接受0;            
  TXSTA1bits.TXEN=1;      //     使能 发送
  TXSTA1bits.TRMT=1;      //     发送器为空
  BAUDCON1=0x48; //   接收操作处于空闲状态,16 位波特率发生器——SPBR启动看门狗 GH 和SPBRG
  SPBRGH1=0;
  SPBRG1=34;   //  波特率为115200;
////////中断使能设置////////////////
  RCON=0X5F;        //复位控制器:使能中断优先级7(1),BOR使能6(1)
// RCON=0XdF;
  INTCON=0XF0;              //   ,允许所有高优先级7(1);允许过零中断
  INTCON2=0X84;             //   禁止B上拉;下降沿触发中断;TIMEO中断2低优先级,RB低优先级
  //PIE1=0x22;                //   允许RC1接受中断、定时器2溢出中断;禁止TX1发送中断、定时器1的溢出中断,
  PIE1=0x20;
  IPR1=0X30;                 //     rc1中断5高优先,TX1中断4高优先级,
  PIR1=0;
//////////////////////////////////////
  TMR0IE=1;
  TMR0IF=0;
////////////定时器0中断设置////////////////////
   T0CON=0XC0; // 定时器0:使能(7),8位(6)、内部指令周期时钟(5),有预分频(3)、2分频(0~2);50*2分频=100us
   TMR0H=0;
   TMR0L=206;                ///;实际测试值
}

void main ()
{
uart_init();
while(1)
{

}
}
/****************low_priority**************定时器0中断程序********************************/
void interrupt  HandlerLOW(void)
{
if(INTCONbits.TMR0IF)
{
   INTCONbits.TMR0IF=0;
   TMR0L=206;
return;
  }
/////////////////外部中断0//////////////////////
if(INTCONbits.INT0IF=1)
{  
    INTCONbits.INT0IF=0;
  return;
}
////////////////////////////串口中断处理/////////////////////////////
      if(PIR1bits.RC1IF)  //串口 1 接受 中断 处理程序
      {
        LED=~LED;
        PIR1bits.RC1IF=0;
        Rec1Data=RCREG1;
      return;
     }
}
这是我的中断程序 当加上外部中断0程序时时不响应串口中断,当去掉以后才会响应串口中断  有知道的吗?感觉是中断寄存器设置的问题  是不是优先级的原因啊

此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
3条回答
ienglgge
1楼-- · 2019-03-25 23:06
把串口中断处理的语句放到外部中断的前面,看看能不能进串口中断。可能是,串口收到数据,外部中断还没处理完。
mzb2012
2楼-- · 2019-03-26 02:06
请把你多余的return拿开
shimingyan1992
3楼-- · 2019-03-26 06:09
mzb2012 发表于 2016-12-1 21:39
请把你多余的return拿开

昨天晚上找到原因了 确实是 return的事

一周热门 更多>