EUSART1,EUSART2を用いて2系統の232C通信を行いたいのですが?
EUSART1,EUSART2を用いて2系統の232C通信を行いたいのですが、
データシートを見ますとEUSART1時はTimer2,4,6,8,10をEUSART2時はTimer3,5,7を
それぞれ使用するようです。
#use rs232( baud=9600, parity=N, xmit=PIN_C6, rcv=PIN_C7, bits=8, stream=PORT1 )
現在Timer0,1,2,3,4,5は既に使用しており、232C通信で使用することは避けたいので、
EUSART1、EUSART2で使用するTimerを指定したいのですが、CCSでどのように記述すれば良いのかご教示頂ければ助かります。
回答
PIC18F66K22等のミドルレンジ・デバイスはハードウェアで2チャンネルのUSARTを持っています。
よって、#use RS232() で送受信ピンをハードウェアで使用するピンに割り当てることによって、
USARTユニット内のボーレートジェネレーターが使用されますので、特段タイマーユニットを使う必要ありません。
ボーレートジェネレーター以外にタイマーを使うのであれば大抵は受信や送信の処理ですが、その場合は特段特定のタイマーを
使用しなければならない制約はありませんので、適当な処理を行えばよいと思います。
ハードウェアのUSARTを実装すると、送受信割り込みが使えますので送受信にタイマーなどを使う必要はほとんどないと思います。
(定時に送信したり一定のパターンの送受信などが不要な場合)
PIC18F66K22の場合、TX1=RC6,RX1=RC7,TX2=RG1,RX2=RG2ですので、最低限
#use rs232( baud=9600, parity=N, xmit=PIN_G1, rcv=PIN_G2, bits=8, stream=PORT2 )
と記述すれば、後は、
c=fgetc( PORT1 );とするとRX1の受信データを取得し、
fputc( 'A', PORT2 );とするとTX2に文字'A'を送信します。
また、
#int_RDA0
void IntrRecvPortA( void )
とすることで、RX1の1文字受信割り込みが実現でき、
#int_TBE1
void IntrTransmitPortA( void )
とすることで、送信バッファがからになるとここに割り込みが来ます。
※事前にenable_interrupt()関数で割り込みを有効にしておきます。
#use rs323()などでのタイマーの指定はありません。