このファイル: /home/web6047/www/cgi-bin/prj/20190901-DRAMを理解してプログラミングに強くなろう/20200411-adr2bit8_pic.X/newmain - snapshot 20200412.c
1
2
3
4
#include <stdio.h>
5
#include <stdlib.h>
6
#include <libpic30.h>
7
#include <p24HJ32GP202.h>
8
9
10
11
_FBS( BSS_NO_BOOT_CODE & BWRP_WRPROTECT_OFF )
12
_FGS( GSS_OFF & GWRP_OFF )
13
_FOSCSEL( IESO_ON & FNOSC_FRC )
14
15
_FOSC( FCKSM_CSDCMD & IOL1WAY_OFF & OSCIOFNC_ON & POSCMD_NONE )
16
_FWDT( FWDTEN_OFF & WINDIS_OFF & WDTPRE_PR32 & WDTPOST_PS1 )
17
_FPOR( ALTI2C_ON & FPWRT_PWR32 )
18
_FICD( JTAGEN_OFF & ICS_PGD1 )
19
20
21
22
23
24
25
26
void blankloop( unsigned long num ) {
27
for( ; num > 0; num-- ) {}
28
}
29
void tell( int num ) {
30
unsigned long i;
31
int j;
32
for( i = 0; i < 300000; i++ );
33
for( j = 0; j < num; j++ ) {
34
LATBbits.LATB1 = 1;
35
for( i = 0; i < 100000; i++ );
36
LATBbits.LATB1 = 0;
37
for( i = 0; i < 100000; i++ );
38
}
39
}
40
void setI2C( unsigned char databyte ) {
41
42
43
44
45
I2C1CONbits.SEN = 1;
46
while( I2C1CONbits.SEN ) {};
47
48
49
I2C1TRN = 0x7c;
50
51
52
while( I2C1STATbits.TBF ) {}
53
while( I2C1STATbits.TRSTAT ) {}
54
if( I2C1STATbits.ACKSTAT ) {
55
56
}
57
58
59
60
I2C1TRN = 0b00000000;
61
62
63
while( I2C1STATbits.TBF ) {}
64
while( I2C1STATbits.TRSTAT ) {}
65
if( I2C1STATbits.ACKSTAT ) {
66
67
}
68
69
70
I2C1TRN = databyte;
71
72
73
while( I2C1STATbits.TBF ) {}
74
while( I2C1STATbits.TRSTAT ) {}
75
if( I2C1STATbits.ACKSTAT ) {
76
77
}
78
79
80
while( I2C1CON & 0b0000000000011111 != 0 ) {}
81
I2C1CONbits.PEN = 1;
82
while( I2C1CONbits.PEN ) {};
83
}
84
void startI2C() {
85
I2C1CONbits.SEN = 1;
86
while( I2C1CONbits.SEN ) {};
87
88
blankloop( 60000 );
89
I2C1TRN = 0x7c;
90
while( I2C1STATbits.TBF ) {}
91
if( I2C1STATbits.ACKSTAT ) {
92
93
}
94
}
95
void sendI2C( d ) {
96
97
I2C1TRN = 0b11000000;
98
while( I2C1STATbits.TBF ) {}
99
while( I2C1STATbits.TRSTAT ) {}
100
if( I2C1STATbits.ACKSTAT ) {
101
102
}
103
104
I2C1TRN = d;
105
while( I2C1STATbits.TBF ) {}
106
while( I2C1STATbits.TRSTAT ) {}
107
if( I2C1STATbits.ACKSTAT ) {
108
109
}
110
}
111
void stopI2C() {
112
while( I2C1CON & 0b0000000000011111 != 0 ) {}
113
I2C1CONbits.PEN = 1;
114
while( I2C1CONbits.PEN ) {};
115
}
116
void lcdStr( char *str ) {
117
startI2C();
118
while( *str != '\0' ) {
119
sendI2C( *str );
120
str++;
121
}
122
stopI2C();
123
}
124
void lcdNum( int num ) {
125
char str[ 8 ];
126
snprintf( str, 8, "%d", num );
127
lcdStr( str );
128
}
129
void lcdLocate( unsigned char x, unsigned char y ) {
130
setI2C( 0b10000000 + y * 0x40 + x );
131
}
132
void lcdClr() {
133
setI2C( 0x01 );
134
}
135
136
137
138
void delay( unsigned long int num ) {
139
unsigned long int i;
140
for( i = 0; i < num; i++ );
141
}
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
void space() {
160
delay( 50000 );
161
LATBbits.LATB6 = 1;
162
delay( 400000 );
163
LATBbits.LATB6 = 0;
164
delay( 50000 );
165
}
166
167
int main(int argc, char** argv) {
168
int r1b1=0, r1b2=0, r1b3=0, r1b4=0, r1b5=0, r1b6=0, r1b7=0, r1b8=0;
169
int r2b1=0, r2b2=0, r2b3=0, r2b4=0, r2b5=0, r2b6=0, r2b7=0, r2b8=0;
170
int r1, r2;
171
172
173
174
175
176
177
178
AD1PCFGL = 0b0001111000111111;
179
180
181
TRISA = 0b11111;
182
183
TRISB = 0b0000000000000000;
184
185
186
I2C1BRG = 8;
187
I2C1CONbits.I2CEN = 1;
188
189
190
setI2C( 0x38 );
191
setI2C( 0x3d );
192
setI2C( 0x1d );
193
setI2C( 0x56 );
194
setI2C( 0x6b );
195
setI2C( 0x70 );
196
setI2C( 0x39 );
197
setI2C( 0x0f );
198
lcdClr();
199
200
lcdStr( %%dquote1%% );
201
lcdLocate( 0, 1 );
202
lcdStr( %%dquote2%% );
203
delay( 500000 );
204
delay( 500000 );
205
206
207
208
unsigned int writetime = 5000;
209
unsigned int readtime = 0;
210
211
ニシン10ヲ アドレス1ニ カキコミ
212
TRISBbits.TRISB8 = 0;
213
TRISBbits.TRISB9 = 0;
214
TRISBbits.TRISB10 = 0;
215
TRISBbits.TRISB11 = 0;
216
TRISAbits.TRISA0 = 0;
217
TRISAbits.TRISA1 = 0;
218
TRISAbits.TRISA2 = 0;
219
TRISAbits.TRISA3 = 0;
220
LATBbits.LATB8 = 1;
221
LATBbits.LATB9 = 1; シュツリョクセッテイ (ピンに3Vを出力)
222
LATBbits.LATB10 = 0;
223
LATBbits.LATB11 = 1; シュツリョクセッテイ (ピンに0Vを出力) 4
224
LATAbits.LATA0 = 1;
225
LATAbits.LATA1 = 1; シュツリョクセッテイ (ピンに0Vを出力) 4
226
LATAbits.LATA2 = 1;
227
LATAbits.LATA3 = 0; シュツリョクセッテイ (ピンに0Vを出力) 4
228
229
230
LATBbits.LATB2 = 1;
231
delay( writetime ); カキコミ
232
LATBbits.LATB2 = 0;
233
234
ニシン01ヲ アドレス2ニ カキコミ
235
TRISBbits.TRISB8 = 0;
236
TRISBbits.TRISB9 = 0;
237
TRISBbits.TRISB10 = 0;
238
TRISBbits.TRISB11 = 0;
239
TRISAbits.TRISA0 = 0;
240
TRISAbits.TRISA1 = 0;
241
TRISAbits.TRISA2 = 0;
242
TRISAbits.TRISA3 = 0;
243
LATBbits.LATB8 = 0;
244
LATBbits.LATB9 = 1; シュツリョクセッテイ (ピンに0Vを出力)
245
LATBbits.LATB10 = 1;
246
LATBbits.LATB11 = 1; シュツリョクセッテイ (ピンに0Vを出力) 4
247
LATAbits.LATA0 = 1;
248
LATAbits.LATA1 = 0; シュツリョクセッテイ (ピンに0Vを出力) 4
249
LATAbits.LATA2 = 1;
250
LATAbits.LATA3 = 1; シュツリョクセッテイ (ピンに0Vを出力) 4
251
252
253
LATBbits.LATB3 = 1;
254
delay( writetime ); カキコミ
255
LATBbits.LATB3 = 0;
256
257
アドレス1ヲ ヨミコミ
258
TRISBbits.TRISB8 = 1;
259
TRISBbits.TRISB9 = 1; ニュウリョク セッテイ
260
TRISBbits.TRISB10 = 1;
261
TRISBbits.TRISB11 = 1;
262
TRISAbits.TRISA0 = 1;
263
TRISAbits.TRISA1 = 1;
264
TRISAbits.TRISA2 = 1;
265
TRISAbits.TRISA3 = 1;
266
267
LATBbits.LATB2 = 1;
268
delay( readtime );
269
r1b1 = PORTBbits.RB8; ニュウリョク ジッコウ
270
r1b2 = PORTBbits.RB9;
271
r1b3 = PORTBbits.RB10; ニュウリョク ジッコウ
272
r1b4 = PORTBbits.RB11;
273
r1b5 = PORTAbits.RA0; ニュウリョク ジッコウ
274
r1b6 = PORTAbits.RA1;
275
r1b7 = PORTAbits.RA2; ニュウリョク ジッコウ
276
r1b8 = PORTAbits.RA3;
277
LATBbits.LATB2 = 0; トランジスタ オフ
278
279
280
TRISBbits.TRISB8 = 1; ニュウリョク セッテイ
281
TRISBbits.TRISB9 = 1;
282
TRISBbits.TRISB10 = 1;
283
TRISBbits.TRISB11 = 1;
284
TRISAbits.TRISA0 = 1;
285
TRISAbits.TRISA1 = 1;
286
TRISAbits.TRISA2 = 1;
287
TRISAbits.TRISA3 = 1;
288
289
LATBbits.LATB3 = 1; トランジスタ オン
290
delay( readtime );
291
r2b1 = PORTBbits.RB8;
292
r2b2 = PORTBbits.RB9; ニュウリョク ジッコウ
293
r2b3 = PORTBbits.RB10;
294
r2b4 = PORTBbits.RB11; ニュウリョク ジッコウ
295
r2b5 = PORTAbits.RA0;
296
r2b6 = PORTAbits.RA1; ニュウリョク ジッコウ
297
r2b7 = PORTAbits.RA2;
298
r2b8 = PORTAbits.RA3; ニュウリョク ジッコウ
299
LATBbits.LATB3 = 0;
300
301
0,1,1,0 ト ヒョウジサレマス
302
r1 = r1b8 * 128 + r1b7 * 64 + r1b6 * 32 + r1b5 * 16 + r1b4 * 8 + r1b3 * 4 + r1b2 * 2 + r1b1;
303
r2 = r2b8 * 128 + r2b7 * 64 + r2b6 * 32 + r2b5 * 16 + r2b4 * 8 + r2b3 * 4 + r2b2 * 2 + r2b1;
304
305
lcdClr();
306
lcdLocate( 0, 0 );
307
lcdNum( r1 );
308
309
lcdLocate( 0, 1 );
310
lcdNum( r2 );
311
312
313
314
315
316
while( 1 ) {
317
318
if( PORTAbits.RA4 == 1 ) {
319
LATBbits.LATB6 = 1;
320
} else {
321
LATBbits.LATB6 = 0;
322
}
323
}
324
325
return (EXIT_SUCCESS);
326
}