Re: PIC18F87J90的 EUAST問題??
|
||||
---|---|---|---|---|
中級會員
|
出來都沒有 更不用說接收了
你硬體有沒有接錯 pic tx to rx rx to tx 再看看io port有沒有設錯
發表於: 2009/12/14 16:35
|
|||
|
有關usart的問題18f24j50
|
||||
---|---|---|---|---|
中級會員
|
鮑率:38400 ; fcy=12MHz
void high_isr (void) { RX_Temp = Read1USART(); if(RX_Temp == '$') count = 0; else if(RX_Temp == '!') count = 0; else if(Data_buffer[count-2] == '*') CTRL.Flag.NEW_STR = 1; Data_buffer[count++] = RX_Temp; Write1USART(RX_Temp); PIR1bits.RC1IF = 0;} while(1) { if(CTRL.Flag.NEW_STR) { PIE1bits.RC1IE = 0; if(Data_buffer[0] == '$') { if(Data_buffer[1] == 'G') if(Data_buffer[2] == 'P') if(Data_buffer[3] == 'G') if(Data_buffer[4] == 'G') if(Data_buffer[5] == 'A') { for(n=0;n<50;n++) Data_buffer2[n] = Data_buffer[n]; CTRL.Flag.GPS = 1;}} else if(Data_buffer[0] == '!') { for(n=0;n<50;n++) Data_buffer1[n] = Data_buffer[n]; CTRL.Flag.AIS = 1; } CTRL.Flag.NEW_STR =0; } while(CTRL.Flag.GPS && CTRL.Flag.AIS) { PIE1bits.RC1IE = 0; CTRL.Flag.GPS_EN = GPS_frame(); CTRL.Flag.AIS_EN = AIS_frame(); if(CTRL.Flag.AIS & CTRL.Flag.GPS) { Distance_diff = Coordi_cmp(); count1++; if(Distance_diff <= (CTRL.Flag.Limit_EN*5)) { LIMIT1 = 1; delay_ms(10000); }} for(n=0;n<=75;n++) Data_buffer1[n] = Data_buffer2[n] = 0; CTRL.chars = 0; } PIE1bits.RC1IE = 1; } } 我貼出我目前所寫的程式 我在做2種不同格式的資料從usart輸入 但我上面的程式每做完一筆資料就不再接收資料了 請教各位先進們: 1.我如何讓他處理完資料後繼續接收字串? 2.我看過前的文章有說使用看門狗會使我的程式不再死機嗎? 3.8位元晶片 會因資料傳輸過快而當機嗎?
發表於: 2009/12/14 11:21
|
|||
|
Re: PIC18F87J90的 EUAST問題??
|
||||
---|---|---|---|---|
中級會員
|
鮑率? 高低速?
Open1USART( USART_TX_INT_OFF & // TX傳送完資料不產生中斷 USART_RX_INT_ON & // RC接收完資料產生中斷 USART_ASYNCH_MODE & // 非同步傳輸模式 USART_EIGHT_BIT & // 每次傳輸8bit資料 EIGHT /NINE USART_CONT_RX & // RX連續接收 USART_BRGH_HIGH , // LOW = 64; HIGH = 16 ; fcy=12MHz 18 ); // sqrg ,BR=38400
發表於: 2009/12/14 11:07
|
|||
|
Re: W401- Answer WAP001-Ans1
|
||||
---|---|---|---|---|
中級會員
|
當你直接使用他的專案檔,當然兒是用他的設定,相對得你的實體環境也要跟他一樣。
你有icd2、3 pic kit 接到晶片上? 還有晶片是不是同一顆 你叫出的定義檔有沒有正確 都是問題所在
發表於: 2009/11/19 11:02
|
|||
|
Re: 語法和振盪問題請教
|
||||
---|---|---|---|---|
中級會員
|
你要看兩個地方 一個是timer.h(在h資料夾)
另一個是timer的函數資料夾MCC18\src\pmc_common\Timers timer.h裡定義了字串TIMER_INT_ON 同時也宣告了opentimer1 所以你要把TIMER_INT_ON的值帶進opentimer1去做 就可以知道它設定了哪些暫存器 其他特殊暫存器也是這麼做的
發表於: 2009/11/19 10:29
|
|||
|
Re: 語法和振盪問題請教
|
||||
---|---|---|---|---|
中級會員
|
#define TIMER_INT_ON 0b10000000 // Interrupts enabled
timer.h
發表於: 2009/11/17 9:45
|
|||
|
Re: 語法和振盪問題請教
|
||||
---|---|---|---|---|
中級會員
|
opentimer1(TIMER_INT_ON;)
通常很多「口語」化的都是用#define 去定義 在文件檔的開頭看看有沒有定義這個字串 或是寫在某個.h的定義檔裡
發表於: 2009/11/16 14:06
|
|||
|
Re: 程式 燒錄問題
|
||||
---|---|---|---|---|
中級會員
|
不過其實也不用考盧是不是「占用」記億體
因為你程式在運作時是不會跑超出原有的程式 而erase的動作只不過是把記憶體「寫入」同樣的資料(0xff) 你所要考慮的應該是有沒有超過容量吧
發表於: 2009/11/9 14:52
|
|||
|
有關外接eeprom 的問題
|
||||
---|---|---|---|---|
中級會員
|
使用環境:MPLAB V8.36 MCC18 V3.31 ICD3 PIC18F24J50
CONFIG 設定(XMAL=12MHZ) EEPROM是用MX25L8005 使用spi2 把接腳用pps印射到接腳 OpenSPI2(SPI_FOSC_4 , MODE_00, SMPMID); OUT_PIN_PPS_RP11 = OUT_FN_PPS_SCK2; OUT_PIN_PPS_RP12 = OUT_FN_PPS_SDO2; IN_FN_PPS_SDI2 = IN_PIN_PPS_RP13; IN_FN_PPS_SCK2IN = IN_PIN_PPS_RP11; 現在已經用示波器讀出SDK、SDO的資料,但回傳的資料都是0X00。 請問還有哪些需要注意的? 以下是我的程式 void EEP_WREN(void) { EEP_CS LOW; WriteSPI2(WREN); EEP_CS HIGH; } void EEP_WRDI(void) { EEP_CS LOW; WriteSPI2(WRDI); EEP_CS HIGH; } void EEP_SE(void) { EEP_WREN(); EEP_CS LOW; WriteSPI2(SE); WriteSPI2(0x00); //位子0X000000 WriteSPI2(0x00); WriteSPI2(0x00); EEP_CS HIGH; delay_ms(60); } unsigned char EEP_READ(void) { char worr; int hunter; EEP_CS LOW; WriteSPI2(READ); WriteSPI2(0x00); WriteSPI2(0x00); WriteSPI2(0x00); worr = ReadSPI2(); EEP_CS HIGH; return worr; } void EEP_WRITE(unsigned char Rog) { int a; EEP_WREN(); EEP_CS LOW; WriteSPI2(WRITE); WriteSPI2(0x00); WriteSPI2(0x00); WriteSPI2(0x00); WriteSPI2(Rog); EEP_CS HIGH; EEP_WRDI(); }
發表於: 2009/11/9 10:09
|
|||
|