質問編集履歴
2
ご教示ありがとうございます。コードを見やすくしました。ご確認お願いいたします。
test
CHANGED
File without changes
|
test
CHANGED
@@ -36,6 +36,8 @@
|
|
36
36
|
|
37
37
|
|
38
38
|
|
39
|
+
```ここに言語を入力
|
40
|
+
|
39
41
|
#define _XTAL_FREQ 2000000
|
40
42
|
|
41
43
|
|
@@ -44,25 +46,25 @@
|
|
44
46
|
|
45
47
|
//マイコン設定
|
46
48
|
|
47
|
-
OSCCON = 0b01100000;
|
49
|
+
OSCCON = 0b01100000; //内部クロック周波数を2MHzに設定
|
48
50
|
|
49
|
-
ANSELA = 0b00000000;
|
51
|
+
ANSELA = 0b00000000; //PortA全てのピンをデジタルモードに設定
|
50
52
|
|
51
|
-
ANSELC = 0b00000000;
|
53
|
+
ANSELC = 0b00000000; //PortC全てのピンをデジタルモードに設定
|
52
54
|
|
53
|
-
TRISA = 0b00000000;
|
55
|
+
TRISA = 0b00000000; //PortA全てのピンを入力モードに設定
|
54
56
|
|
55
|
-
TRISC = 0b00000000;
|
57
|
+
TRISC = 0b00000000; //PortC全てのピンを出力モードに設定
|
56
58
|
|
57
59
|
|
58
60
|
|
59
61
|
//初期処理:電源ON後、全ての出力を一度OFFにする。
|
60
62
|
|
61
|
-
LATC0
|
63
|
+
LATC0=0; //LED1
|
62
64
|
|
63
|
-
LATC1
|
65
|
+
LATC1=0; //LED2
|
64
66
|
|
65
|
-
LATC2
|
67
|
+
LATC2=0; //BZ
|
66
68
|
|
67
69
|
|
68
70
|
|
@@ -72,15 +74,15 @@
|
|
72
74
|
|
73
75
|
if(RA5==1){
|
74
76
|
|
75
|
-
int cnt=0;
|
77
|
+
int cnt=0; //PB1がONの時、最初にカウンタに0を代入
|
76
78
|
|
77
|
-
while(cnt<10000 && RA4==0){
|
79
|
+
while(cnt<10000 && RA4==0){ //カウント値が30秒以下、PB2 OFFの時、下を実行
|
78
80
|
|
79
|
-
LATC2
|
81
|
+
LATC2=1; //BZ ON
|
80
82
|
|
81
|
-
if(cnt
|
83
|
+
if(cnt%500<250)LATC0=1; //LED1 ON
|
82
84
|
|
83
|
-
else LATC0=0;
|
85
|
+
else LATC0=0; //LED1 OFF
|
84
86
|
|
85
87
|
__delay_ms(1);
|
86
88
|
|
@@ -88,17 +90,17 @@
|
|
88
90
|
|
89
91
|
}
|
90
92
|
|
91
|
-
while(cnt==10000){
|
93
|
+
while(cnt==10000){ //カウント値が10秒に達したら下を実行
|
92
94
|
|
93
|
-
LATC0=0;
|
95
|
+
LATC0=0; //LED1 OFF
|
94
96
|
|
95
|
-
LATC2=0;
|
97
|
+
LATC2=0; //BZ OFF
|
96
98
|
|
97
|
-
while(RA4==0){
|
99
|
+
while(RA4==0){ //PB2を押さない限り下を実行
|
98
100
|
|
99
|
-
if(cnt%1000<500)LATC1=1;
|
101
|
+
if(cnt%1000<500)LATC1=1; //LED2 ON
|
100
102
|
|
101
|
-
else LATC1=0;
|
103
|
+
else LATC1=0; //LED2 OFF
|
102
104
|
|
103
105
|
__delay_ms(1);
|
104
106
|
|
@@ -108,11 +110,11 @@
|
|
108
110
|
|
109
111
|
}
|
110
112
|
|
111
|
-
LATC0=0;
|
113
|
+
LATC0=0; //LED1 OFF
|
112
114
|
|
113
|
-
LATC1=0;
|
115
|
+
LATC1=0; //LED2 OFF
|
114
116
|
|
115
|
-
LATC2=0;
|
117
|
+
LATC2=0; //BZ OFF
|
116
118
|
|
117
119
|
}
|
118
120
|
|
@@ -124,13 +126,17 @@
|
|
124
126
|
|
125
127
|
|
126
128
|
|
129
|
+
|
130
|
+
|
127
|
-
### 試したこと
|
131
|
+
```### 試したこと
|
128
132
|
|
129
133
|
①の10秒カウントについて
|
130
134
|
|
131
135
|
・点滅コードが原因かと思い、LED1の点滅をやめて10間点灯に変更すると正常に10後LED2が点滅した。
|
132
136
|
|
133
137
|
・点滅コードを
|
138
|
+
|
139
|
+
```ここに言語を入力
|
134
140
|
|
135
141
|
for(timer=0;teimer<10;timer++){
|
136
142
|
|
@@ -142,7 +148,9 @@
|
|
142
148
|
|
143
149
|
__delay_ms(500);
|
144
150
|
|
151
|
+
|
152
|
+
|
145
|
-
にすると、PB2を押してもキャンセルされない時がある。
|
153
|
+
```にすると、PB2を押してもキャンセルされない時がある。
|
146
154
|
|
147
155
|
②の点滅が点灯に代わってしまう事について
|
148
156
|
|
1
記述を統一しました。
test
CHANGED
File without changes
|
test
CHANGED
@@ -44,41 +44,43 @@
|
|
44
44
|
|
45
45
|
//マイコン設定
|
46
46
|
|
47
|
-
OSCCON = 0b01100000;//内部クロック周波数を2MHzに設定
|
47
|
+
OSCCON = 0b01100000; //内部クロック周波数を2MHzに設定
|
48
48
|
|
49
|
-
ANSELA = 0b00000000;//PortA全てのピンをデジタルモードに設定
|
49
|
+
ANSELA = 0b00000000; //PortA全てのピンをデジタルモードに設定
|
50
50
|
|
51
|
-
ANSELC = 0b00000000;//PortC全てのピンをデジタルモードに設定
|
51
|
+
ANSELC = 0b00000000; //PortC全てのピンをデジタルモードに設定
|
52
52
|
|
53
|
-
TRISA = 0b00000000;//PortA全てのピンを入力モードに設定
|
53
|
+
TRISA = 0b00000000; //PortA全てのピンを入力モードに設定
|
54
54
|
|
55
|
-
TRISC = 0b00000000;//PortC全てのピンを出力モードに設定
|
55
|
+
TRISC = 0b00000000; //PortC全てのピンを出力モードに設定
|
56
56
|
|
57
57
|
|
58
58
|
|
59
59
|
//初期処理:電源ON後、全ての出力を一度OFFにする。
|
60
60
|
|
61
|
-
LATC0 = 0;//
|
61
|
+
LATC0 = 0; //LED1
|
62
62
|
|
63
|
-
LATC1 = 0;//
|
63
|
+
LATC1 = 0; //LED2
|
64
64
|
|
65
|
-
LATC2 = 0;//BZ
|
65
|
+
LATC2 = 0; //BZ
|
66
66
|
|
67
|
+
|
68
|
+
|
67
|
-
//RA5:
|
69
|
+
//RA5:PB1、RA4:PB2
|
68
70
|
|
69
71
|
while(1){
|
70
72
|
|
71
73
|
if(RA5==1){
|
72
74
|
|
73
|
-
int cnt=0;//
|
75
|
+
int cnt=0; //PB1がONの時、最初にカウンタに0を代入
|
74
76
|
|
75
|
-
while(cnt<10000 && RA4==0){//カウント値が30秒以下、
|
77
|
+
while(cnt<10000 && RA4==0){ //カウント値が30秒以下、PB2 OFFの時、下を実行
|
76
78
|
|
77
|
-
LATC2 = 1;//BZ ON
|
79
|
+
LATC2 = 1; //BZ ON
|
78
80
|
|
79
|
-
if(cnt1%500<250)LATC0=1;//
|
81
|
+
if(cnt1%500<250)LATC0=1; //LED1 ON
|
80
82
|
|
81
|
-
else LATC0=0;//
|
83
|
+
else LATC0=0; //LED1 OFF
|
82
84
|
|
83
85
|
__delay_ms(1);
|
84
86
|
|
@@ -86,17 +88,17 @@
|
|
86
88
|
|
87
89
|
}
|
88
90
|
|
89
|
-
while(cnt==10000){//カウント値が10秒に達したら下を実行
|
91
|
+
while(cnt==10000){ //カウント値が10秒に達したら下を実行
|
90
92
|
|
91
|
-
LATC0=0;//
|
93
|
+
LATC0=0; //LED1 OFF
|
92
94
|
|
93
|
-
LATC2=0;//BZ OFF
|
95
|
+
LATC2=0; //BZ OFF
|
94
96
|
|
95
|
-
while(RA4==0){//
|
97
|
+
while(RA4==0){ //PB2を押さない限り下を実行
|
96
98
|
|
97
|
-
if(cnt%1000<500)LATC1=1;//
|
99
|
+
if(cnt%1000<500)LATC1=1; //LED2 ON
|
98
100
|
|
99
|
-
else LATC1=0;//
|
101
|
+
else LATC1=0; //LED2 OFF
|
100
102
|
|
101
103
|
__delay_ms(1);
|
102
104
|
|
@@ -106,11 +108,11 @@
|
|
106
108
|
|
107
109
|
}
|
108
110
|
|
109
|
-
LATC0=0;//
|
111
|
+
LATC0=0; //LED1 OFF
|
110
112
|
|
111
|
-
LATC1=0;//
|
113
|
+
LATC1=0; //LED2 OFF
|
112
114
|
|
113
|
-
LATC2=0;//BZ OFF
|
115
|
+
LATC2=0; //BZ OFF
|
114
116
|
|
115
117
|
}
|
116
118
|
|