Skin:
[NORMAL]
[BLUE] [DOS] [LIGHT]  / コピーするための表示 / 実行
このファイル: /home/web6047/www/cgi-bin/prj/20190901-DRAMを理解してプログラミングに強くなろう/20191116-2adr1bitPIC24H.X/newmain - snapshot 20191117.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 unsigned long int i;
48 int r1, r2;
49 //100 CLO :' ピン ショキカ
50
51 //PIC24特有の設定 ------------------------------
52 //___CBA9___543210
53 AD1PCFGL = 0b0001111000111111; //アナログ:0、デジタル:1
54 //ピン入出力設定 --------------------------------
55 //43210
56 TRISA = 0b11111; //出力:0、入力:1
57 //FEDCBA9876543210
58 TRISB = 0b0000000000000000; //出力:0、入力:1
59
60
61 //20 '1ヲ アドレス1ニ カキコミ
62 TRISBbits.TRISB8 = 0; //30 OUT 1,1 :'シュツリョクセッテイ (出力に設定)
63 LATBbits.LATB8 = 1; // (1を出力)
64 LATBbits.LATB2 = 1; //40 OUT 7,1 :'トランジスタ オン
65 delay( 30000 ); //50 WAIT 10 :'カキコミ
66 LATBbits.LATB2 = 0; //60 OUT 7,0 :'トランジスタ オフ
67
68 //70 '0ヲ アドレス2ニ カキコミ
69 TRISBbits.TRISB8 = 0; //80 OUT 1,0 :'シュツリョクセッテイ (出力に設定)
70 LATBbits.LATB8 = 0; // (0を出力)
71 LATBbits.LATB3 = 1; //90 OUT 11,1 :'トランジスタ オン
72 delay( 30000 ); //100 WAIT 10 :'カキコミ
73 LATBbits.LATB3 = 0; //110 OUT 11,0 :'トランジスタ オフ
74
75 //120 'アドレス1ヲ ヨミコミ
76 TRISBbits.TRISB8 = 1; //130 OUT 1,-1 :'ニュウリョク セッテイ
77 LATBbits.LATB2 = 1; //140 OUT 7,1 :'トランジスタ オン
78 delay( 3000 ); //(PIC24Hの場合は少し待つ必要がある)
79 r1 = PORTBbits.RB8; //150 ? IN(5) :'ニュウリョク ジッコウ
80 LATBbits.LATB2 = 0; //160 OUT 7,0 :'トランジスタ オフ
81
82 //170 'アドレス2ヲ ヨミコミ
83 TRISBbits.TRISB8 = 1; //180 OUT 1,-1 :'ニュウリョク セッテイ
84 LATBbits.LATB3 = 1; //190 OUT 11,1 :'トランジスタ オン
85 delay( 3000 ); //(PIC24Hの場合は少し待つ必要がある)
86 r2 = PORTBbits.RB8; //200 ? IN(5) :'ニュウリョク ジッコウ
87 LATBbits.LATB3 = 0; //210 OUT 11,0 :'トランジスタ オフ
88
89 //220 '1ト0ガ ヒョウジサレマス
90
91 space(); //区切りを知らせる合図 チカーッ
92 tell( r1 ); //アドレス1が「1」ならLEDを1回点滅する。「0」なら点滅しない
93 space(); //区切りを知らせる合図 チカーッ
94 tell( r2 ); //アドレス2が「1」ならLEDを1回点滅する。「0」なら点滅しない
95 space(); //区切りを知らせる合図 チカーッ
96
97 //アドレス1は1、アドレス2は0なので、
98 //チカーッ チカッ チカーッ … チカーッ となるはず。
99
100
101
102 //緑のボタンを押すとLED点灯
103 while( 1 ) {
104 //LED
105 if( PORTAbits.RA4 == 1 ) {
106 LATBbits.LATB6 = 1;
107 } else {
108 LATBbits.LATB6 = 0;
109 }
110 }
111
112 return (EXIT_SUCCESS);
113 }