PICでpurintfを使う場合
普通は
void sputch(const char ch) {
while(!TXSTAbits.TRMT);
TXREG = ch;
}
っていう関数を使うことになる
これはシリアルで文字列を送信するためのものなんだけど
9600bpsだと1bitあたり
1/9600*1000000で104uSかかる
それが8bit+2(スタートストップ)で
1バイト送信するのに1mSくらい
ということは30文字送信するのに30mSかかる
これは無視できない時間
ということで
割り込みで送信できるようにしてみた
char text[50];
char textSize;
char textCnt = 0;
static void interrupt intr(void) {
if (TXIF) {
if (textSize > textCnt) {
TXREG = text[textCnt];
textCnt++;
} else {
textCnt = 0;
TXIE = 0;
}
}
}
これで
void main(void) {
init();
textSize = sprintf(text,"hello world ... serial TEST\r\n");
TXIE = 1;
for ( ; ; ) {
}
}
とかだと 300uS程度で処理が完了する
あとは割り込みで勝手に送信してくれる
ただ 当たり前だけどこれはハードウェアシリアルが有るPICに限られます
0 件のコメント:
コメントを投稿