#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程序时时不响应串口中断,当去掉以后才会响应串口中断 有知道的吗?感觉是中断寄存器设置的问题 是不是优先级的原因啊
此帖出自
小平头技术问答
昨天晚上找到原因了 确实是 return的事
一周热门 更多>