FC2カウンター FPGAの部屋 PIC16F1825 の使い方2(USART の設定)
fc2ブログ

FPGAやCPLDの話題やFPGA用のツールの話題などです。 マニアックです。 日記も書きます。

FPGAの部屋

FPGAの部屋の有用と思われるコンテンツのまとめサイトを作りました。Xilinx ISEの初心者の方には、FPGAリテラシーおよびチュートリアルのページをお勧めいたします。

PIC16F1825 の使い方2(USART の設定)

PIC16F1825 の使い方1(32MHz クロックとポートの設定)”の続き。

PIC マイコンの PIC16F1825 を使うことになったので、使い方の覚書を書いておく。
今回は、USART つまり UART の設定について書いておく。

PIC16F1825 は秋月電子で販売しているそのマニュアルがこちら。

また、ほぼ互換品の”PIC12(L)F1822/PIC16(L)F1823 データ シート”日本語資料が Microchip にある。

SPBRGL レジスタの SYNC=0, BRGH=1、BAUDCON レジスタの BRG16=0: 8bit counter の時のボーレートの計算式は、

Fosc/(16 * (n + 1)) = 32000000 / (16 * (3 + 1)) = 500000 bps = 500 kbps


USART の設定

// UART
BAUDCON = 0; // BRG16=0: 8bit counter mode
SPBRGL = 3; // SYNC=0, BRGH=1, BRG16=0, 500000bps
TXSTA = 0b00100100; // TXEN=1, SYNC=0, BRGH=1
RCSTA = 0b10010000; // SPEN=1, CREN=1
// USART 割り込みありの場合
RCIE = 1;
RCIF = 0;
PEIE = 1;
GIE = 1;


SPEN:シリアルポート・イネーブル 1 - シリアルポートを有効にする
CREN:連続受信イネーブルビット 1 - レシーバーを有効にする
PIE1: 周辺機能割り込みイネーブル レジスタ 1  bit 5  RCIE: USART 受信割り込みイネーブルビット
PIR1: 周辺機能割り込み要求レジスタ 1    bit 5  RCIF: USART 受信割り込みフラグビット 1 - 受信割り込みを保留中
INTCON: 割り込み制御レジスタ        bit 6  PEIE: 周辺機能割り込みイネーブルビット 1 - 全てのアクティブな周辺機能割り込みを有効にする
                     bit 7  GIE: グローバル割り込みイネーブルビット

USART の TX と RX は 2 種類のピン・アサインをすることができる。
TX ー RC4、 RA0
RX ー RC5、 RA1

RC4, RC5 の組になるか、RA0, RA1 の組になるかは APFCON レジスタの値できまる。リセット後のピン・アサインは RC4, RC5 になっているので、それを使用する。
RC5 が USART の RX に割り当たるため TRISC の bit 5 を 1 (入力)にしている。

割り込みを使用しない場合のTX - RX ループバック・テスト
0x55 を送信して、受信したら +1 して、0x56 を送信するソフトウェア(割り込み無し)

/* * File:   acc3_uart.c * Author: ono * * Created on 2021/02/03, 11:09 */

#include <xc.h>

#pragma config FOSC = INTOSC
#pragma config LVP = OFF
#pragma config PWRTE = ON

unsigned char chr;
unsigned int n = 0;

void Delay(unsigned int m)
{
    for(n=0;n<m;n++);        //Delay
}

void main( void )
{
    OSCCON = 0b11110000; // 4x PLL enable, 8MHz or 32MHz, FOSC
    OSCTUNE = 0x00;
    
    TRISA = 0;
    TRISC = 0x23// SCL, SDA, UART RX is input setting.
    ANSELA = 0;
    ANSELC = 0;

    //I2C
    SSP1ADD   = 0x13;        //speed 400KHz
    SSP1STAT = 0b00000000; // 400kHz
    SSP1CON1 = 0b00101000;    //SSP1EN=1, Master mode
    SSP1CON2 = 0b00000000;

        // UART
    BAUDCON = 0// BRG16=0: 8bit counter mode
    SPBRGL = 3// SYNC=0, BRGH=1, BRG16=0, 500000bps
    TXSTA = 0b00100100; // TXEN=1, SYNC=0, BRGH=1
    RCSTA = 0b10010000; // SPEN=1, CREN=1
        //INTCON = 0b11000000; // GIE=1, PEIE=1

     while(1){
        while(TRMT == 0);
        TXREG = 0x55;
        
        while(RCIF == 0);
        RCIF = 0;
        chr = RCREG;
              
        //Delay(10);
        
        while(TRMT == 0);
        TXREG = chr + 1;

        while(RCIF == 0);
        RCIF = 0;
        chr = RCREG;
       
        Delay(50);
    }
}


割り込みを使用した場合のTX - RX ループバック・テスト
0x55 を送信して、受信したら +1 して、0x56 を送信のソフトウェア(割り込みあり)

/* * File:   acc3_uart.c * Author: ono * * Created on 2021/02/03, 11:09 */

#include <xc.h>

#pragma config FOSC = INTOSC
#pragma config LVP = OFF
#pragma config PWRTE = ON

unsigned char chr;
unsigned int n = 0;

void Delay(unsigned int m)
{
    for(n=0;n<m;n++);        //Delay
}

void main( void )
{
    OSCCON = 0b11110000; // 4x PLL enable, 8MHz or 32MHz, FOSC
    OSCTUNE = 0x00;
    
    TRISA = 0;
    TRISC = 0x23// SCL, SDA, UART RX is input setting.
    ANSELA = 0;
    ANSELC = 0;

    //I2C
    SSP1ADD   = 0x13;        //speed 400KHz
    SSP1STAT = 0b00000000; // 400kHz
    SSP1CON1 = 0b00101000;    //SSP1EN=1, Master mode
    SSP1CON2 = 0b00000000;

    // UART
    BAUDCON = 0// BRG16=0: 8bit counter mode
    SPBRGL = 3// SYNC=0, BRGH=1, BRG16=0, 500000bps
    TXSTA = 0b00100100; // TXEN=1, SYNC=0, BRGH=1
    RCSTA = 0b10010000; // SPEN=1, CREN=1
    //INTCON = 0b11000000; // GIE=1, PEIE=1
    RCIE = 1;
    RCIF = 0;
    PEIE = 1;
    GIE = 1;

     while(1){
        while(TRMT == 0);
        TXREG = 0x55;
        
        Delay(50);
    }
}

void interrupt RX_int(void){
    if(RCIF == 1){
        RCIF = 0;
        chr = RCREG;
        if(RCREG != 0x55)
            return;
              
        while(TRMT == 0);
        TXREG = chr + 1;
    }
}


  1. 2021年03月10日 20:59 |
  2. PIC
  3. | トラックバック:0
  4. | コメント:0

コメント

コメントの投稿


管理者にだけ表示を許可する

トラックバック URL
https://marsee101.blog.fc2.com/tb.php/5173-5541d6ab
この記事にトラックバックする(FC2ブログユーザー)