ページ 1 / 1
C言語のプログラムの作成
Posted: 2007年3月11日(日) 21:10
by 由香里
はじめまして、こんばんは。
↓のように動作するC言語のプログラムの作成なのですが、お手上げでした
原点復帰
(a)ロータリースイッチを0にセットする。
(b)スタートスイッチSW1を押す。
(c)可動フレームがモータ側(以下左側)に移動を始め、リミットスイッチに達した時点で右側に反転する。
(d)可動フレームが原点に到達し、フォンセンサがONになった時点で停止する。
原点からの移動確認
(a)ロータリースイッチを4にセットする。
(b)スタートスイッチSW1を押す。
(c)可動フレームが右側に移動を始め、4っ目のスリッド(原点のスリッドは含まない)に達し、フォンセンサがONになった時点で停止する。
すみませんが、どなたか分かる方教えていただけると助かります。よろしくお願いします。
Re:C言語のプログラムの作成
Posted: 2007年3月11日(日) 21:31
by バグ
たったこれだけの情報では、どうしようもありませんよ…(;^_^A
Re:C言語のプログラムの作成
Posted: 2007年3月11日(日) 22:08
by ゆかり
これが、わたしが考えたプログラムです。もっと簡単で単純にしたプログラムを教えていただきたいです。
よろしくお願いします
#include<16f873a.h>
#fuses HS,NOWDT,NOPROTECT,PUT<BROWNOUT,NOLVP
#use delay(CLOCK=20000000)
#byte porta=5
#byte porta=6
#byte porta=7
#byte porta=8
#byte porta=9
void main()
{
int sw,led,i=0;//
int bcd=0;
output_a(0xff);//
delay_ms(500);
output_a(0x00);//
delay_ms(500);
output_a(0xff);//
delay_ms(500);
output_a(0x00);//
delay_ms(500);
while(1)
{
if(input(PIN_C1)==0)//push_sw ON
{
for(;input(PIN_C5)==1;)//リミットスイッチを感知するまで左回転
{
//モーター左回転
output_c(0x11);//00000001
delay_ms(5);
output_c(0x22);//00000010
delay_ms(5);
output_c(0x44);//00000100
delay_ms(5);
output_c(0x88);//00001000
delay_ms(5);
}
for(;input(PIN_C4)==1;)//フォトセンサの最初まで右回転
{
//モーター右回転
output_c(0x88);//00001000
delay_ms(5);
output_c(0x44);//00000100
delay_ms(5);
output_c(0x22);//00000010
delay_ms(5);
output_c(0x11);//00000001
delay_ms(5);
}
}
}
}
#include<16f873a.h>
#fuses HS,NOWDT,NOPROTECT,PUT<BROWNOUT,NOLVP
#use delay(CLOCK=20000000)
#byte porta=5
#byte porta=6
#byte porta=7
#byte porta=8
#byte porta=9
void main()
{
int sw,led,i=0;//
int bcd=0;
output_a(0xff);//
delay_ms(500);
output_a(0x00);//
delay_ms(500);
output_a(0xff);//
delay_ms(500);
output_a(0x00);//
delay_ms(500);
while(1)
{
sw=input_b()&0x0f;
output_a()sw;//ポートbの値をLED(ポートB)に出力
}
}
Re:C言語のプログラムの作成
Posted: 2007年3月11日(日) 23:44
by バグ
今の情報だけでは、同じ表記をしている場所を関数化すること位しか思いつかないです。
以下のソースは由香里さんのプログラムが正しいのを前提に書かれていますので、コンパイルすらしていません。『私ならばこう記述する』程度のものですので、あまり参考にならないかもしれないことを了承したうえで見ていただけたらと思います。とりあえず、原点復帰の部分だけです(^_^;)
// 原点復帰
#include <16f873a.h>
#fuses HS,NOWDT,NOPROTECT,PUT<BROWNOUT,NOLVP
#use delay( CLOCK = 20000000 )
#byte porta = 5
#byte porta = 6
#byte porta = 7
#byte porta = 8
#byte porta = 9
// プロトタイプ宣言
void Initialize()
void MotorMoveLeft()
void MotorMoveRight()
// メイン関数
void main()
{
Initialize();
while( 1 )
{
if( input( PIN_C1 ) == 0 ) //push_sw ON
{
while( input( PIN_C5 ) == 1 ) //リミットスイッチを感知するまで左回転
{
MotorMoveLeft();
}
while( input( PIN_C4 ) == 1 ) //フォトセンサの最初まで右回転
{
MotorMoveRight();
}
}
}
}
// ボードの初期化???
void Initialize()
{
int i;
for( i = 0 ; i < 2 ; i++ )
{
output_a( 0xFF );
delay_ms( 500 );
output_a( 0x00 );
delay_ms( 500 );
}
}
// モーター左回転
void MotorMoveLeft()
{
int nBit;
for( nBit = 0x11 ; nBit <= 0x88 ; nBit = nBit << 1 )
{
output_c( nBit );
delay_ms( 5 );
}
}
// モーター右回転
void MotorMoveRight()
{
int nBit;
for( nBit = 0x88 ; nBit >= 0x11 ; nBit = nBit >> 1 )
{
output_c( nBit );
delay_ms( 5 );
}
}