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

📄 13.c

📁 This is the source code for GSM - GPS based Vehicle Tracking System done using PIC microcontroller a
💻 C
字号:
#include <18F4550.h>
#include <stdio.h>
#include <18F4550_SFR.h>
#FUSES HS,NOPROTECT,NOLVP,PUT,NOWDT,CPUDIV1,NOPBADEN,NOSTVREN
#use delay(clock = 20000000)

#BYTE RCBUF = 0X3A1
#BYTE TEMP = 0X3A2

void io_ports_initialize(void);
void usart_initialize(void);
void enable_interrupt(void);
void transmit_message(int i);
void asm_code_reception(void);
void baud_interval_time(void);

//--------------SMS FUNCTION----------------
void send_sms(char *a1, char *b1);
//------------------------------------------

char gps_rcv_data_array[75];
signed int gps_j = 0;
char at_cmd[10][35] = { 
						"AT+CPIN?",
						"AT+CCLK=\"08/02/29,14:55:00\"",
						"AT+CPMS=\"SM\"",
						"AT+CMGF=1",
						"AT+CNMI=2,1,0,0,0",
						"AT+CSAS",
					 };
//------------SENDING SMS-------------------
char sms[25] = "AT+CMGS=\"9944676010\"*";
//-------------------------------------------

#INT_EXT
void reception()
{	
	INT0IF = 0;
	asm_code_reception();
	while(gps_rcv_data_array[gps_j] == 0X0A)
	{
		gps_j = -1;
		INT0IE = 0;
		send_sms(sms, gps_rcv_data_array);
		delay_ms(5000);
	}
	++gps_j;
}

void asm_code_reception()
{
#asm
inch_n:
		btfsc PORTB,0; 		SKIP ON START BIT = 1 (A "MARK")
		goto inch_n; 		ELSE KEEP LOOKING FOR A START BIT
		movlw 0x08; 		START SERIAL INPUT SEQUENCE
		movwf TEMP; 		COLLECT 8 DATA BITS
		clrf RCBUF; 		CLEAR SERIAL CHARACTER BUFFER
		btfsc PORTB,0; 		FALL THRU IF START BIT STILL = 1 (A "MARK")
		goto inch_n; 		ELSE IT WAS JUST A NOISE SPIKE, KEEP LOOKING
inch_n1:
#endasm
		baud_interval_time();
#asm
		bcf STATUS,0; 		CLEAR THE CARRY BIT
		rrcf RCBUF,F; 		ROTATE CRY -> MSB, ROTATE MSB RIGHT
		btfsc PORTB,0; 		IS IT A "MARK" ?
		bsf RCBUF,7; 		...SKIP IF YES, ELSE SET BIT TO LOGIC '1'
		decfsz TEMP,F; 		EIGHT COUNTS YET?
		goto inch_n1; 		...NO, GET ANOTHER BIT
#endasm
		baud_interval_time();
		gps_rcv_data_array[gps_j] = RCBUF;
}

void baud_interval_time()
{
	delay_us(49);		// baudrate interval time(it should be 3 micro secs less than actual interval time )
}

#INT_EXT2
void ext_isr()	
{
	INT2IF = 0;
	RE0 = 0;
	delay_ms(500);
	INT0IF = 0;
	INT0IE = 1;
}

//************MAIN FUNCTION********************************************

void main()	
{
	io_ports_initialize();
	usart_initialize();
		
	transmit_message(0);
	delay_ms(1500);

	transmit_message(1);
	delay_ms(1500);

	transmit_message(2);
	delay_ms(1500);

	transmit_message(3);
	delay_ms(1500);

	transmit_message(4);
	delay_ms(1500);

	transmit_message(5);
	delay_ms(1500);
	
	enable_interrupt();
	while(1)
	{	RE0 = ~RE0;
		delay_ms(50);
	}
}

//************************SMS SENDING FUNCTION*************

void send_sms(char *tx_ptr1, char *tx_ptr2)	
{
	while(*tx_ptr1 !='*')
	{	
		delay_ms(25);
		if((TXIF==1)||(TRMT==1))
		{	
			TXREG = *tx_ptr1;
			tx_ptr1++;	
		}
	}
	TXREG = 13;
	delay_ms(25);

	while((*tx_ptr2 != 0x0A))
	{	
		delay_ms(25);
		if((TXIF==1)||(TRMT==1))	
		{
			TXREG = *tx_ptr2;
			tx_ptr2++;	
		}
	}
	TXREG = 0X1A;
	delay_ms(25);
}

void io_ports_initialize()
{	
	TRISB = 0XFD;		// software uart RB0 is Used as RX PIN and XXX is Used as TX PIN
	RBPU = 0;			// PORTB Pull-up Resistors Enabled 
    TRISC = 0XBF;
	TRISE = 0X00;
}

void usart_initialize()
{
	TXSTA = 0X20;		//TXSTA,BRGH: USE HIGH SPEED  BAUD RATE
	RCSTA = 0X90;	//	
	SPBRG = 0X20;	// baud rate = 9600
}	 

void enable_interrupt()
{
	IPEN = 1;			// RCON,IPEN: ENABLE INTERRUPT PRIORITY
	GIE = 1;			// INTCON,GIE:  ENABLE HIGH PRIORITY INTR'S
	PEIE = 1;			// INTCON,PEIE:  ENABLE LOW PRIORITY INTR'S
	INT2IP = 0;			// LOW PRIORITY
	INT2IE = 1;			// ENABLE EXTERNAL INTERRUPT 2
	INTEDG0 = 0;		// Interrupt on falling edge for EXT0
	INTEDG2 = 0;		// Interrupt on falling edge for EXT2
}

void transmit_message(int i)
{
	char *tx_ptr=&at_cmd[0][0];
	tx_ptr=&at_cmd[i][0];
	while(*tx_ptr)
	{	
		delay_ms(5);
		if((TXIF==1)||(TRMT==1))
		{
			TXREG = *tx_ptr;
			tx_ptr++;	
		}
	}
	TXREG = 13;
	delay_ms(5);
	TXREG = 10;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -