Browsing this Thread:
1 Anonymous Users
|
Re: 關於兩pic18f452資料互傳問題
|
|
版主
Joined
: 2004/4/30 10:53 最後登入時間
: 2021/11/30 18:11
From CAE, Microchip
Group:
站務管理者 註冊會員
Level : 75 HP : 744 / 1861 MP : 5367 / 109179 EXP : 45
|
程式很長看的很辛苦,建議問題簡單化先用 Widows 所提供的超級終端機先測試發的部分,OK 後在測試收的部分,須注意超級終端機只會顯示 可視性的 ASCII Code 。
發表於: 2005/11/8 17:05
|
|
|
關於兩pic18f452資料互傳問題
|
|
新會員
Joined
: 2005/11/7 16:09 最後登入時間
: 2005/11/7 17:26
Group:
註冊會員
Level : 1 HP : 0 / 0 MP : 0 / 0 EXP : 0
|
各位先進大家好: 個人為初學者目前有一問題無法解決,尚請先進們能幫幫忙,我用兩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
|
|
You can view topic.
你 不可以 發起新主題
You cannot reply to posts.
You cannot edit your posts.
You cannot delete your posts.
You cannot add new polls.
You cannot vote in polls.
You cannot attach files to posts.
You cannot post without approval.
You cannot use topic type.
You cannot use HTML syntax.
You cannot use signature.
You cannot create PDF files.
You cannot get print page.