Quantcast
Viewing latest article 1
Browse Latest Browse All 440

PIC16F1827 シリアル通信テスト

 PIC16F1827のシリアル通信のテストをします。

 PIC16F1827では、シリアル通信に使うピンを選ぶことができます。

 TXピンの選択は、APFCON1レジスタのTXCKSELで行い、TXCKSEL=0でRB2が、TXCKSEL=1でRB5が選択されます。
 RXピンの選択は、APFCON0レジスタのRXDTSELで行い、RXDTSEL=0でRB1が、RXDTSEL=1でRB2が選択されます。
 今回は、TXCKSEL=0,RXFTSEL=0として、TX=RB2,RX=RB1とします。

 回路です。

Image may be NSFW.
Clik here to view.
イメージ 1

 USBシリアル変換モジュールFT234Xを接続して、パソコンの通信ソフトTeraTermとの間での通信をテストします。

 ブレッドボードです。

Image may be NSFW.
Clik here to view.
イメージ 2

 クロックは最高速度32MHzで動作させ、Baud Rate Generatorの設定は、BRGH=1,BRG16=1としました。

 TeraTermとの通信テストでは、300bps~230400bpsで通信可能でした。

Image may be NSFW.
Clik here to view.
イメージ 3

 プログラムです。

 TeraTermから送られた文字を受信し、同じ文字を送り返す、いわゆるエコーバックのプログラムです。

-------------------------------------
#include <stdio.h>
#include <stdlib.h>
#include <xc.h>
// CONFIG1
#pragma config FOSC = INTOSC
#pragma config WDTE = OFF
#pragma config PWRTE = ON
#pragma config MCLRE = OFF
#pragma config CP = OFF
#pragma config CPD = OFF
#pragma config BOREN = ON
#pragma config CLKOUTEN = OFF
#pragma config IESO = OFF
#pragma config FCMEN = OFF
// CONFIG2
#pragma config WRT = OFF
#pragma config PLLEN = ON
#pragma config STVREN = ON
#pragma config BORV = HI
#pragma config LVP = OFF
#define _XTAL_FREQ 32000000   //クロック32MHz
/*  TX=RB2,RX=RB1に設定
 *
 */
void serial_init(unsigned long BR){
    TXSTA = 0x24;   //SYNC=0 TXEN = 1 BRGH = 1
    BRG16 = 1;      //BRG 16bit mode
    RCSTA = 0x90;   //非同期、継続受信可
    unsigned int X= _XTAL_FREQ/BR/4 - 1;
    SPBRGH = X / 256;
    SPBRGL = X % 256;
}
void putch(unsigned char byte){
    while(!TXIF);
    TXREG = byte;
}
unsigned char getch(){
    while(!RCIF);
    return RCREG;
}
unsigned char getche(){
    unsigned char c;
    c = getch();
    putch(c);
    return c;
}
void main() {
    OSCCON = 0b01110000 ;     // 内部クロック8MHz PLL ONで8×4=32MHz
    ANSELA = 0b00000000 ;     // AN0-AN4は使用しない
    ANSELB = 0b00000000 ;     // AN5-AN11は使用しない
    TRISA  = 0b00000000 ;     // PORTAは全て出力(RA5は入力)
    TRISB  = 0b00000010 ;     // RB1(RX) 入力 他は出力
    PORTA  = 0b00000000 ;     // PORTA初期化
    PORTB  = 0b00000000 ;     // PORTB初期化
    /* USARTの設定 */
    TXCKSEL = 0;            // TX=RB2
    RXDTSEL = 0;            // RX=RB1
   
    serial_init(9600);      // Serial通信初期化とBaud Rateの設定
    while(1){
        getche();
    }
}


Viewing latest article 1
Browse Latest Browse All 440

Trending Articles