プロが教える店舗&オフィスのセキュリティ対策術

PIC16F627Aを使い、160KHzの周波数を外部に出力したいのですが、うまくいきません。
仕様はこのようになっています。
セラロックとして10MHzを使っています。(20MHzを使うことも考えている)
電源は5Vです。
開発環境はMPLAB IDEに CCS社Cコンパイラを使っています。
現在のプログラムはこのようになっています。

////////////////////////////////////////////////////////////////////////
//タイマ0を用いて160KHzの周波数を出力する
//3.1μsでタイマ0の割り込み
////////////////////////////////////////////////////////////////////////

#include<16f627a.h>
#fuses HS,NOWDT,NOPROTECT,PUT,BROWNOUT,NOLVP  //コンフィグレーションの設定
#use delay(CLOCK = 10000000)     //発振子の周波数10MHz
 //delay_ms()の使用
//定数の定義
#byte  PORTA=0x05
#bytePORTB=x06
#byte TMR0 = 0x01
#bit T0IF = 0x0B.2

//タイマ0割り込み処理
#INT_RTCC//タイマ0の割り込み処理関数の宣言
void rtcc_isr(void)
{
T0IF=0;//タイマ0の割り込みフラグTMR0=0xF8;//タイマ0の初期値
PORTA^=0x04; //PORTAの出力反転
}

//メイン関数
void main(void){
set_tris_a(0xF8);//出力ポートの設定
set_tris_b(0xF7);//出力ポートの設定
setup_timer_0(RTCC_INTERNAL | RTCC_DIV_1);//プリスケーラを使用しない
set_timer0(0x0);//TMR0に0x0を書き込む

enable_interrupts(INT_RTCC);//タイマ0の割り込み許可
enable_interrupts(GLOBAL);//グローバルの許可

PORTB = 0x7F;//出力
while(1){//割り込みを待つ
delay_ms(1);//1μs
}
}
/////////////////////////////////////////////////////////////////////

このようなプログラムで160KHzの周波数を出力することは可能でしょうか?
もし不足の部分や誤っていることがあったら教えてください。

A 回答 (1件)

だれも回答していないので手遅れかもしれませんが回答します。


TMR0はオーバーフロー割り込みしか発生できませんので、256回周期になります。10MHzだと0.4us×256で102us周期の割り込みです。周波数だと2.4KHzあたりですね。
TMR0に毎回適度な値を書き込むことで160KHに近い値では発信できる様になりますが、完全に160KHzは無理なことをお断りしておきます。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!