Re: PIC16F ,USART接收問題
|
||||
---|---|---|---|---|
高級會員
|
自問自答
是輸出端的問題, 直接丟A5,00,00,00,64,7D 沒有間斷的話會有異常 設一個計時器(10ms) 每次丟一個Byte就可以了 A5 00 00 00 64 7D
發表於: 2023/10/11 14:33
|
|||
|
PIC16F ,USART接收問題
|
||||
---|---|---|---|---|
高級會員
|
版主好大家好,
這次要問PIC16F系列Usart的接收問題 用的是PIC16F1829,MPLABX IDE,波特率:19200 我需要接收一組訊號 :A5,00,00,00,00,64,7D A5=字頭, Tab[0~3]=開關使用0 or 1,Tab[4]=0x00~0x64, 7D=字尾 Tab[4]數據會一直亂跳。 但如果只傳送一組變數:A5,64,7D Tab[0]接收的數據就很正常,傳輸端修改變數,接收端會一起變化。 程式如下,可以幫我看看問題在哪嗎 uint8_t Tab[5]; void User_Usart_R(void) { while (EUSART_DataReady) { uint8_t Data = 0; Data = EUSART_Read(); if(Uart_FLAG == 0) { if(Data == 0xA5) { Uart_FLAG = 1; k = 0; } } else { if(Data == 0x7D)Uart_FLAG = 0; else { Tab[k] = Data; k++; } } }
發表於: 2023/10/11 10:16
|
|||
|
Re: PIC16系列如何使用printf指令做Usart傳輸呢
|
||||
---|---|---|---|---|
高級會員
|
改成這樣成功了
printf("main.t0.txt=\"-100.0\"\xff\xff\xff");
發表於: 2023/9/22 16:07
|
|||
|
PIC16系列如何使用printf指令做Usart傳輸呢
|
||||
---|---|---|---|---|
高級會員
|
版主好大家好,
這次要問PIC16F系列如何使用printf指令傳輸UART串列數據呢 用的是PIC16F1823,MPLABX IDE, 我在網上搜到的方法是在esuart.c裡加入 include void putch(unsigned char byte); void putch(unsigned char byte) { while(!TXIF)continue; TXREG = byte; } 接著我在main.c裡 while (1) { printf("main.t0.txt=100\0xff\0xff\0xff"); } 想試著用HMI的通訊協議傳輸100出去,但聯機一直沒有效果 是哪邊有問題呢,波特率兩邊都設19200,RX->TX TX->RX 另外想問EUSART的中斷要不要開,跟Redirect STDIO to USART要不要勾呢
發表於: 2023/9/22 15:14
|
|||
|
副檔案與無法燒錄的問題
|
||||
---|---|---|---|---|
高級會員
|
各位好,小弟用的是MPLAB X IDE,PIC16F1933 想請問
Source Files除了main.c 要在加入副程式是新增main.c 還是avr-main.c 呢? Header Files 建立新的是選擇xc8_herder.h嗎? 小弟想試一下用I2C 控制OLED ,附件的檔案編譯成功,但是卻不行燒錄,不曉得問題出在哪裡 BUILD SUCCESSFUL (total time: 2s) Loading code from C:/Users/keror/MPLABXProjects/OLED_Test1933.X/dist/default/production/OLED_Test1933.X.production.hex... Program loaded with pack,PIC12-16F1xxx_DFP,1.2.63,Microchip Loading completed Cannot program a production build to a debug header. Attach file: Link only for registered users
發表於: 2022/7/19 15:28
|
|||
|
轉出燒錄檔問題
|
||||
---|---|---|---|---|
高級會員
|
我想問用MAPLAB X IDE 編輯好程式後,配置(config)要怎麼內建在hex檔裡呢?
我自己試燒好像都沒問題 但寄給供應商後,代燒錄來的config有時會是初始配置,必須再給個config文件給他修改。 我提供的檔案是dist\default\production裡的HEX檔
發表於: 2022/6/13 16:32
|
|||
|
Re: 接收串列傳輸數據
|
||||
---|---|---|---|---|
高級會員
|
謝謝大佬,確實是中斷互相蓋過導致。
我將一些不用即時處理的程式移到主迴路就可以了。 謝謝各位大佬的指導
發表於: 2022/4/15 16:51
|
|||
|
Re: 接收串列傳輸數據
|
||||
---|---|---|---|---|
高級會員
|
謝謝大佬,儲存數據這部分OK了。
我發現我抓取的Data會亂跳,但是波形在視波器顯示都滿穩的 SLK與SDA 我用RA2做SLK引腳,IOC上緣觸發中斷,而RA4上緣觸發則是在RA2為於高位時數值重新指向低位。用ICD3 Debug監測每一RUN的數值都不一樣= = void User_RA2_ISR(void) { if(IO_RA4_PORT) { cn = 1; } else cn = 0; Alldata = Alldata | ( (cn & 0x01) << j ); if(j < 23)j++; } void User_RA4_ISR(void) { if(IO_RA2_PORT && j == 23 ) { j = 0; Value.AllMsg = (0x0fff & Alldata); FlagReg1.Minus_FLAG = ((Alldata >> 20) & 0x01); Alldata = 0; } }
發表於: 2022/4/13 14:40
|
|||
|
Re: 接收串列傳輸數據
|
||||
---|---|---|---|---|
高級會員
|
對,我想問Bit排列寫入的方法,是類似下面這樣,把數值依序放入a0~a7這樣
ByteValue1就可以直接提取16進制的數值嗎? struct ByteValue1 { unsigned a0 : 1 ; unsigned a1 : 1 ; unsigned a2 : 1 ; unsigned a3 : 1 ; unsigned a4 : 1 ; unsigned a5 : 1 ; unsigned a6 : 1 ; unsigned a7 : 1 ; }; 另一個問題是我想用每次CLK觸發時,用迴圈填入數據,但是bit形式的陣列是怎麼宣告呢? if(j<23) {a[ j ] = Data;} else j = 0; 沒找到這類範例的關鍵字,厚顏來請各位老哥提點:D
發表於: 2022/4/12 16:11
|
|||
|