[
板情報
|
カテゴリランキング
]
したらばTOP
■掲示板に戻る■
全部
1-100
最新50
|
メール
| |
PICのプログラムについて
17
:
よさく
:2013/03/03(日) 18:11:14
何度もすみません。色々調べながらやっていますが、flagをどう使っていいのかが想像できなくて、
色々書き込んでは悩んでいます。
一個前のソースは間違いに気付いたので、こういう内容かな?ってことでまた書いてみました。
教えて頂いたので、何とか完成したいと思ってます。
宜しくお願いします。
#define _LEGACY_HEADERS
#include <htc.h>
#define _XTAL_FREQ 4000000
//delay タイムを使うので、動作周波数 4Mhzにセットする。
__CONFIG ( INTIO & WDTDIS & PWRTEN & MCLRDIS );
char flg = 0;
void tenmetu_timer ( unsigned char tm ) { // 点滅時間 Time = 200ms * (A/D 変換データ)
while ( tm-- ) {
__delay_ms (200);
}
}
unsigned int value; //A/D 読値 10ビット
unsigned int adc_read(unsigned char ch){
//右詰め、電源基準、A/D有効化
ADCON0 = 0b10000101 ; //GP1
GODONE = 1;
while(GODONE);
return ((ADRESH << 8) + ADRESL) ;
}
void main (void) {
//タイマを20msecに設定→10ms?
TMR0 = 0x64; //100を設定
OPTION = 0x07; //内部クロック, 1/256
T0IE = 1;//タイマー0割り込み許可
GIE = 1;//全体割り込み許可
unsigned int value; //A/D 読値 10ビット
unsigned char count;
ANSEL = 0b00010011; // ADCS:8 Tosc, ANS3=0, ANS2=0, ANS1=1, ANS0=1
TRISIO = 0b00000011; // I/O ポート GP0,1:input, GP2,3,4,5:output
GPIO = 0;
while(1){
if(count == 255)
value = (adc_read(1)) >> 2; // A/Dの読み込み
if((count < value) && (flg == 1)){
GPIO2 = 1;
int i;
for(i=0; i<=1; ++i){
__delay_us (25); // A/D 充電待ち
GODONE = 1; // A/D 変換開始
while(1){
if ( !GODONE ) {
tenmetu_timer ( ADRESH );
GPIO2 = 0; // LED 消灯
tenmetu_timer ( ADRESH );
break;
}
}
}
while(1){
GPIO2 = 1; // LED 点灯
}
}else{
GPIO2 = 0;
}
}
}
interrupt timer0()
{
int value;
static char tcount = 0;
ADCON0 = 0x81 + (0 << 2 ); //ADチャンネル選択
__delay_us (25);
GODONE = 1;
while(GODONE);
value = ((ADRESH << 8) + ADRESL) >> 2;
if(tcount < value)
flg = 1;
else
flg = 0;
tcount++;
T0IF = 0;
}
新着レスの表示
名前:
E-mail
(省略可)
:
※書き込む際の注意事項は
こちら
※画像アップローダーは
こちら
(画像を表示できるのは「画像リンクのサムネイル表示」がオンの掲示板に限ります)
スマートフォン版
掲示板管理者へ連絡
無料レンタル掲示板