|
>こんにちは
> ......
>それでは宜しくお願い致します
見て頂くには、例文が必要なので、一部を掲載します。
「
//==============================================
//メイン
//==============================================
void main(void)
{
unsigned char off=0; //波形テーブルオフセット
unsigned char vol=0; //音量
unsigned char sts=0; //状態(0=オフ、1=オン)
unsigned short sts_ps=0; //状態変更プリスケ
unsigned char step_ps=0; //増減変更プリスケ
short dc; //デューティサイクル
//システム設定
OSCCON=0b11110000; //4xPLL有効、内部クロック8MHz、
//システムクロックはCONFIGに従う
while(!PLLR); //4xPLL準備完了を待つ
VREGPM1=1; //ローパワーSleepモード有効
OPTION_REG=0b11010010; //WPUする、TMR0は命令サイクル、
//プリスケはTMR0に1/8
//デバグ信号設定
#ifdef SHDBS //デバグ信号を出力するとき
DBS_LAT=0; //デバグ信号をLにしておく
DBS_TRIS=0; //デバグ信号を出力モード
#endif
//デバグ情報設定
#ifdef SHDBG //デバグ情報を出力するとき
DBG_LAT=1; //デバグ用TXをHにしておく
DBG_TRIS=0; //デバグ用TXを出力モード
#endif
//PWM設定
T2PR=254; //PWM周期を設定する
T2TMR=0; //TMR2をクリアしておく
T2CON=0b10000011; //TMR2有効、プリスケ1/1、ポストスケ1/4
CCPR1H=CCPR1L=0; //PWMデューティを0にしておく
CCP1CON=0b10011111; //CCP1有効、ピン出力しない、
// デューティ左詰め、PWMモード
TMR2IF=0; //PWM周期割込み表示をクリアしておく
while(!TMR2IF); //PWM周期の終了を待つ
//CWG設定
CWG1ISM=0b00000011; //CWG1入力はCCP1
#if BTL==0 //シングル出力のとき
CWG1STRA=1; //CWG1Aを出力
CWG1OEA=1; //CWG1Aをピン出力する
CWG1CON0=0b10000000; //CWG1有効、ステアリングモード
#endif
#if BTL==1 //コンプリ出力のとき
CWG1DBF=CWG1DBR=PWM_DEAD; //デッドバンドを設定する
CWG1OCON1=0b00000011; //CWG1BとCWG1Aをピン出力する
CWG1CON0=0b10000100; //CWG1有効、ハーフブリッジモード
#endif
#if BTL==2 //ブリッジ出力のとき
CWG1OCON1=0b00000011; //CWG1BとCWG1Aをピン出力する
CWG1CON0=0b10000001; //CWG1有効、同期ステアリングモード
#endif
#if BTL==3 //ブレーキ出力のとき
CWG1OCON1=0b00000011; //CWG1BとCWG1Aをピン出力する
CWG1OCON0=0b00110011; //CWG1Bデータは1、CWG1Aデータは1、
// CWG1Bを出力、CWG1Aを出力
CWG1CON0=0b10000001; //CWG1有効、同期ステアリングモード
CWG1CON1=0b00000011; //CWG1BとCWG1Aは反転出力
#endif
//PWMポート設定
APFCON=0b01100000; //CWGAはRA5、CWGBはRA4に割当てる
PWM_TRISR&=~PWM_MSK; //PWMポートを出力モード
//最初の開始待ち
wait_ms(ST_TIME); //開始待ち時間
//メインループ
for(;;)
{
//処理タイミング
DBS_H;
while(!TMR2IF){}; //サンプリング周期の満了を待つ
DBS_L;
TMR2IF=0; //TMR2割込み表示をクリアしておく
//デューティ設定
dc=wave[off+=TOBI]-128; //サンプル値をsignedで取出す
uuu.sss=dc*vol; //uuu.ccc=dc*vol/256
#if BTL<2 //シングル・コンプリ出力のとき
CCPR1H=uuu.ccc[1]+128; //デューティを設定する
#else //ブリッジ・ブレーキ出力のとき
if(dc&0x80) //負のとき
{
CCPR1H=(-uuu.ccc[1])*2; //デューティを設定する
CWG1STRA=0; //CWG1Aを出力しない
CWG1STRB=1; //CWG1Bを出力する
}
else
{
CCPR1H=uuu.ccc[1]*2;
//デューティを設定する
CWG1STRB=0; //CWG1Bを出力しない
CWG1STRA=1; //CWG1Aを出力する
}
#endif
//鳴動変化
if(sts) //オン状態のとき
{
if(!sts_ps--) //オン時間が満了したら
{
sts=0; //オフ状態にする
sts_ps=OF_TIME*8;
//状態プリスケを初期化
}
}
else //オフ状態のとき
{
if(!sts_ps--) //オフ時間が満了したら
{
sts=1; //オン状態にする
sts_ps=ON_TIME*8;
//状態プリスケを初期化
}
}
if(!step_ps--) //増減プリスケが満了したら
{
if(sts) //オン状態のとき
{
step_ps=ON_STEP/32;
//増減プリスケを初期化
if(vol<255) vol++;
//音量を増加する
}
else //オフ状態のとき
{
step_ps=OF_STEP/32;
//増減プリスケを初期化
if(vol) vol--; //音量を減少する
}
}
}
}
」
それでは宜しくお願い致します
|
|