You are on page 1of 38

:

:


AT89S8253

. -

. 101177

, 2014
0


1. .........................................................................................................2
2. .......................................................3
3. A/D MCP3204...........................................................................4
3.1. MCP3204 /D
....................................................................................6
4. LCD Hitachi HD44780...................................................................7
4.1. DDRAM .................................................................................9
4.2. CGROM ..............................................................................10
4.3. CGRAM ...............................................................................11
4.4. , LCD ........12
5. AT89S8253..................................................................15
5.1. ROM ...................................................................................19
5.2. RAM ...................................................................................19
5.3. EEPROM..............................................................................................19
6. .......................................................................20
6.1. .............................................................................................20
6.2. ............................................................................................23
7. Ko .....................................................................................34
8. :.........................................................................41

1.

898253 LCD 12-
AD . AD MCP3204
Microchip LCD Hitachi
HD44789. microC,
Microcontroller ISP Software
AT89ISP Atmel.

:
-

( ),
AD
MCP3204 ,


LCD HD44780, ,
898253 (

, ,
C Assembler

2.

.

,
2

,
.
(smart)


,
.


, =1,2,3,4.
(kvant) , 0,5 V, t2
10,25 < V < 10,75,
10,50 V.
AD
, .
.

3.A/D MCP3204
MCP3204 e 12 A/D . 4
4 2
.

A/D
:
-


Sample Hold
D/A

12 SAR (successive approximation register)


(shift)

3.1. MCP3204 /D

3 .

A/D

SPI mode 0.0 , SCLK


.

, A/D
5 , ,
SGL/DIFF D2 . A/D
3 ,
null , 4 B11-B8.
8
.
.

4.LCD Hitachi HD44780


LCD
HD44780 Hitachi. LCD
:

LCD 2 16 ,
58 ,
:

, ,
, .
.
, ,
.

. Vee
0-Vdd (
)
7

LCD 16 :

3 :
-

DDRAM Display Data RAM


CGRAM Character Generator RAM
CGROM Character Generator ROM

4.1. DDRAM

. 80 ,
.
DDRAM .

( )
. , D0-D7
.
16 ,
. SHIFT
.

4.2. CGROM

,
. :

ASCII
.
. LCD ,

. , .

4.3. CGRAM
, LCD
.
58
. 8 ,
10

5.
, .

:


( CGROM ).

11

4.4. , LCD

LCD D0-D7

RS.
RS = 1 D0-D7

RS = 0 D0-D7

I/D 1 =

R/L

0 =
S

1 = SHIFT

1 =
0 =

DL

1 = 8
12

0 = SHIFT
D

0 = 4

1 =

1 =

0 =
U

0 =

1 =

0 =
B

0 = 5x8

1 =

D/C

0 =

1 = 5x10

1 =
0 =

8 4 LCD .
D0-D7
. , 4 D4-D7,
,
. , LCD- :
4 4 .

, LCD- .
:
13

1.
2. : DL = 1 ( 8 ),
N = 0 ( ), F = 0 (
58 )
3. / : D = 0 ( ), U = 0 (
), B = 0 ( )
4. : ID = 1 (
1), S = 0 ( SHIFT)

5.

AT89S8253


AT89S8253,
, .

14

AT89S8253 8 ,
CMOS . :

8051
12
2 PROM
256 RAM
4 6
0 24 MHz
32 4 8
16
9
UART
Watch Dog
2 Idle Power-down

AT89S8253

15

:
Vcc
GND
Port 0 (P0.0 P0.7) ,
8 TTL .
, .
.
,
A0-A7
. ALE

.
Port 1 (P1.0-P1.7) ,
4 TTL . ,
TTL ,

5 V. ,
:

Port 2 (P2.0-P2.7) ,
P1.
, (8-15)
.
16

Port 3 (P3.0-P3.7) P1

:

RST .
ALE/PROG ,
1/6
. ,

A0-A7. ,

.
PSEN

ROM
EA/VPP ,

.
XTAL 1
XTAL 2

5.1. ROM
ROM 12 KB FLASH ,
/ .
17

SPI (Serial Peripheral Interface). ROM .

5.2. RAM
RAM 3 128
8051 :

128
128 SFR
128

5.3. EEPROM
RAM ROM.
,
. 2 KB (2048 ) EEPROM.
6.

6.1.
PCB
. ,
18

230 V C 5 V DC, 74LS244


, MAX 232
RS232 LCD .

19

6.2.
microC

C.

microC_PRO_8051 2.20.exe
:

Next.
, Next. Finish
.

20

, ,
898253

21


, 11.0592 MHz

,
, SMALL
, :

22

,
.
,
Include ALL (Default)
.
Finish,
Code Editor.

23

01:
02:
03:
04:
05:
06:
07:

// Definiranje
sbit LCD_RS at
sbit LCD_EN at
sbit LCD_D4 at
sbit LCD_D5 at
sbit LCD_D6 at
sbit LCD_D7 at

na pinovite LCD i ADC


P3_6_bit; // LCD - pin RS
P3_7_bit; // LCD - pin EN
P0_4_bit;
P0_5_bit;
P0_6_bit;
P0_7_bit;
24

08:
09:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:

sbit ADC_CS at P1_4_bit; // ADC - pin CS


// Kraj na definiranjeto na pinovite
unsigned int vrednost;
// Inicijaliziranje LCD i SPI
void Init() {
LCD_Init(); // inicijaliziranje LCD
LCD_Cmd(_LCD_CLEAR); // brisenje na ekranot LCD
LCD_Cmd(_LCD_CURSOR_OFF); // isklucuvanje na kursorot na LCD
SPI1_Init(); // inicijaliziranje SPI
ADC_CS = 1; // deselektiranje ADC, CS=1
}
// Kraj na inicijalizacijata
//Obrabotka na analognite vrednosti na napona vo ADC
unsigned int ADC(unsigned short mod_rabota, unsigned short kanal){
unsigned int rezultat; // vrakja 0..4096
ADC_CS = 0; // selektiranje ADC, CS=0
SPI1_Write(mod_rabota); // Mod na rabota, single ili differential
kanal = kanal << 6; // bitovi 7 i 6 (D1, D0)
rezultat = SPI1_Read(kanal) & 0x0F; // prakja D1 i D0 a prima B11..B8
rezultat = rezultat << 8; // B11..B8 vo povisok bajt na rezultat
rezultat |= SPI1_Read(0); // B7..B0 vo ponizok bajt na rezultat
ADC_CS = 1; // deselektiranje ADC, CS=1
return rezultat;
}
// Kraj na obrabotkata
// Ispisuvanje na vrednosti za naponot na LCD
void ispis(unsigned int napon){
unsigned char i;
long jlong;
jlong = (long)napon * 5000;
jlong = jlong / 4095;
i = jlong /1000;
LCD_Out(2, 2, "Napon:"); // go ispisuva zborot Napon:
LCD_Chr(2, 9, 48+i); // ispisuvanje na prvata cifra
LCD_Out(2, 10, "."); // ispisuvanje na tocka
i = (jlong /100) % 10;
LCD_Chr(2, 11, 48+i); // ispisuvanje na prvata decimala
i = (jlong /10) % 10;
LCD_Chr(2, 12, 48+i); // ispisuvanje na vtorata decimala
i = jlong % 10;
LCD_Chr(2, 13, 48+i); // ispisuvanje na tretata decimala
LCD_Out(2, 15, "V"); // ispisuvanje na bukvata V
}
// Kraj na ispisuvanje na vrednostite
// Glaven ciklus na programata
void main(){
Init(); // inicijalizacija na SPI i LCD
while(1){
LCD_Out(1,3,"Izbor na kanal");
LCD_Out(2,3,"P1 P2 P3");
if (P1_3_bit){ // kanal 0 kako single
LCD_Cmd(_LCD_CLEAR);
25

64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:

LCD_Out(1,5,"Kanal 0"); // ispisuvanej na zbor vo prviot red od LCD


vrednost = ADC(6, 0); // vcituvanje na naponot od kanalot I obrabotka
ispis(vrednost); // prikaz na vrednosta na LCD
Delay_ms(1000); // pauza
LCD_Cmd(_LCD_CLEAR);
}
if (P1_2_bit){ // kanal 1 kako single
LCD_Cmd(_LCD_CLEAR);
LCD_Out(1,5,"Kanal 1"); // ispis na zborovi vo prviot red na LCD
vrednost = ADC(6, 1); // vcituvanje na naponot od kanalot I obrabotka
ispis(vrednost); // prikaz na vrednosta na LCD
Delay_ms(1000); // pauza
LCD_Cmd(_LCD_CLEAR);
}
if (P1_1_bit){
LCD_Cmd(_LCD_CLEAR); // kanalite 2 i 3 kako differential
LCD_Out(1,3,"Kanali 2 i 3"); // ispis na zborovi vo prviot red na LCD
vrednost = ADC(4, 2); // vcituvanje na naponot od kanal I obrabotka
ispis(vrednost); // prikaz na vrednosta na LCD
Delay_ms(1000); // pauza
LCD_Cmd(_LCD_CLEAR);
}
}
}
// Kraj na glavniot ciklus

,
Enabled Reset, A/D Chip Select
02 08.
LCD 13
19.
ADC a A/D ,
. 23 33.
ISPIS LCD-

. 37 53.

26

main Init LCD


.
ADC,
ispis. main
57 87.
, HEX
. ISP
AT89ISP , :

27

ISP Microcontroller ISP Software


.
,
,

Options Select Device,


:

File Load Buffer,


HEX .
28

Instructions Auto Program,

.
:

HEX , .

29

7.

Ko

01:_Init:
02:;ADC.c,13::voidInit(){
03:;ADC.c,14::LCD_Init();
04:LCALL_Lcd_Init+0
05:;ADC.c,15::LCD_Cmd(_LCD_CLEAR);
06:MOVFARG_Lcd_Cmd_out_char+0,#1
07:LCALL_Lcd_Cmd+0
08:;ADC.c,16::LCD_Cmd(_LCD_CURSOR_OFF);
09:MOVFARG_Lcd_Cmd_out_char+0,#12
10:LCALL_Lcd_Cmd+0
11:;ADC.c,17::SPI1_Init();
12:LCALL_SPI1_Init+0
13:;ADC.c,18::ADC_CS=1;
14:SETBP1_4_bit+0
15:;ADC.c,19::}
16:RET
17:;endof_Init
18:
19:_ADC:
20:;ADC.c,23::
21:;ADC.c,25::ADC_CS=0;
22:CLRP1_4_bit+0
23:;ADC.c,26::SPI1_Write(mod_rabota);
24:MOVFARG_SPI1_Write_data_out+0,FARG_ADC_mod_rabota+0
25:LCALL_SPI1_Write+0
26:;ADC.c,27::kanal=kanal<<6;
27:MOVR1,#6
28:MOVA,FARG_ADC_kanal+0
29:INCR1
30:SJMPL__ADC5
31:L__ADC6:
32:CLRC
33:RLCA
34:L__ADC5:
35:DJNZR1,L__ADC6
36:MOVR0,A
37:MOVFARG_ADC_kanal+0,0
38:;ADC.c,28::rezultat=SPI1_Read(kanal)&0x0F;
39:MOVFARG_SPI1_Read_data_out+0,0
40:LCALL_SPI1_Read+0
41:ANL0,#15
42:MOVADC_rezultat_L0+0,0
43:CLRA
44:MOVADC_rezultat_L0+1,A
45:;ADC.c,29::rezultat=rezultat<<8;
30

46:MOVADC_rezultat_L0+1,ADC_rezultat_L0+0
47:MOVADC_rezultat_L0+0,#0
48:;ADC.c,30::rezultat|=SPI1_Read(0);
49:MOVFARG_SPI1_Read_data_out+0,#0
50:LCALL_SPI1_Read+0
51:MOVA,ADC_rezultat_L0+0
52:ORL0,A
53:MOVA,ADC_rezultat_L0+1
54:ORL1,A
55:MOVADC_rezultat_L0+0,0
56:MOVADC_rezultat_L0+1,1
57:;ADC.c,31::ADC_CS=1;
58:SETBP1_4_bit+0
59:;ADC.c,32::returnrezultat;
60:;ADC.c,33::}
61:RET
62:;endof_ADC
63:
64:_ispis:
65:;ADC.c,37::voidispis(unsignedintnapon){
66:;ADC.c,40::jlong=(long)napon*5000;
67:MOVR0,FARG_ispis_napon+0
68:MOVR1,FARG_ispis_napon+1
69:CLRA
70:MOVR2,A
71:CLRA
72:MOVR3,A
73:MOVR4,#116
74:MOVR5,#19
75:MOVR6,#0
76:MOV7,#0
77:LCALL_Mul_32x32+0
78:MOVispis_jlong_L0+0,0
79:MOVispis_jlong_L0+1,1
80:MOVispis_jlong_L0+2,2
81:MOVispis_jlong_L0+3,3
82:;ADC.c,41::jlong=jlong/4095;
83:MOVR4,#44
84:MOVR5,#16
85:MOVR6,#0
86:MOV7,#0
87:LCALL_Div_32x32_S+0
88:MOVispis_jlong_L0+0,0
89:MOVispis_jlong_L0+1,1
90:MOVispis_jlong_L0+2,2
91:MOVispis_jlong_L0+3,3
92:;ADC.c,42::i=jlong/1000;
93:MOVR4,#232
31

94:MOVR5,#3
95:MOVR6,#0
96:MOV7,#0
97:LCALL_Div_32x32_S+0
98:MOVispis_i_L0+0,0
99:;ADC.c,43::LCD_Out(2,2,"Napon:");
100:MOVFARG_LCD_Out_row+0,#2
101:MOVFARG_LCD_Out_column+0,#2
102:MOVFARG_LCD_Out_text+0,#?lstr1_ADC+0
103:LCALL_LCD_Out+0
104:;ADC.c,44::LCD_Chr(2,9,48+i);
105:MOVFARG_Lcd_Chr_row+0,#2
106:MOVFARG_Lcd_Chr_column+0,#9
107:MOVA,#48
108:ADDA,ispis_i_L0+0
109:MOVFARG_Lcd_Chr_out_char+0,A
110:LCALL_Lcd_Chr+0
111:;ADC.c,45::LCD_Out(2,10,".");
112:MOVFARG_LCD_Out_row+0,#2
113:MOVFARG_LCD_Out_column+0,#10
114:MOVFARG_LCD_Out_text+0,#?lstr2_ADC+0
115:LCALL_LCD_Out+0
116:;ADC.c,46::i=(jlong/100)%10;
117:MOVR4,#100
118:MOVR5,#0
119:MOVR6,#0
120:MOV7,#0
121:MOVR0,ispis_jlong_L0+0
122:MOVR1,ispis_jlong_L0+1
123:MOVR2,ispis_jlong_L0+2
124:MOVR3,ispis_jlong_L0+3
125:LCALL_Div_32x32_S+0
126:MOVR4,#10
127:MOVR5,#0
128:MOVR6,#0
129:MOV7,#0
130:LCALL_Div_32x32_S+0
131:MOVR0,4
132:MOVR1,5
133:MOVR2,6
134:MOVR3,7

49
135:MOVispis_i_L0+0,0
136:;ADC.c,47::LCD_Chr(2,11,48+i);
137:MOVFARG_Lcd_Chr_row+0,#2
138:MOVFARG_Lcd_Chr_column+0,#11
139:MOVA,#48
140:ADDA,R0
141:MOVFARG_Lcd_Chr_out_char+0,A
142:LCALL_Lcd_Chr+0
32

143:;ADC.c,48::i=(jlong/10)%10;
144:MOVR4,#10
145:MOVR5,#0
146:MOVR6,#0
147:MOV7,#0
148:MOVR0,ispis_jlong_L0+0
149:MOVR1,ispis_jlong_L0+1
150:MOVR2,ispis_jlong_L0+2
151:MOVR3,ispis_jlong_L0+3
152:LCALL_Div_32x32_S+0
153:MOVR4,#10
154:MOVR5,#0
155:MOVR6,#0
156:MOV7,#0
157:LCALL_Div_32x32_S+0
158:MOVR0,4
159:MOVR1,5
160:MOVR2,6
161:MOVR3,7
162:MOVispis_i_L0+0,0
163:;ADC.c,49::LCD_Chr(2,12,48+i);
164:MOVFARG_Lcd_Chr_row+0,#2
165:MOVFARG_Lcd_Chr_column+0,#12
166:MOVA,#48
167:ADDA,R0
168:MOVFARG_Lcd_Chr_out_char+0,A
169:LCALL_Lcd_Chr+0
170:;ADC.c,50::i=jlong%10;
171:MOVR4,#10
172:MOVR5,#0
173:MOVR6,#0
174:MOV7,#0
175:MOVR0,ispis_jlong_L0+0
176:MOVR1,ispis_jlong_L0+1
177:MOVR2,ispis_jlong_L0+2
178:MOVR3,ispis_jlong_L0+3
179:LCALL_Div_32x32_S+0
180:MOVR0,4
181:MOVR1,5
182:MOVR2,6
183:MOVR3,7
184:MOVispis_i_L0+0,0
185:;ADC.c,51::LCD_Chr(2,13,48+i);
186:MOVFARG_Lcd_Chr_row+0,#2
187:MOVFARG_Lcd_Chr_column+0,#13
188:MOVA,#48
189:ADDA,R0
190:MOVFARG_Lcd_Chr_out_char+0,A
191:LCALL_Lcd_Chr+0
192:;ADC.c,52::LCD_Out(2,15,"V");
33

193:MOVFARG_LCD_Out_row+0,#2
194:MOVFARG_LCD_Out_column+0,#15
195:MOVFARG_LCD_Out_text+0,#?lstr3_ADC+0
196:LCALL_LCD_Out+0
197:;ADC.c,53::}
198:RET
199:;endof_ispis
200:
201:_main:
202:MOVSP+0,#128
203:;ADC.c,57::voidmain(){
204:;ADC.c,58::Init();
205:LCALL_Init+0
206:;ADC.c,59::while(1){
207:L_main0:
208:;ADC.c,60::LCD_Out(1,3,"Izbornakanal");
209:MOVFARG_LCD_Out_row+0,#1
210:MOVFARG_LCD_Out_column+0,#3
211:MOVFARG_LCD_Out_text+0,#?lstr4_ADC+0
212:LCALL_LCD_Out+0
213:;ADC.c,61::LCD_Out(2,3,"P1P2P3");
214:MOVFARG_LCD_Out_row+0,#2
215:MOVFARG_LCD_Out_column+0,#3
216:MOVFARG_LCD_Out_text+0,#?lstr5_ADC+0
217:LCALL_LCD_Out+0
218:;ADC.c,62::if(P1_3_bit){
219:JNBP1_3_bit+0,L_main2
220:NOP
221:;ADC.c,63::LCD_Cmd(_LCD_CLEAR);
222:MOVFARG_Lcd_Cmd_out_char+0,#1
223:LCALL_Lcd_Cmd+0
224:;ADC.c,64::LCD_Out(1,5,"Kanal0");
225:MOVFARG_LCD_Out_row+0,#1
226:MOVFARG_LCD_Out_column+0,#5
227:MOVFARG_LCD_Out_text+0,#?lstr6_ADC+0
228:LCALL_LCD_Out+0
229:;ADC.c,65::vrednost=ADC(6,0);
230:MOVFARG_ADC_mod_rabota+0,#6
231:MOVFARG_ADC_kanal+0,#0
232:LCALL_ADC+0
233:MOV_vrednost+0,0
234:MOV_vrednost+1,1
235:;ADC.c,66::ispis(vrednost);
236:MOVFARG_ispis_napon+0,0
237:MOVFARG_ispis_napon+1,1
238:LCALL_ispis+0
239:;ADC.c,67::Delay_ms(1000);
240:MOVR5,8
241:MOVR6,1
242:MOVR7,245
34

243:DJNZR7,
244:DJNZR6,
245:DJNZR5,
246:NOP
247:;ADC.c,68::LCD_Cmd(_LCD_CLEAR);
248:MOVFARG_Lcd_Cmd_out_char+0,#1
249:LCALL_Lcd_Cmd+0
250:;ADC.c,69::}
251:L_main2:
252:;ADC.c,70::if(P1_2_bit){
253:JNBP1_2_bit+0,L_main3
254:NOP
255:;ADC.c,71::LCD_Cmd(_LCD_CLEAR);
256:MOVFARG_Lcd_Cmd_out_char+0,#1
257:LCALL_Lcd_Cmd+0
258:;ADC.c,72::LCD_Out(1,5,"Kanal1");
259:MOVFARG_LCD_Out_row+0,#1
260:MOVFARG_LCD_Out_column+0,#5
261:MOVFARG_LCD_Out_text+0,#?lstr7_ADC+0
262:LCALL_LCD_Out+0
263:;ADC.c,73::vrednost=ADC(6,1);
264:MOVFARG_ADC_mod_rabota+0,#6
265:MOVFARG_ADC_kanal+0,#1
266:LCALL_ADC+0
267:MOV_vrednost+0,0
268:MOV_vrednost+1,1
269:;ADC.c,74::ispis(vrednost);
270:MOVFARG_ispis_napon+0,0
271:MOVFARG_ispis_napon+1,1
272:LCALL_ispis+0

51
273:;ADC.c,75::Delay_ms(1000);
274:MOVR5,8
275:MOVR6,1
276:MOVR7,245
277:DJNZR7,
278:DJNZR6,
279:DJNZR5,
280:NOP
281:;ADC.c,76::LCD_Cmd(_LCD_CLEAR);
282:MOVFARG_Lcd_Cmd_out_char+0,#1
283:LCALL_Lcd_Cmd+0
284:;ADC.c,77::}
285:L_main3:
286:;ADC.c,78::if(P1_1_bit){
287:JNBP1_1_bit+0,L_main4
288:NOP
289:;ADC.c,79::LCD_Cmd(_LCD_CLEAR);
290:MOVFARG_Lcd_Cmd_out_char+0,#1
291:LCALL_Lcd_Cmd+0
35

292:;ADC.c,80::LCD_Out(1,3,"Kanali2i3");
293:MOVFARG_LCD_Out_row+0,#1
294:MOVFARG_LCD_Out_column+0,#3
295:MOVFARG_LCD_Out_text+0,#?lstr8_ADC+0
296:LCALL_LCD_Out+0
297:;ADC.c,81::vrednost=ADC(4,2);
298:MOVFARG_ADC_mod_rabota+0,#4
299:MOVFARG_ADC_kanal+0,#2
300:LCALL_ADC+0
301:MOV_vrednost+0,0
302:MOV_vrednost+1,1
303:;ADC.c,82::ispis(vrednost);
304:MOVFARG_ispis_napon+0,0
305:MOVFARG_ispis_napon+1,1
306:LCALL_ispis+0
307:;ADC.c,83::Delay_ms(1000);
308:MOVR5,8
309:MOVR6,1
310:MOVR7,245
311:DJNZR7,
312:DJNZR6,
313:DJNZR5,
314:NOP
315:;ADC.c,84::LCD_Cmd(_LCD_CLEAR);
316:MOVFARG_Lcd_Cmd_out_char+0,#1
317:LCALL_Lcd_Cmd+0
318:;ADC.c,85::}
319:L_main4:
320:;ADC.c,86::}
321:LJMPL_main0
322:;ADC.c,87::}
323:SJMP#254
324:;endof_main

36

8.

1. 8051, Milan Verle, Mikroelektronika;


2. AT89S8253 Datasheet, Atmel, www.atmel.com
3. MCP3204 Datasheet, Microchip, www.microchip.com
4. HD44780 Datasheet, Hitachi, www.sparkfun.com
5. mirkoC 8051 manual, Mikroelektronika, www.mikroe.com;
6. AT89ISP manual, Atmel, www.atmel.com

37

You might also like