質問編集履歴

3

今テストしているコードに変更しました。

2019/08/22 05:02

投稿

raspypy
raspypy

スコア247

test CHANGED
File without changes
test CHANGED
@@ -112,7 +112,7 @@
112
112
 
113
113
  while(1){
114
114
 
115
- LED_Flash();
115
+ LED();
116
116
 
117
117
  }
118
118
 
@@ -120,4 +120,64 @@
120
120
 
121
121
 
122
122
 
123
+
124
+
125
+ void LED(void)
126
+
127
+ {
128
+
129
+ //LED初期設定
130
+
131
+ LED1=0;
132
+
133
+ LED2=0;
134
+
135
+ LED3=0;
136
+
137
+
138
+
139
+ if (flag == 0 ){
140
+
141
+ LED1=1;
142
+
143
+ __delay_ms(100); //100msec
144
+
145
+ LED1=0;
146
+
147
+ __delay_ms(100); //100msec
148
+
149
+ LED2=1;
150
+
151
+ __delay_ms(100); //100msec
152
+
153
+ LED2=0;
154
+
155
+ __delay_ms(100); //100msec
156
+
157
+ LED3=1;
158
+
159
+ __delay_ms(100); //100msec
160
+
161
+ LED3=0;
162
+
163
+ }
164
+
165
+ else {
166
+
167
+ while(SW == 0){
168
+
169
+ LED1=1;
170
+
171
+ LED2=1;
172
+
173
+ LED3=1;
174
+
175
+ }
176
+
177
+ }
178
+
179
+ flag=0;
180
+
181
+ }
182
+
123
183
  ```

2

今試しているコードに変更しました。

2019/08/22 05:02

投稿

raspypy
raspypy

スコア247

test CHANGED
File without changes
test CHANGED
@@ -34,9 +34,13 @@
34
34
 
35
35
  T1CON = 0b00110001; //内部クロックの4分の1で,プリスケーラ1:8でカウント(x32)
36
36
 
37
- TMR1H = (55536 >>8); //タイマー1の初期化(65536-10000=55536);
37
+ // 1/8MHz (0.125usec) x 32 = 4usec
38
38
 
39
+ //4usec x 2500 = 10msec
40
+
41
+ TMR1H = (63036 >>8); //タイマー1の初期化(65536-2500=63036);
42
+
39
- TMR1L = (55536 & 0x00ff);
43
+ TMR1L = (63036 & 0x00ff);
40
44
 
41
45
  TMR1IF = 0; //タイマー1割り込みフラグを0にする
42
46
 
@@ -50,97 +54,67 @@
50
54
 
51
55
 
52
56
 
57
+ //割り込み関数
53
58
 
59
+ void interrupt isr(){
54
60
 
55
- while(1){
61
+ GIE = 0;
56
62
 
63
+ if(TMR1IF == 1 && SW ==0){
64
+
65
+ TMR1H = (63036 >>8); //タイマー1の初期化(65536-2500=63036);
66
+
67
+ TMR1L = (63036 & 0x00ff);
68
+
69
+ flag=1;
70
+
71
+ TMR1IF = 0; //割り込みフラグを落とす
72
+
73
+ }
74
+
57
- LED(void);
75
+ GIE = 1;
58
76
 
59
77
  }
60
78
 
61
79
 
62
80
 
63
- //割り込み関数
81
+ void main(void) {
64
82
 
65
- void interrupt isr(){
83
+ OSCCON=0x72; //PLL Disable/8MHz
66
84
 
67
- GIE = 0;
85
+ ANSELA=0x04; //RA2 Analog Setting
68
86
 
69
- if(TMR1IF == 1 && SW==0){
87
+ ANSELC=0x00; //PORTC Digital Setting
70
88
 
71
- TMR1H = (55536 >>8); //タイマー1の初期化(65536-10000=55536);
89
+ TRISA=0x04; //RA2 Input
72
90
 
73
- TMR1L = (55536 & 0x00ff);
91
+ TRISC=0x28; //RC5, RC3 Input
74
92
 
75
- flag=1;
93
+ LATC=0x00;
76
94
 
77
- TMR1IF = 0; //割り込みフラグを落とす
95
+
78
-
79
- }
80
-
81
- GIE = 1;
82
-
83
- }
84
96
 
85
97
 
86
98
 
87
- void LED(void)
99
+ //LED初期設定
88
100
 
89
- {
101
+ LED1=0; //1: 点灯/0: 消灯
90
102
 
91
- SW = PORTAbits.RA4
103
+ LED2=0; //1: 点灯/0: 消灯
92
104
 
93
- LEDR=0;
105
+ LED3=0; //1: 点灯/0: 消灯
94
106
 
95
- LEDG=0;
107
+ __delay_ms(100); //100msec
96
108
 
97
- LEDB=0;
109
+
98
-
99
- if (flag ==0 ){
100
-
101
- LEDR=1;
102
-
103
- __delay_ms(100); //100msec
104
-
105
- LEDR=0;
106
-
107
- __delay_ms(100); //100msec
108
-
109
- LEDG=1;
110
-
111
- __delay_ms(100); //100msec
112
-
113
- LEDG=0;
114
-
115
- __delay_ms(100); //100msec
116
-
117
- LEDB=1;
118
-
119
- __delay_ms(100); //100msec
120
-
121
- LEDB=0;
122
-
123
- }
124
-
125
- else {
126
-
127
- while(SW== 0){
128
-
129
- SW = PORTAbits.RA4
130
-
131
- LEDR=1;
132
-
133
- LEDG=1;
134
-
135
- LEDB=1;
136
-
137
- }
138
-
139
- }
140
-
141
- flag=0;
142
110
 
143
111
 
112
+
113
+ while(1){
114
+
115
+ LED_Flash();
116
+
117
+ }
144
118
 
145
119
  }
146
120
 

1

コードを修正しました。

2019/08/22 05:01

投稿

raspypy
raspypy

スコア247

test CHANGED
File without changes
test CHANGED
@@ -24,25 +24,27 @@
24
24
 
25
25
  ```html
