Skin:
[NORMAL]
[BLUE] [DOS] [LIGHT]  / コピーするための表示 / 実行
このファイル: /home/web6047/www/cgi-bin/prj/20190901-DRAMを理解してプログラミングに強くなろう/20191021-8bitPIC24H.X/newmain - snapshot 20191027.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 r;
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;
59
60
61 //10進数123は2進数で 0111 1011
62 //110 ' ジョウホウ 123(dec) カキコミ
63 LATBbits.LATB8 = 1; //120 OUT 1,1:'セツメイノピンシュツリョクSET★★★
64 LATBbits.LATB9 = 1; //121 OUT 2,1:'セツメイノピンシュツリョクSET★★★
65 LATBbits.LATB10 = 0; //122 OUT 3,0:'セツメイノピンシュツリョクSET★★★
66 LATBbits.LATB11 = 1; //123 OUT 4,1:'セツメイノピンシュツリョクSET★★★
67
68 LATBbits.LATB12 = 1; //124 OUT 5,1:'セツメイノピンシュツリョクSET★★★
69 LATBbits.LATB13 = 1; //125 OUT 6,1:'セツメイノピンシュツリョクSET★★★
70 LATBbits.LATB14 = 1; //126 OUT 8,1:'セツメイノピンシュツリョクSET★★★
71 LATBbits.LATB15 = 0; //127 OUT 9,0:'セツメイノピンシュツリョクSET★★★
72
73 LATBbits.LATB2 = 1; //130 OUT 7,1:'セツメイノピンAトランジスタオン
74 delay( 30000 ); //140 WAIT 10:'カキコミ
75 LATBbits.LATB2 = 0; //150 OUT 7,0:'セツメイノピンAトランジスタオフ
76
77 //160 ' ジョウホウ ヲ ヨム
78 TRISBbits.TRISB8 = 1; //170 OUT 1,-1:'セツメイノピンニュウリョクSET
79 TRISBbits.TRISB9 = 1; //171 OUT 2,-1:'セツメイノピンニュウリョクSET
80 TRISBbits.TRISB10 = 1; //172 OUT 3,-1:'セツメイノピンニュウリョクSET
81 TRISBbits.TRISB11 = 1; //173 OUT 4,-1:'セツメイノピンニュウリョクSET
82
83 TRISBbits.TRISB12 = 1; //174 OUT 5,-1:'セツメイノピンニュウリョクSET
84 TRISBbits.TRISB13 = 1; //175 OUT 6,-1:'セツメイノピンニュウリョクSET
85 TRISBbits.TRISB14 = 1; //176 OUT 8,-1:'セツメイノピンニュウリョクSET
86 TRISBbits.TRISB15 = 1; //177 OUT 9,-1:'セツメイノピンニュウリョクSET
87
88 LATBbits.LATB2 = 1; //180 OUT 7,1 :'セツメイ ノ ピンA トランジスタ オン
89
90 r = 0;
91 r = r + PORTBbits.RB8; //190 ? IN(5):'セツメイノピンウケトリ
92 r = r + PORTBbits.RB9 * 2; //191 ? IN(6):'セツメイノピンウケトリ
93 r = r + PORTBbits.RB10 * 4; //192 ? IN(7):'セツメイノピンウケトリ
94 r = r + PORTBbits.RB11 * 8; //193 ? IN(8):'セツメイノピンウケトリ
95 r = r + PORTBbits.RB12 * 16; //194 ? IN(10):'セツメイノピンウケトリ
96 r = r + PORTBbits.RB13 * 32; //195 ? IN(11):'セツメイノピンウケトリ
97 r = r + PORTBbits.RB14 * 64; //196 ? IN(1):'セツメイノピンウケトリ
98 r = r + PORTBbits.RB15 * 128; //197 ? IN(2):'セツメイノピンウケトリ
99
100 LATBbits.LATB2 = 0; //200 OUT 7,0 :'セツメイノピンAトンジスタオフ
101
102 //ヒョウジ
103
104 //10進数を桁毎にLEDで表示する
105 int keta1 = r % 10;
106 int keta10 = ( r % 100 ) / 10;
107 int keta100 = r / 100;
108
109 tell( keta100 ); //百の位の数だけLEDを点滅する
110 space(); //区切りを知らせる合図 チカーッ
111 tell( keta10 ); //十の位の数だけLEDを点滅する
112 space(); //区切りを知らせる合図 チカーッ
113 tell( keta1 ); //一の位の数だけLEDを点滅する
114
115 //「1」は、チカーッ チカーッ 1回点滅
116 //「10」は、チカーッ 1回点滅 チカーッ
117 //「100」は、1回点滅 チカーッ チカーッ
118 //「123」は、1回点滅 チカーッ 2回点滅 チカーッ 3回点滅
119
120
121 //緑のボタンを押すとLED点灯
122 while( 1 ) {
123 //LED
124 if( PORTAbits.RA4 == 1 ) {
125 LATBbits.LATB6 = 1;
126 } else {
127 LATBbits.LATB6 = 0;
128 }
129 }
130
131 return (EXIT_SUCCESS);
132 }