|
關於兩pic18f452資料互傳問題
|
|
新會員
|
各位先進大家好: 個人為初學者目前有一問題無法解決,尚請先進們能幫幫忙,我用兩18f452以rs232互傳資料,不知是否中斷設定有問題,有時正常有時不動作,還請各位能夠給予指點.謝謝!
#include <p18f452.h> //MASTER #define BaudRate 25 void High_INT_SER(void); void InitialUSART(void); void PUTCHAR(char c); char DATA[3]; char SEND[3]={0x40,0x31,0x2A}; char RI_PTR; char sw; //******** INTERRUPT PROGRAM ******* #pragma code High_Interrupt_Vector=0x0008 void High_INT_VEC(void) { _asm goto High_INT_SER _endasm } #pragma code //**********接收中斷副程式 ************** #pragma interrupt High_INT_SER void High_INT_SER(void) { if(PIR1bits.RCIF==1) { DATA[RI_PTR]=RCREG; RI_PTR++; if(RI_PTR==2) RI_PTR=0; } } #pragma //************ MAIN PROGRAM void main(void) { char i; TRISB=0xff; TRISD=0x00; ADCON1=0x06; InitialUSART(); while(1) { if(PORTB!=sw) sw=PORTB; for(i=0;i<3;i++) PUTCHAR(SEND[i]); } } //************** InitialUSART ***************** void InitialUSART(void) { RCONbits.IPEN=1; INTCONbits.GIEH=1; INTCONbits.PEIE=1; RCSTAbits.SPEN=1; RCSTAbits.CREN=1; TXSTAbits.TXEN=1; TXSTAbits.BRGH=1; PIE1bits.RCIE=1; PIR1bits.RCIF=0; IPR1bits.RCIP=1; SPBRG=BaudRate; } //*********** PUTCHAR 傳遞副程式 void PUTCHAR(char c) { TXREG=c; while(TXSTAbits.TRMT!=1); }
//***************SLAVE******************** #include <p18f452.h> #define BaudRate 25 void High_INT_SER(void); void InitialUSART(void); void PUTCHAR(char c); char DATA[3]; char SEND[3]={0x40,0x31,0}; char RI_PTR; char SEND_FLAG=0; char sw=0x00,i; //************* INTERRUPT PROGRAM **** #pragma code High_Interrupt_Vector=0x0008 void High_INT_VEC(void) { _asm goto High_INT_SER _endasm } #pragma code //***************************** #pragma interrupt High_INT_SER void High_INT_SER(void) { if(PIR1bits.RCIF==1) { DATA[RI_PTR]=RCREG; RI_PTR++; if(RI_PTR==2) RI_PTR=0; } } #pragma //************ MAIN PROGRAM ****** void main(void) { TRISB=0xff; ADCON1=0x06; InitialUSART(); while(1) { while(PORTB==sw); sw=PORTB; SEND[2]=PORTB; SEND_FLAG=0; while(SEND_FLAG!=1); for(i=0;i<3;i++) PUTCHAR(SEND[i]); SEND_FLAG=0; } } //************** InitialUSART ***************** void InitialUSART(void) { RCONbits.IPEN=1; INTCONbits.GIEH=1; RCSTAbits.SPEN=1; RCSTAbits.CREN=1; TXSTAbits.TXEN=1; TXSTAbits.BRGH=1; PIE1bits.RCIE=1; PIR1bits.RCIF=0; IPR1bits.RCIP=1; SPBRG=BaudRate; } //*********** PUTCHAR ********************* void PUTCHAR(char c) { if(PIR1bits.TXIF!=0) TXREG=c; while(TXSTAbits.TRMT!=1); }
發表於: 2005/11/7 17:54
|
|