26
26
 
27
+ int flag;
28
+
27
- #define SW PORTAbits.RA4
29
+ #define SW PORTAbits.RA4
28
30
 
29
31
 
30
32
 
31
- void intrInit(){ //割り込みの初期設定
33
+ void intrInit(){ //割り込みの初期設定
32
34
 
33
- T1CON = 0b00110001; //内部クロックの4分の1で,プリスケーラ1:8でカウント(x32)
35
+ T1CON = 0b00110001; //内部クロックの4分の1で,プリスケーラ1:8でカウント(x32)
34
36
 
35
- TMR1H = (55536 >>8); //タイマー1の初期化(65536-10000=55536);
37
+ TMR1H = (55536 >>8); //タイマー1の初期化(65536-10000=55536);
36
38
 
37
- TMR1L = (55536 & 0x00ff);
39
+ TMR1L = (55536 & 0x00ff);
38
40
 
39
- TMR1IF = 0; //タイマー1割り込みフラグを0にする
41
+ TMR1IF = 0; //タイマー1割り込みフラグを0にする
40
42
 
41
- TMR1IE = 1; //タイマー1割り込みを許可する
43
+ TMR1IE = 1; //タイマー1割り込みを許可する
42
44
 
43
- INTCONbits.GIE = 1; //グローバル割り込みを許可
45
+ INTCONbits.GIE = 1; //グローバル割り込みを許可
44
46
 
45
- INTCONbits.PEIE = 1; //割り込みを許可
47
+ INTCONbits.PEIE = 1; //割り込みを許可
46
48
 
47
49
  }
48
50
 
@@ -50,35 +52,11 @@
50
52
 
51
53
 
52
54
 
53
- void LED(void)
55
+ while(1){
54
56
 
55
- {
56
-
57
- LEDR=1;
57
+ LED(void);
58
-
59
- __delay_ms(100); //100msec
60
-
61
- LEDR=0;
62
-
63
- __delay_ms(100); //100msec
64
-
65
- LEDG=1;
66
-
67
- __delay_ms(100); //100msec
68
-
69
- LEDG=0;
70
-
71
- __delay_ms(100); //100msec
72
-
73
- LEDB=1;
74
-
75
- __delay_ms(100); //100msec
76
-
77
- LEDB=0;
78
58
 
79
59
  }
80
-
81
-
82
60
 
83
61
 
84
62
 
@@ -90,23 +68,13 @@
90
68
 
91
69
  if(TMR1IF == 1 && SW==0){
92
70
 
93
- TMR1H = (55536 >>8); //タイマー1の初期化(65536-10000=55536);
71
+ TMR1H = (55536 >>8); //タイマー1の初期化(65536-10000=55536);
94
72
 
95
- TMR1L = (55536 & 0x00ff);
73
+ TMR1L = (55536 & 0x00ff);
96
74
 
97
- while(SW== 0){
75
+ flag=1;
98
76
 
99
- LEDR=1;
100
-
101
- LEDG=1;
102
-
103
- LEDB=1;
104
-
105
- }
106
-
107
-
108
-
109
- TMR1IF = 0; //割り込みフラグを落とす
77
+ TMR1IF = 0; //割り込みフラグを落とす
110
78
 
111
79
  }
112
80
 
@@ -116,4 +84,66 @@
116
84
 
117
85
 
118
86
 
87
+ void LED(void)
88
+
89
+ {
90
+
91
+ SW = PORTAbits.RA4
92
+
93
+ LEDR=0;
94
+
95
+ LEDG=0;
96
+
97
+ LEDB=0;
98
+
99
+ if (flag ==0 ){
100
+
101
+ LEDR=1;
102
+
103
+ __delay_ms(100); //100msec
104
+
105
+ LEDR=0;
106
+
107
+ __delay_ms(100); //100msec
108
+
109
+ LEDG=1;
110
+
111
+ __delay_ms(100); //100msec
112
+
113
+ LEDG=0;
114
+
115
+ __delay_ms(100); //100msec
116
+
117
+ LEDB=1;
118
+
119
+ __delay_ms(100); //100msec
120
+
121
+ LEDB=0;
122
+
123
+ }
124
+
125
+ else {
126
+
127
+ while(SW== 0){
128
+
129
+ SW = PORTAbits.RA4
130
+
131
+ LEDR=1;
132
+
133
+ LEDG=1;
134
+
135
+ LEDB=1;
136
+
137
+ }
138
+
139
+ }
140
+
141
+ flag=0;
142
+
143
+
144
+
145
+ }
146
+
147
+
148
+
119
149
  ```