问题描述
嗨!
我是PIC开发的新手,正在尝试将PIC16F877A微控制器与NEO6M GPS模块连接。使用MPLAB IDE V5.30的软件工具。
该项目将在4位数7段显示屏中显示GPS时间。 同一代码在2天前运行正常。突然,它刚刚停止工作。 请看一下代码,让我知道代码是否有任何问题或我应该知道的任何内容。非常感谢您的帮助。代码在下面。
#pragma config FOSC = HS // Oscillator Selection bits (HS oscillator) #pragma config WDTE = OFF // Watchdog Timer Enable bit (WDT disabled) #pragma config PWRTE = ON // Power-up Timer Enable bit (PWRT disabled) #pragma config BOREN = ON // brown-out Reset Enable bit (BOR enabled) #pragma config LVP = OFF // Low-Voltage (Single-Supply) In-Circuit Serial Programming Enable bit (RB3/pgm pin has pgm function; low-voltage programming enabled) #pragma config CPD = OFF // Data EEPROM Memory Code Protection bit (Data EEPROM code protection off) #pragma config WRT = OFF // Flash Program Memory Write Enable bits (Write protection off; all program memory may be written to by EECON control) #pragma config CP = OFF // Flash Program Memory Code Protection bit (Code protection off) #define _XTAL_FREQ 20000000 //Crystal Frequency,used in delay #include <xc.h> #define DATA_595 PORTBbits.RB0 #define STROBE_595 PORTBbits.RB1 #define CLK_595 PORTBbits.RB2 #define LED PORTBbits.RB3 int dataArray[11]; unsigned int gtime[6]; int z = 0; void system_init(void); void gpsParse(); void gpser(char data); int isEqualString(char c1[],char c2[]); void shiftOut(unsigned int myDataOut) { int i = 0; int pinState; CLK_595 = 0; DATA_595 = 0; for (i = 7; i >= 0; i--) { CLK_595 = 0; if (myDataOut & (1 << i)) { pinState = 1; } else { pinState = 0; } DATA_595 = pinState; CLK_595 = 1; DATA_595 = 0; } CLK_595 = 0; } void printdisplay(int a,int b,int c,int d) { STROBE_595 = 0; shiftOut(dataArray[d]); shiftOut(dataArray[c]); shiftOut(dataArray[b]); shiftOut(dataArray[a]); STROBE_595 = 1; __delay_us(500); } char gps_tm_1[] = "GPGGA,"; char gps_tm_2[] = "GPRMC,"; char gstr[6]; int indx = 0; int gps_flag = 0; int a,b,c,d; int led_state = 0; int disp = 0; void __interrupt() myISR() { if (RCIF == 1) { if (RCSTAbits.OERR) { CREN = 0; __delay_us(200); CREN = 1; } gpser(RCREG); RCIF = 0; } } void gpser(char data) { if (data > 0) { if (data == '$') { gps_flag = 1; indx = 0; } else if (gps_flag == 1) { if (indx < 6) { gstr[indx] = data; indx++; } if (indx == 6) { if (isEqualString(gstr,gps_tm_1)==0) { gps_flag = 2; } else { gps_flag = 0; } indx = 0; } } else if (gps_flag == 2) { if (indx < 6) { gstr[indx] = data; indx++; } if (indx >= 6) { a = gstr[0] - '0'; b = gstr[1] - '0'; c = gstr[2] - '0'; d = gstr[3] - '0'; gps_flag = 0; indx = 0; led_state++; led_state = led_state % 2; LED = led_state; printdisplay(a,d); } } } } int isEqualString(char c1[],char c2[]){ int i; for(i=0;i<6;i++){ if(c1[i]!=c2[i]){ return 1; } } return 0; } void main(void) { system_init(); dataArray[0] = 0x3F; //11111111 dataArray[1] = 0x06; //11111110 dataArray[2] = 0x5B; //11111100 dataArray[3] = 0x4F; //11111000 dataArray[4] = 0x66; //11110000 dataArray[5] = 0x6D; //11100000 dataArray[6] = 0x7D; //11000000 dataArray[7] = 0x07; //10000000 dataArray[8] = 0x7F; //00000000 dataArray[9] = 0x6F; //11100000 dataArray[10] = 0x80; //00000000 while (1) { } return; } void system_init(void) { TRISB = 0x00; PORTB = 0X00; //Make all output of RB3 LOW TRISC = 0x80; // Configure Rx pin as input and Tx as output TXSTA = 0x20; // Asynchronous mode,8-bit data & enable transmitter RCSTA = 0x90; // 8-bit continous receive enable SPBRG = 31; // 9600 Baud rate at 20MHz RCSTAbits.CREN = 1; INTCONbits.GIE = 1; // Enable all unmasked global INT INTCONbits.PEIE = 1; // Enabel Peripheral interrupt PIR1bits.RCIF = 0; // Flag = 0 = no data in register PIE1bits.RCIE = 1; //enable rx to receive }
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)