📄 interrupt.c
字号:
#include "interrupt.h"
uchar BufReceiving[BUF_RECEIVING_LENGTH];
uchar BufSending[BUF_SENDING_LENGTH];
uchar BufReceivedHeadCounter;
uchar BufReceivedTailCounter;
uchar BufSendHeadCounter;
uchar BufSendTailCounter;
uchar TimerSignel;
/*
PIC interrupt entrance service code
BufReceiving[] is a loop buffer. length = BUF_SENDING_LENGTH
Put the data in BufReceiving[].
BufReceivedHeadCounter is a position where is the current data.
*/
//----------------------------------------------------------------------------
// High priority interrupt vector
// using C18 compiler
void InterruptHandlerHigh (void);
#pragma code InterruptVectorHigh = 0x08
void InterruptVectorHigh (void)
{
_asm
goto InterruptHandlerHigh //jump to interrupt routine
_endasm
}
#pragma code
#pragma interrupt InterruptHandlerHigh
//--------------------------------------------------------------------
///void interrupt service(void)///using C:\HT-PIC\bin\-PICC//
void InterruptHandlerHigh(void)
{
uchar tmp;//,tmp1,tmp2;
if(PIR1bits.TMR1IF&&PIE1bits.TMR1IE)
{
PIR1bits.TMR1IF=0;
TimerSignel++;
}
if(PIE1bits.RCIE&&PIR1bits.RCIF) //If RCIE and RCIF are true, the data should be received in RCREC.
{
PIR1bits.RCIF=0;
tmp=RCREG;
BufReceiving[BufReceivedHeadCounter]=tmp;
BufReceivedHeadCounter++;
BufReceivedHeadCounter&=BUF_RECEIVING_MASK;
}
}
/*
Function Name: UartSendData
PurPose :
Put the data wanted to send into BufSending[].
send the data to uart
*/
void UartSendData(void)
{
if(BufSendTailCounter==BufSendHeadCounter)return;
if(PIR1bits.TXIF==0)return;//data is sending
//while(TRMT==0);TRMT set to 1 when Transmit(Serial) Shift Register (TSR) is empty
TXREG=BufSending[BufSendTailCounter];
BufSendTailCounter++;
BufSendTailCounter&=BUF_SENDING_MASK;
}
/*
Function Name: initialize_uart
PurPose :
initialize UART, enable the rx interrupt.
*/
void initialize_uart(void)
{
TRISC|=0Xc0;//C7,C6;RT,TX set to input . input(set to 1) output(set to 0)
//SPBRG=0X6b ;//baud rate19200=0xd//d9=300 ;52,24,600
SPBRG=0x0c; //19200
TXSTA=0x24;
// TXSTA=0X20;//0x24=19200;4800=20
RCSTA=0X90;
PIE1bits.RCIE=0x01;
/////////////////////
//TXIE=0x01;
////////////////////
INTCONbits.PEIE=0x01;
INTCONbits.GIE=0X01;//enable global interrupt bit
}
/*
Function Name: InitTimer1
PurPose :
Enable Timer1's interrupt.
*/
void InitTimer1(void)
{
T1CON=0x31;
PIE1|=0x01;
TMR1H=0x00;
TMR1L=0x00;
//4194304/32
//0.5S
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -