〔ArduinoとPIC16F819で通信と基礎編〕 [SPIデバイスを複数個接続する] 〔マイコンのトップに戻る〕
16F819からのデータは受信していません、データを送るだけのプログラムです。 --------------------------------------------------------------------- #include <pic.h> #include <htc.h> // delay用 #define _XTAL_FREQ 4000000 // delay用に必要(クロック4MHzを指定) // コンフィギュレーション1の設定 // CLKOUTピンをRA4ピンで使用する(CLKOUTEN_OFF):内部クロック使用する(INTIO) // 外部クロック監視しない(FCMEN_OFF):外部・内部クロックの切替えでの起動はなし(IESO_OFF) // 電源電圧降下常時監視機能ON(BOREN_ON):電源ONから64ms後にプログラムを開始する(PWRTEN_ON) // ウオッチドッグタイマー無し(WDTE_OFF): // 外部リセット信号は使用せずにデジタル入力(RA3)ピンとする(MCLRE_OFF) // プログラムメモリーを保護しない(CP_OFF):データメモリーを保護しない(CPD_OFF) __CONFIG(CLKOUTEN_OFF & FOSC_INTOSC & FCMEN_OFF & IESO_OFF & BOREN_ON & PWRTE_ON & WDTE_OFF & MCLRE_OFF & CP_OFF & CPD_OFF) ; // コンフィギュレーション2の設定 // 動作クロックを32MHzでは動作させない(PLLEN_OFF) // スタックがオーバフローやアンダーフローしたらリセットをする(STVREN_ON) // 低電圧プログラミング機能使用しない(LVP_OFF) // Flashメモリーを保護しない(WRT_OFF):電源電圧降下常時監視電圧(2.5V)設定(BORV_25) __CONFIG(PLLEN_OFF & STVREN_ON & WRT_OFF & BORV_25 & LVP_OFF); // 指定した時間(numx10ms)だけウエイトを行う処理関数 void Wait(unsigned int num) { int i ; // numで指定した回数だけ繰り返す for (i=0 ; i<num ; i++) { __delay_ms(10) ; // 10msプログラムの一時停止 } } // メインの処理 void main() { int i ; OSCCON = 0b01101010 ; // 内部クロックは4MHzとする ANSELA = 0b00000000 ; // アナログは使用しない(すべてデジタルI/Oに割当てる) TRISA = 0b00001100 ; // RA2ピン以外を全て出力に割当てる(RA3は入力専用) PORTA = 0b00000000 ; // 出力ピンの初期化(全てLOWにする) // SPIモードの設定と初期化 SDOSEL = 1 ; // 3番ピン(RA4)をSDOピンに設定 SSP1CON1 = 0b00100001 ; // クロック極性はLOW マスタモードでFOSC/16のクロックに設定 SSP1STAT = 0b00000000 ; // クロック位相は0、アイドル(0V)→アクティブ(5V)時にデータ送信 *2) SSP1IF = 0 ; // SPIの割込みフラグを初期化する SSP1IE = 1 ; // SPIの割込みを許可する PEIE = 1 ; // 周辺装置割込み有効 GIE = 1 ; // 全割込み処理を許可する Wait(500) ; // 5秒後に開始 while(1) { // LCDに表示しやすい用にキャラクター文字を送っています。 for (i = 0x30 ; i < 0x7b ; i++) { SSP1BUF = (char)i ; Wait(100) ; // 1秒毎に送る } } } ---------------------------------------------------------------------こんな感じでテストしました。
記事一部変更(*2) 2016/06/13
追記(*1) 2012/02/27
【きむ茶工房ガレージハウス】
Copyright (C) 2006-2020 Shigehiro Kimura All Rights Reserved.