|
|
|
ハイパーターミナルから1文字PICへ送信します。
PICは1文字入力をして、それをLDEに2進数で表示します。
たとえば、「1」を送信すると、「00110001」(ASCIIコード)と表示されます。(1は点灯0は消灯)
 |
delay.cとdelay.hはシリアル出力と同じものです。
srial_in.cとreceive.cとreceive.hを作成します。 |
srial_in.c
/**********************************************************/
/* RA2:シリアル入力 RB に出力 pic16F84A
*/
/* 5V, 4MHz, 2400bps */
/**********************************************************/
#include <pic.h>
__CONFIG(UNPROTECT & PWRTEN & WDTDIS & XT );
//-------------------------------------------------------
ioport();
int receive(); //receiveはreceive.cで定義してある
//-------------------------------------------------------
ioport()
{
TRISA=0x04; //入出力設定 RA2ポートを入力他は出力に
TRISB=0x00; //入出力設定 RBポートすべて出力に
}
//-------------------------------------------------------
main(void)
{
int RX;
ioport();
RB0 = 1; //RB0点灯 start確認
while(1) //serialで8bit入力する
{
RX=receive();
PORTB=RX; //入力結果をLED表示
}
}
//----------------- END ---------------------------------
|
注)CONFIG の先頭はアンダーバー2つです。
receive.c
/*****************************************************/
/* receive.h で定義したport(in_port)に8bit受信する */
/* 4MHz 2400bps
*/
/* 2007/1/17 by.katokato */
/*****************************************************/
#include <pic.h>
#include "delay.h"
#include "receive.h"
wait1();
int receive();
//-------------------------------------------------
wait1() //約417usec
{
DelayUs(200);
DelayUs(207);
}
//-------------------------------------------------
receive() //serialで8bit入力する
{
int rx;
int i;
while(in_port){ //in_portが0(start bit)になるまで待つ
}
rx=0;
wait1(); //start bit skip
for(i=0;i<=7;i++){
if(RA2==1){
rx=rx+0b10000000;
}
wait1();
rx=rx>>1;
}
wait1(); //stop bit reach
wait1(); //stop bit skip
return rx;
}
|
receive.h
#define in_port RA2 //serial port の定義
|
|
|