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

📄 psgtech2.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
#BYTE TXBUF = 0X3A3
#BYTE UART_STA = 0X3A4
#BIT UART_TXIF = UART_STA.7
char test_array[10] = "chandra";
char at_cmd[7][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"	
					  };
void io_ports_initialize(void);
void transmit_message(int i);
void gsm_asmcode(void);
void baud_interval_time(void);
void transmission(void);

void main()	
{
		io_ports_initialize();
		transmit_message(0);
		transmit_message(1);
		transmit_message(2);
		transmit_message(3);
		transmit_message(4);
		transmit_message(5);
		delay_ms(1000);
}

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

void transmit_message(int i)
{
	char *tx_ptr=&at_cmd[0][0];
	UART_TXIF = 1;
	tx_ptr = &at_cmd[i][0];
	while(*tx_ptr )
	{	
		delay_ms(25);
		if(UART_TXIF == 1)
		{
			TXBUF = *tx_ptr;
			UART_TXIF = 0;
			gsm_asmcode();
			tx_ptr++;	
		}
	}
	TXBUF = 13;
	UART_TXIF = 0;
	gsm_asmcode();
	delay_ms(25);
}
			

void transmission()
{
	int i = 0;
	while(i<7)
	{
		TXBUF = test_array[i];
		gsm_asmcode();
		++i;
	}

}


void gsm_asmcode()
{
#asm
outch_n: 	
			movlw 8; 			THE CHARACTER HAS 8 BITS
			movwf TEMP;
			bcf PORTB,4; 		SET START-BIT TO A "SPACE"
#endasm
			baud_interval_time();
#asm
outch_n1:	rrcf TXBUF,F; 		ROTATE THE FIRST BIT INTO CARRY
			btfss STATUS,0; 	TEST THE CARRY BIT
			bcf PORTB,4; 		IF BIT IS 0 SET OUTPUT PIN TO A "0" (SPACE)
			btfsc STATUS,0 ; 	TEST THE CARRY BIT AGAIN
			bsf PORTB,4; 		IF BIT IS 1 SET OUTPUT PIN TO A "1" (MARK)
#endasm
			baud_interval_time();
#asm
			decfsz TEMP,F; 		IF COUNT IS ZERO THEN XMIT A STOP BIT
			goto outch_n1; 		...ELSE XMIT NEXT BIT
			rrcf TXBUF,F; 		ROTATE CARRY, GET THE MSB BACK INTO BIT 7
			bsf PORTB,4; 		SET PIN TO A 1 (A "MARK") FOR THE STOP BIT
#endasm
			baud_interval_time();
			TXBUF = 0X00;
			UART_TXIF = 1;
}

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

⌨️ 快捷键说明

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