Skin:
[NORMAL]
[BLUE] [DOS] [LIGHT]  / コピーするための表示 / 実行
このファイル: /home/web6047/www/cgi-bin/prj/20190901-DRAMを理解してプログラミングに強くなろう/20200411-adr2bit8_pic.X/newmain - backup 20200412.c
1 #include <stdio.h>
2 #include <stdlib.h>
3 #include <libpic30.h>
4 #include <p24HJ32GP202.h>
5
6
7 //PIC24特有の設定
8 _FBS( BSS_NO_BOOT_CODE & BWRP_WRPROTECT_OFF )
9 _FGS( GSS_OFF & GWRP_OFF )
10 _FOSCSEL( IESO_ON & FNOSC_FRC )
11 _FOSC( FCKSM_CSDCMD & IOL1WAY_OFF & OSCIOFNC_ON & POSCMD_EC )
12 _FWDT( FWDTEN_OFF & WINDIS_OFF & WDTPRE_PR32 & WDTPOST_PS1 )
13 _FPOR( ALTI2C_OFF & FPWRT_PWR32 )
14 _FICD( JTAGEN_OFF & ICS_PGD1 )
15 //FOSCSELで内部FRCを → 選んでいる(動作周波数 7.37 MHz)
16
17
18 //一定時間待つ
19 void delay( unsigned long int num ) {
20 unsigned long int i;
21 for( i = 0; i < num; i++ );
22 }
23
24 //指定回数LEDを点滅する。
25 void tell( int num ) {
26 int i;
27 delay( 50000 ); //間を置いて
28 for( i = 0; i < num; i++ ) {
29 LATBbits.LATB6 = 1;
30 delay( 100000 );
31 LATBbits.LATB6 = 0;
32 delay( 100000 );
33 }
34 delay( 50000 ); //間を置いて
35 }
36
37 //一定時間LEDを点灯する。(チカーッ)
38 void space() {
39 delay( 50000 ); //間を置いて
40 LATBbits.LATB6 = 1;
41 delay( 400000 );
42 LATBbits.LATB6 = 0;
43 delay( 50000 ); //間を置いて
44 }
45
46 int main(int argc, char** argv) {
47 int r1b1, r1b2, r1b3, r1b4, r1b5, r1b6, r1b7, r1b8; //アドレス1の各ビットの読み込み結果を収める変数
48 int r2b1, r2b2, r2b3, r2b4, r2b5, r2b6, r2b7, r2b8; //アドレス2の各ビットの読み込み結果を収める変数
49 int r1, r2; //各アドレスの値(10進)を収める変数
50
51 //100 CLO :' ピン ショキカ
52
53 //PIC24特有の設定 ------------------------------
54 //___CBA9___543210
55 AD1PCFGL = 0b0001111000111111; //アナログ:0、デジタル:1
56 //ピン入出力設定 --------------------------------
57 //43210
58 TRISA = 0b11111; //出力:0、入力:1
59 //FEDCBA9876543210
60 TRISB = 0b0000000000000000; //出力:0、入力:1
61
62
63 //20 'ニシン10ヲ アドレス1ニ カキコミ
64 TRISBbits.TRISB8 = 0; //(ピンを「出力」に設定)
65 TRISBbits.TRISB9 = 0; //(ピンを「出力」に設定)
66 TRISBbits.TRISB10 = 0; //(ピンを「出力」に設定)
67 TRISBbits.TRISB11 = 0; //(ピンを「出力」に設定)
68 TRISBbits.TRISB12 = 0; //(ピンを「出力」に設定)
69 TRISBbits.TRISB13 = 0; //(ピンを「出力」に設定)
70 TRISBbits.TRISB14 = 0; //(ピンを「出力」に設定)
71 TRISBbits.TRISB15 = 0; //(ピンを「出力」に設定)
72 LATBbits.LATB8 = 1; //30 OUT 1,0 :'シュツリョクセッテイ (ピンに0Vを出力) 4
73 LATBbits.LATB9 = 1; //40 OUT 2,1 :'シュツリョクセッテイ (ピンに3Vを出力)
74 LATBbits.LATB10 = 1; //30 OUT 1,0 :'シュツリョクセッテイ (ピンに0Vを出力) 4
75 LATBbits.LATB11 = 0; //30 OUT 1,0 :'シュツリョクセッテイ (ピンに0Vを出力) 4
76 LATBbits.LATB12 = 0; //30 OUT 1,0 :'シュツリョクセッテイ (ピンに0Vを出力) 4
77 LATBbits.LATB13 = 0; //30 OUT 1,0 :'シュツリョクセッテイ (ピンに0Vを出力) 4
78 LATBbits.LATB14 = 0; //30 OUT 1,0 :'シュツリョクセッテイ (ピンに0Vを出力) 4
79 LATBbits.LATB15 = 0; //30 OUT 1,0 :'シュツリョクセッテイ (ピンに0Vを出力) 4
80
81 LATBbits.LATB2 = 1; //50 OUT 7,1 :'トランジスタ オン
82 delay( 30000 ); //60 WAIT 10 :'カキコミ
83 LATBbits.LATB2 = 0; //70 OUT 7,0 :'トランジスタ オフ
84
85 //80 'ニシン01ヲ アドレス2ニ カキコミ
86 TRISBbits.TRISB8 = 0; //(ピンを「出力」に設定)
87 TRISBbits.TRISB9 = 0; //(ピンを「出力」に設定)
88 TRISBbits.TRISB10 = 0; //(ピンを「出力」に設定)
89 TRISBbits.TRISB11 = 0; //(ピンを「出力」に設定)
90 TRISBbits.TRISB12 = 0; //(ピンを「出力」に設定)
91 TRISBbits.TRISB13 = 0; //(ピンを「出力」に設定)
92 TRISBbits.TRISB14 = 0; //(ピンを「出力」に設定)
93 TRISBbits.TRISB15 = 0; //(ピンを「出力」に設定)
94 LATBbits.LATB8 = 1; //90 OUT 1,1 :'シュツリョクセッテイ (ピンに3Vを出力)
95 LATBbits.LATB9 = 0; //100 OUT 2,0 :'シュツリョクセッテイ (ピンに0Vを出力)
96 LATBbits.LATB10 = 1; //30 OUT 1,0 :'シュツリョクセッテイ (ピンに0Vを出力) 4
97 LATBbits.LATB11 = 0; //30 OUT 1,0 :'シュツリョクセッテイ (ピンに0Vを出力) 4
98 LATBbits.LATB12 = 0; //30 OUT 1,0 :'シュツリョクセッテイ (ピンに0Vを出力) 4
99 LATBbits.LATB13 = 0; //30 OUT 1,0 :'シュツリョクセッテイ (ピンに0Vを出力) 4
100 LATBbits.LATB14 = 0; //30 OUT 1,0 :'シュツリョクセッテイ (ピンに0Vを出力) 4
101 LATBbits.LATB15 = 0; //30 OUT 1,0 :'シュツリョクセッテイ (ピンに0Vを出力) 4
102
103 LATBbits.LATB3 = 1; //110 OUT 11,1 :'トランジスタ オン
104 delay( 30000 ); //120 WAIT 10 :'カキコミ
105 LATBbits.LATB3 = 0; //130 OUT 11,0 :'トランジスタ オフ
106
107 //140 'アドレス1ヲ ヨミコミ
108 TRISBbits.TRISB8 = 1; //150 OUT 1,-1 :'ニュウリョク セッテイ
109 TRISBbits.TRISB9 = 1; //160 OUT 2,-1 :'ニュウリョク セッテイ
110 TRISBbits.TRISB10 = 1; //(ピンを「出力」に設定)
111 TRISBbits.TRISB11 = 1; //(ピンを「出力」に設定)
112 TRISBbits.TRISB12 = 1; //(ピンを「出力」に設定)
113 TRISBbits.TRISB13 = 1; //(ピンを「出力」に設定)
114 TRISBbits.TRISB14 = 1; //(ピンを「出力」に設定)
115 TRISBbits.TRISB15 = 1; //(ピンを「出力」に設定)
116
117 LATBbits.LATB2 = 1; //170 OUT 7,1 :'トランジスタ オン
118 delay( 3000 ); //(PIC24Hの場合は少し待つ必要がある)
119 r1b1 = PORTBbits.RB8; //180 ? IN(5) :'ニュウリョク ジッコウ
120 r1b2 = PORTBbits.RB9; //190 ? IN(5) :'ニュウリョク ジッコウ
121 r1b3 = PORTBbits.RB10; //190 ? IN(5) :'ニュウリョク ジッコウ
122 r1b4 = PORTBbits.RB11; //190 ? IN(5) :'ニュウリョク ジッコウ
123 r1b5 = PORTBbits.RB12; //190 ? IN(5) :'ニュウリョク ジッコウ
124 r1b6 = PORTBbits.RB13; //190 ? IN(5) :'ニュウリョク ジッコウ
125 r1b7 = PORTBbits.RB14; //190 ? IN(5) :'ニュウリョク ジッコウ
126 r1b8 = PORTBbits.RB15; //190 ? IN(5) :'ニュウリョク ジッコウ
127 LATBbits.LATB2 = 0; //200 OUT 7,0 :'トランジスタ オフ
128
129 //210 'アドレス2ヲ ヨミコミ
130 TRISBbits.TRISB8 = 1; //220 OUT 1,-1 :'ニュウリョク セッテイ
131 TRISBbits.TRISB9 = 1; //230 OUT 2,-1 :'ニュウリョク セッテイ
132 TRISBbits.TRISB10 = 1; //(ピンを「出力」に設定)
133 TRISBbits.TRISB11 = 1; //(ピンを「出力」に設定)
134 TRISBbits.TRISB12 = 1; //(ピンを「出力」に設定)
135 TRISBbits.TRISB13 = 1; //(ピンを「出力」に設定)
136 TRISBbits.TRISB14 = 1; //(ピンを「出力」に設定)
137 TRISBbits.TRISB15 = 1; //(ピンを「出力」に設定)
138
139 LATBbits.LATB3 = 1; //240 OUT 11,1 :'トランジスタ オン
140 delay( 3000 ); //(PIC24Hの場合は少し待つ必要がある)
141 r2b1 = PORTBbits.RB8; //250 ? IN(5) :'ニュウリョク ジッコウ
142 r2b2 = PORTBbits.RB9; //260 ? IN(6) :'ニュウリョク ジッコウ
143 r2b3 = PORTBbits.RB10; //190 ? IN(5) :'ニュウリョク ジッコウ
144 r2b4 = PORTBbits.RB11; //190 ? IN(5) :'ニュウリョク ジッコウ
145 r2b5 = PORTBbits.RB12; //190 ? IN(5) :'ニュウリョク ジッコウ
146 r2b6 = PORTBbits.RB13; //190 ? IN(5) :'ニュウリョク ジッコウ
147 r2b7 = PORTBbits.RB14; //190 ? IN(5) :'ニュウリョク ジッコウ
148 r2b8 = PORTBbits.RB15; //190 ? IN(5) :'ニュウリョク ジッコウ
149 LATBbits.LATB3 = 0; //160 OUT 11,0 :'トランジスタ オフ
150
151 //280 '0,1,1,0 ト ヒョウジサレマス
152 r1 = r1b8 * 128 + r1b7 * 64 + r1b6 * 32 + r1b5 * 16 + r1b4 * 8 + r1b3 * 4 + r1b2 * 2 + r1b1;
153 r2 = r2b8 * 128 + r2b7 * 64 + r2b6 * 32 + r2b5 * 16 + r2b4 * 8 + r2b3 * 4 + r2b2 * 2 + r2b1;
154
155 space(); //区切りを知らせる合図 チカーッ
156 tell( r1 ); //アドレス1は2進で「10」、10進で「2」なので、2回点滅する。チカッチカッ
157 space(); //区切りを知らせる合図 チカーッ
158 tell( r2 ); //アドレス2は2進で「01」、10進で「1」なので、1回点滅する。チカッ
159 space(); //区切りを知らせる合図 チカーッ
160
161 //終了
162
163
164 //緑のボタンを押すとLED点灯
165 while( 1 ) {
166 //LED
167 if( PORTAbits.RA4 == 1 ) {
168 LATBbits.LATB6 = 1;
169 } else {
170 LATBbits.LATB6 = 0;
171 }
172 }
173
174 return (EXIT_SUCCESS);
175 }