Skin:
[NORMAL]
[BLUE] [DOS] [LIGHT]  / コピーするための表示 / 実行
このファイル: /home/web6047/www/cgi-bin/prj/20190901-DRAMを理解してプログラミングに強くなろう/20200222-dram2x2test.X/newmain - snapshot 20200222.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; //アドレス1の各ビットの読み込み結果を収める変数
48 int r2b1, r2b2; //アドレス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 LATBbits.LATB8 = 0; //30 OUT 1,0 :'シュツリョクセッテイ (ピンに0Vを出力)
67 LATBbits.LATB9 = 1; //40 OUT 2,1 :'シュツリョクセッテイ (ピンに3Vを出力)
68
69 LATBbits.LATB2 = 1; //50 OUT 7,1 :'トランジスタ オン
70 delay( 30000 ); //60 WAIT 10 :'カキコミ
71 LATBbits.LATB2 = 0; //70 OUT 7,0 :'トランジスタ オフ
72
73 //80 'ニシン01ヲ アドレス2ニ カキコミ
74 TRISBbits.TRISB8 = 0; //(ピンを「出力」に設定)
75 TRISBbits.TRISB9 = 0; //(ピンを「出力」に設定)
76 LATBbits.LATB8 = 1; //90 OUT 1,1 :'シュツリョクセッテイ (ピンに3Vを出力)
77 LATBbits.LATB9 = 0; //100 OUT 2,0 :'シュツリョクセッテイ (ピンに0Vを出力)
78
79 LATBbits.LATB3 = 1; //110 OUT 11,1 :'トランジスタ オン
80 delay( 30000 ); //120 WAIT 10 :'カキコミ
81 LATBbits.LATB3 = 0; //130 OUT 11,0 :'トランジスタ オフ
82
83 //140 'アドレス1ヲ ヨミコミ
84 TRISBbits.TRISB8 = 1; //150 OUT 1,-1 :'ニュウリョク セッテイ
85 TRISBbits.TRISB9 = 1; //160 OUT 2,-1 :'ニュウリョク セッテイ
86
87 LATBbits.LATB2 = 1; //170 OUT 7,1 :'トランジスタ オン
88 delay( 3000 ); //(PIC24Hの場合は少し待つ必要がある)
89 r1b1 = PORTBbits.RB8; //180 ? IN(5) :'ニュウリョク ジッコウ
90 r1b2 = PORTBbits.RB9; //190 ? IN(5) :'ニュウリョク ジッコウ
91 LATBbits.LATB2 = 0; //200 OUT 7,0 :'トランジスタ オフ
92
93 //210 'アドレス2ヲ ヨミコミ
94 TRISBbits.TRISB8 = 1; //220 OUT 1,-1 :'ニュウリョク セッテイ
95 TRISBbits.TRISB9 = 1; //230 OUT 2,-1 :'ニュウリョク セッテイ
96
97 LATBbits.LATB3 = 1; //240 OUT 11,1 :'トランジスタ オン
98 delay( 3000 ); //(PIC24Hの場合は少し待つ必要がある)
99 r2b1 = PORTBbits.RB8; //250 ? IN(5) :'ニュウリョク ジッコウ
100 r2b2 = PORTBbits.RB9; //260 ? IN(6) :'ニュウリョク ジッコウ
101 LATBbits.LATB3 = 0; //160 OUT 11,0 :'トランジスタ オフ
102
103 //280 '0,1,1,0 ト ヒョウジサレマス
104 r1 = r1b2 * 2 + r1b1;
105 r2 = r2b2 * 2 + r2b1;
106
107 space(); //区切りを知らせる合図 チカーッ
108 tell( r1 ); //アドレス1は2進で「10」、10進で「2」なので、2回点滅する。チカッチカッ
109 space(); //区切りを知らせる合図 チカーッ
110 tell( r2 ); //アドレス2は2進で「01」、10進で「1」なので、1回点滅する。チカッ
111 space(); //区切りを知らせる合図 チカーッ
112
113 //終了
114
115
116 //緑のボタンを押すとLED点灯
117 while( 1 ) {
118 //LED
119 if( PORTAbits.RA4 == 1 ) {
120 LATBbits.LATB6 = 1;
121 } else {
122 LATBbits.LATB6 = 0;
123 }
124 }
125
126 return (EXIT_SUCCESS);
127 }