ページ 11

PSoCでSWを押すとLEDが消える回路のプログラムがわかりません。

Posted: 2013年10月06日(日) 23:43
by たかし
現在大学でPSoCについて学び始めたものです。
SW(P14)を押すとLED1(P10)が消えるような回路を作るという課題が出されました。
ソースコードは与えられていたのですが、いくつか修正が必要になっているものでした。
それを私が修正して以下のコードに書き換えました。
このコードは正しいですか?

コード:

#include <m8c.h>
#include "PSoCAPI.h"
Modules

#define SW 0b00010000
#define LED 0b11111110

void main()
{
	
	PRT1DR &= (~SW);
	
	while(1){
		if(PRT1DR & SW){
			PRT1DR &= (~LED);
			PRT0DR &= (~SW);
		}else{
			PRT1DR |= LED;
			PRT1DR &= (~SW);
		}
	}
}

そして私はこのコードでどのような処理をしているのかがよく理解できません。
まず最初の
PRT1DR &= (~SW);
とありますがこれはどういう意味なのですか?
Port14 をHIGHにしているということですか?
またwhile文の中のelseとif文の処理もよくわかりません。

PSoCに詳しい方ご教授願います。

Re: PSoCでSWを押すとLEDが消える回路のプログラムがわかりません。

Posted: 2013年10月07日(月) 20:31
by softya(ソフト屋)
PSoC はチップ名ではないので的確に答えるには型番が必須だと思います。
特には私はPSoC 未経験なので、勘でしか答えれませんのでSW(P14)を押すとLED1(P10)などのピン割り当てに関してはよく分かりません。

これはブール演算を理解する必要性とC言語の文法を理解する必要があります。
PRT1DR &= (~SW);
 ↓ A&=BはA=A&Bと同等
PRT1DR = PRT1DR & (~SW);
これでも分かりませんでしょうか?

>またwhile文の中のelseとif文の処理もよくわかりません。

どこの部分が分からないのでしょうか?