⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 interrupt.c

📁 单片机PIC控制GSM发送SMS,然后控制汽车和提供地图
💻 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 + -