マイコン備忘録
こんにちは!けんとです。
文系出身、プログラミングの超初心者の奮闘日記です。
実は、最近は毎日歩いて出勤してます。
電車の回避も理由にあるのですが、何より体を動かすことが
今日も元気にがんばっていきましょう!!
(内容雑になっているので、時間見て修正します、、)
5/27
SWの精査、タイマの設定の触りが今日の取り組み内容でした。
/*static*/
修飾子と呼ばれるキーワード
関数と変数の参照範囲を限定的にする効果、がある。
〇関数につけた場合
つまり、別のファイルから関数を呼び出すことができなくなる。
〇変数につけた場合
引用元:https://monozukuri-c.com/langc-funclist-static/
/*is_〇〇*/
真偽を示す値を返すとき、変数名を is_〇〇 とするのが通例である。
/*if文*/
①if文 - if文
②if文 - else if文
では動作が異なる。
①は両立するが、②は両立しない
また、知りたかった情報として、else文は省略することができる。
引用元:https://monozukuri-c.com/langc-if/
/*インデント*/
インデントは、範囲選択してまとめてずらすことができる。
ちなみに以下。
/*ポインタ*/
ポインタと引数のちがいは、値が変わらないところにある
/*コードの清書*/
コーディングは、「並列と統一」
sw1が清書、sw2が下書き
set_led の手間を省略して、きれいに見やすくなっているのがわかる
書いているうちに「書き方の型」を覚えていくので、違和感に気付けるようになるとアドバイスをいただいた
#include "type_define.h"
#include "led.h"
#include "sw.h"
void main(void){
//変数定義
int led = 3;
int flag_sw1 = 1;
int flag_sw2 = 1;
int flag_sw3 = 1;
//Pレジスタの初期値
P4 = 0xFF;
P6 = 0xFF;
P10 = 0xFF;
P15 = 0xFF;
//PMレジスタの初期値
PM4 = 0x0;
PM6 = 0x0;
PM10 = 0x0;
PM15 = 0x0;
//LEDの初期値
set_led(LED3, LED_ON);
while(1){
//初期値
WDTE = 0xAC;
//sw1を押したとき、右隣のLEDが点灯&点灯中のLEDが消灯
if(check_chataring_sw(SW1) == 0){
if(check_sw_state(SW1) == 0){
if(flag_sw1 == 1){
set_led(led, LED_OFF);
if(led == 14){
led = 3;
}
else{
led++;
}
set_led(led, LED_ON);
flag_sw1 = 0;
}
}
else{
flag_sw1 = 1;
}
}
//sw2を押したとき、左隣のLEDが点灯&点灯中のLEDが消灯
if(check_chataring_sw(SW2) == 0){
if(check_sw_state(SW2) == 0){
if(flag_sw2 == 1){
set_led(led, LED_OFF);
if(led == 3){
led = 14;
set_led(LED14, LED_ON);
}
else{
set_led(--led, LED_ON);
}
flag_sw2 = 0;
}
}
else{
flag_sw2 = 1;
}
}
/*タイマ*/
マイコン上で時間を作り出す仕組みのことを、タイマ機能という
タイマは複数用意されていることが一般的
クロック選択
カウンタのオーバーフローで割り込みを発生
タイマが数える間隔はクロックと呼ばれるものを基準にしている
クロックは、人間にとっての心臓のようなもの
引用:https://monozukuri-c.com/mbase-timer/
/*割り込み*/
マイコンに搭載されるイベント処理の機構
例外処理要員
割り込みハンドラと呼ばれる特別な関数を呼び出させる
割り込みには複数のレジスタが絡んでくる
割り込みイネーブルレジスタ
割り込みフラグレジスタ
引用:https://monozukuri-c.com/mbase-timer/
/*直地*/
この記事が気に入ったらサポートをしてみませんか?