- PIC専用のスレ Part54 [無断転載禁止]©2ch.net [無断転載禁止]©2ch.net
222 :774ワット発電中さん[sage]:2017/02/20(月) 20:30:21.67 ID:lcdBnGGO - >>213 のコードです
PIC16F1454用です 割り込みは関係無かったです #pragma config FOSC = INTOSC, WDTE = SWDTEN, CPUDIV = NOCLKDIV #include <xc.h> unsigned char data[256]; unsigned char read_p = 0; unsigned char write_p = 0; void main(void){ OSCCON = 0xFC; ACTCON = 0x90; SPBRG = 0x67; SPBRGH = 0x00; BAUDCON = 0x08; TXSTA = 0x24; RCSTA = 0x90; while (1){ while (RCIF){ data[write_p++] = RCREG; } while (read_p != write_p && TXIF){ TXREG = data[read_p++]; } } }
|
- PIC専用のスレ Part54 [無断転載禁止]©2ch.net [無断転載禁止]©2ch.net
223 :774ワット発電中さん[sage]:2017/02/20(月) 20:37:25.46 ID:lcdBnGGO - UARTから受信したデータをそのまま送信します
コアクロックは48MHz, UARTは115200bps 100文字くらい一気にPICに送ると、PICから送信するデータがたまにダブります read_p, write_p は正しいので、TXREGに設定している回数は合ってます 仮にTXREGにデータがあるときにTXREGに値をセットしてしまっても、 文字が減るだけで増えることは無いと思うのですが TXIFの代わりにTRMTで比較すればダブることは無くなりますが、 文字と文字の間に隙間ができるし、割り込み処理にすると困るので、やりたくありません サンプルはTRMTになっていますが TXREG = ... の前後にNOPを入れても症状は直りません
|
- PIC専用のスレ Part54 [無断転載禁止]©2ch.net [無断転載禁止]©2ch.net
225 :774ワット発電中さん[sage]:2017/02/20(月) 21:08:01.90 ID:lcdBnGGO - PIC16F18313 でも症状は同じでした
|
- PIC専用のスレ Part54 [無断転載禁止]©2ch.net [無断転載禁止]©2ch.net
227 :774ワット発電中さん[sage]:2017/02/20(月) 21:46:38.35 ID:lcdBnGGO - オシロスコープでRXを見ましたが、やはり文字がダブっています
(つまり、受け側の問題ではありません) 頻度にはムラがあるようで、しばらく発生しない時もあります MicrochipのサンプルもTRMTになっていることから、 TXIFには問題があるのでは?という気がします
|
- PIC専用のスレ Part54 [無断転載禁止]©2ch.net [無断転載禁止]©2ch.net
228 :774ワット発電中さん[sage]:2017/02/20(月) 21:49:18.62 ID:lcdBnGGO - ただ、TXREGの空判定が誤った場合は文字が減るはずで、
多くなる理屈がわかりません
|