/******************************************************************************/ /* Files to Include */ /******************************************************************************/ #if defined(__XC) #include /* XC8 General Include File */ #elif defined(HI_TECH_C) #include /* HiTech General Include File */ #endif #include /* For uint8_t definition */ #include /* For true/false definition */ #include "system.h" /* System funct/params, like osc/peripheral config */ #include "user.h" /* User funct/params, such as InitApp */ void main(void) { InitApp(); while(1) { if(RcvFlag){ RcvFlag = 0; if(Buffer[0]=='S'){ SndBuf[0]='M'; SndBuf[1]=Buffer[1]; Process(); Index = 0; } } } } void InitApp(void) { /* TODO Initialize User Ports/Peripherals/Project here */ //OSCCON = 0xF0; //32MHz //OSCCON = 0b01101010; //4MHz OSCCON = 0b01011010; //1MHz; PIC16F1827 DataSheet(DS41391D),pp.51-67 ANSELA = 0x03; ANSELB =0; FVRCON=0b11000010; //ADC?Vref=2.048V; PIC16F1827 DataSheet(DS41391D),pp.135-136 TRISA = 0x23; //TRISB = 0xDA; TRISB = 0b11011110; //RB2?TRISTATE? WPUB = 0x18; OPTION_REGbits.nWPUEN = 0; /* BT Module Initialize,*/ LATBbits.LATB0 = 0; delay_ms(100); LATBbits.LATB0 = 1; delay_ms(500); /*USART initialize*/ // TXSTA = 0x24; TXSTA = 0x20; // =<19200bps RCSTA = 0x90; BAUDCON = 0x08; // SPBRG = 68; //115kbps for 32MHz //SPBRG = 8; //115kbps for 4MHz SPBRG = 25; //9.6kbps for 4MHz BRG=0 OR 2400bps for 1MHz /* Setup analog functionality and port direction */ /* Initialize peripherals */ if(PORTBbits.RB3 == 0){ SendCmd(msg1); SendCmd(msg2); SendCmd(msg3); SendCmd(msg4); SendCmd(msg5); SendCmd(msg6); SendCmd(msg7); } // TXSTA = 0x24; TXSTA = 0x20;//=<19200bps RCSTA = 0x90; ADCON0 = 0; // ADCON1 = 0xE0; ADCON1 = 0b11100011; //VRef = FVR Index = 0; RcvFlag = 0; PIR1bits.RCIF = 0; PIE1bits.RCIE = 1; INTCONbits.PEIE = 1; INTCONbits.GIE = 1; /* Enable interrupts */ } void Process(void){ int data; switch(Buffer[1]){ case 'B': if (Buffer[2]!=DEVICEID){ break; } SndBuf[2] = (PORTAbits.RA2 == 0) ? '0' : '1'; SndBuf[3] = (PORTAbits.RA3 == 0) ? '0' : '1'; SndBuf[4] = (PORTBbits.RB3 == 0) ? '0' : '1'; SndBuf[5] = (PORTBbits.RB4 == 0) ? '0' : '1'; data = GetADC(0); // data = data*3300/1024; char dum[4]; itostring(4,data,dum); //sprintf(dum,"%4d",data); SndBuf[6]=dum[0]; SndBuf[7]=dum[1]; SndBuf[8]=dum[2]; SndBuf[9]=dum[3]; //SndBuf[6] = (unsigned char)(data / 32)+0x40; //SndBuf[7] = (unsigned char)(data % 32)+0x40; //data = GetADC(1); //SndBuf[8] = (unsigned char)(data / 32)+0x40; //SndBuf[9] = (unsigned char)(data % 32)+0x40; SndBuf[10] = 'E'; SendStr(SndBuf); break; case 'C': switch(Buffer[2]){ case '1': LATAbits.LATA2 = (Buffer[3] == '1') ? 1 : 0; break; case '2': LATAbits.LATA3 = (Buffer[3] == '1') ? 1 : 0; break; default: break; } break; default: break; } } void Send(unsigned char txchar){ TRISB = 0b11011010; //RB2-> TRIS=Off //TRISB = 0xDA; //delay_ms(50); while(!TXSTAbits.TRMT); TXREG = txchar; TRISB = 0b11011110; // RB2 -> TRIS=on } void SendStr(unsigned char *str){ int i; for (i=0;i0; i--) { buffer--; *buffer = (data % 10) + '0'; data = data / 10; } } void interrupt isr(void) { unsigned char data; int i; if(PIR1bits.RCIF){ PIR1bits.RCIF =0; if((RCSTAbits.OERR) || (RCSTAbits.FERR)){ data = RCREG; RCSTA = 0; RCSTA = 0x90; } else { if(Index < Max_Size) { data = RCREG; if (data == 'S') Index = 0; RcvBuf[Index] = data; if(RcvBuf[Index] == 'E'){ i = 0; while(i <=Index){ Buffer[i]=RcvBuf[i]; i++; } RcvFlag = 1; } Index++; } else{ data = RCREG; Index = 0; } } } } #if defined(__XC) #include /* XC8 General Include File */ #elif defined(HI_TECH_C) #include /* HiTech General Include File */ #endif #include /* For uint8_t definition */ #include /* For true/false definition */ #include "system.h" /* System funct/params, like osc/peripheral config */ #include "user.h" /* User funct/params, such as InitApp */ void main(void) { InitApp(); while(1) { if(RcvFlag){ RcvFlag = 0; if(Buffer[0]=='S'){ SndBuf[0]='M'; SndBuf[1]=Buffer[1]; Process(); Index = 0; } } } } void InitApp(void) { /* TODO Initialize User Ports/Peripherals/Project here */ //OSCCON = 0xF0; //32MHz //OSCCON = 0b01101010; //4MHz OSCCON = 0b01011010; //1MHz; PIC16F1827 DataSheet(DS41391D),pp.51-67 ANSELA = 0x03; ANSELB =0; FVRCON=0b11000010; //ADC?Vref=2.048V; PIC16F1827 DataSheet(DS41391D),pp.135-136 TRISA = 0x23; //TRISB = 0xDA; TRISB = 0b11011110; //RB2?TRISTATE? WPUB = 0x18; OPTION_REGbits.nWPUEN = 0; /* BT Module Initialize,*/ LATBbits.LATB0 = 0; delay_ms(100); LATBbits.LATB0 = 1; delay_ms(500); /*USART initialize*/ // TXSTA = 0x24; TXSTA = 0x20; // =<19200bps RCSTA = 0x90; BAUDCON = 0x08; // SPBRG = 68; //115kbps for 32MHz //SPBRG = 8; //115kbps for 4MHz SPBRG = 25; //9.6kbps for 4MHz BRG=0 OR 2400bps for 1MHz /* Setup analog functionality and port direction */ /* Initialize peripherals */ if(PORTBbits.RB3 == 0){ SendCmd(msg1); SendCmd(msg2); SendCmd(msg3); SendCmd(msg4); SendCmd(msg5); SendCmd(msg6); SendCmd(msg7); } // TXSTA = 0x24; TXSTA = 0x20;//=<19200bps RCSTA = 0x90; ADCON0 = 0; // ADCON1 = 0xE0; ADCON1 = 0b11100011; //VRef = FVR Index = 0; RcvFlag = 0; PIR1bits.RCIF = 0; PIE1bits.RCIE = 1; INTCONbits.PEIE = 1; INTCONbits.GIE = 1; /* Enable interrupts */ } void Process(void){ int data; switch(Buffer[1]){ case 'B': if (Buffer[2]!=DEVICEID){ break; } SndBuf[2] = (PORTAbits.RA2 == 0) ? '0' : '1'; SndBuf[3] = (PORTAbits.RA3 == 0) ? '0' : '1'; SndBuf[4] = (PORTBbits.RB3 == 0) ? '0' : '1'; SndBuf[5] = (PORTBbits.RB4 == 0) ? '0' : '1'; data = GetADC(0); // data = data*3300/1024; char dum[4]; itostring(4,data,dum); //sprintf(dum,"%4d",data); SndBuf[6]=dum[0]; SndBuf[7]=dum[1]; SndBuf[8]=dum[2]; SndBuf[9]=dum[3]; //SndBuf[6] = (unsigned char)(data / 32)+0x40; //SndBuf[7] = (unsigned char)(data % 32)+0x40; //data = GetADC(1); //SndBuf[8] = (unsigned char)(data / 32)+0x40; //SndBuf[9] = (unsigned char)(data % 32)+0x40; SndBuf[10] = 'E'; SendStr(SndBuf); break; case 'C': switch(Buffer[2]){ case '1': LATAbits.LATA2 = (Buffer[3] == '1') ? 1 : 0; break; case '2': LATAbits.LATA3 = (Buffer[3] == '1') ? 1 : 0; break; default: break; } break; default: break; } } void Send(unsigned char txchar){ TRISB = 0b11011010; //RB2-> TRIS=Off //TRISB = 0xDA; //delay_ms(50); while(!TXSTAbits.TRMT); TXREG = txchar; TRISB = 0b11011110; // RB2 -> TRIS=on } void SendStr(unsigned char *str){ int i; for (i=0;i0; i--) { buffer--; *buffer = (data % 10) + '0'; data = data / 10; } } void interrupt isr(void) { unsigned char data; int i; if(PIR1bits.RCIF){ PIR1bits.RCIF =0; if((RCSTAbits.OERR) || (RCSTAbits.FERR)){ data = RCREG; RCSTA = 0; RCSTA = 0x90; } else { if(Index < Max_Size) { data = RCREG; if (data == 'S') Index = 0; RcvBuf[Index] = data; if(RcvBuf[Index] == 'E'){ i = 0; while(i <=Index){ Buffer[i]=RcvBuf[i]; i++; } RcvFlag = 1; } Index++; } else{ data = RCREG; Index = 0; } } } } ここから,ヘッダーファイル ○system.h #pragma config FOSC = INTOSC #pragma config WDTE = OFF #pragma config PWRTE = ON #pragma config MCLRE = ON #pragma config CP=OFF #pragma config CPD=OFF #pragma config BOREN=OFF #pragma config CLKOUTEN=OFF #pragma config IESO = OFF #pragma config FCMEN = OFF //CONFIG2 #pragma config WRT = OFF //#pragma config PLLEN = ON #pragma config PLLEN = OFF #pragma config STVREN = OFF #pragma config BORV = LO #pragma config LVP = ON ○user.h #define Fosc 1 unsigned char RcvFlag; unsigned char RcvBuf[32],SndBuf[32],Buffer[32]; int Index; #define Max_Size 32 #define DEVICEID '1' //←デバイスIDを指定. unsigned char msg1[] = "$$$"; unsigned char msg2[] = "SF,1\r"; unsigned char msg3[] = "SN,BTC001\r"; unsigned char msg4[] = "SA,4\r"; unsigned char msg5[] = "SU,2400\r"; unsigned char msg6[] = "SP,3573\r"; unsigned char msg7[] = "R,1\r"; /* TODO User level functions prototypes (i.e. InitApp) go here */ void InitApp(void); /* I/O and Peripheral Initialization */ void delay_us(unsigned int usec); void delay_ms(unsigned int msec); void Send(unsigned char txchar); void SendCmd(const unsigned char *cmd); void SendStr(unsigned char *str); void Process(void); int GetADC(int ch); void itostring(int digit, unsigned int data, char *buffer);