| HOME | 回路チェック | SWICHシリアル出力 | シリアル入力 | RESPONSE | WEB |
/*********************************************************/
/*     シリアル入力                             */ 
/*********************************************************/      





 ハイパーターミナルから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 の定義       

⇒Next