memahami program.docx
TRANSCRIPT
PERCOBAAN 1
PEMROGRAMAN MIKROKONTROLER ATMEL 89S51
I. PENDAHULUAN
I.1 A Taxonomy of the Cognitif DomainTujuan domain ranah kognitif berhubungan dengan tampilan kemampuan pengetahuan dan pengembangan kemampuan serta pengembangan keterampilan intelektual ( Bloom 1956:7). Taksonomi atau penggolongan tujuan ranah kognitif hasil pengembangan Bloom dan kawan-kawan mengemukakan adanya enam kelas / tingkat dari tingkatan yang terendah menuju tingkatan yang tertinggi, yaitu :
C1.Pengetahuan ( knowledge )C2.Pengertian, faham, pemahaman ( comprehension )C3.Pemakaian ( application )C4.Analisa , uraian, kupasan, pemeriksaan ( analysis )C5.Perpaduan, pembentukan ( systhesis )C6.Evaluasi, penilaian ( evaluation)
C1C2C3C4C5C6
II.PROGRAM
1.Display LED
$mod51; ?START: MOV P0,#11110000b; Menghidupkan 4 buah LEDSJMP START; ?END; ?
C1C2C3C4C5C6
2.Subroutine Waktu Tunda atau Delay
$mod51;?
ORG 0h:?START: MOV P0,#11111111b; Kirim data biner 11111111 ke ; PORT 0 CALL DELAY ; Memanggil waktu tunda MOV P0,#00000000b; Kirim data biner 00000000 ke PORT 0 CALL DELAY ; Memanggil waktu tunda SJMP START;?DELAY: MOV R1,#255;?DEL1: MOV R2,#255;?DEL2: DJNZ R2,DEL2;? DJNZ R1,DEL1;? RET;? END;?C1C2C3C4C5C6
3.Instruksi SETB dan CLR$mod51;? ORG 0h;?START: CLR P0.0 ; Mengirimkan logika 0 ke P0.0 SJMP START; jump ke label START END;?
C1C2C3C4C5C6
4.LED kedip-kedip
$mod51;? ORG 0h;?START: CLR P0.0 ; Kirim logika 0 ke P0.0 CLR P0.1 ; Kirim logika 0 ke P0.1 CLR P0.2 ; Kirim logika 0 ke P0.2 CLR P0.3 ; Kirim logika 0 ke P0.3 CLR P0.4 ; Kirim logika 0 ke P0.4 CLR P0.5 ; Kirim logika 0 ke P0.5 CLR P0.6 ; Kirim logika 0 ke P0.6 CLR P0.7 ; Kirim logika 0 ke P0.7 CALL DELAY; Memanggil waktu tunda SETB P0.0 ; Kirim logika 1 ke P0.0 SETB P0.1 ; Kirim logika 1 ke P0.1 SETB P0.2 ; Kirim logika 1 ke P0.2 SETB P0.3 ; Kirim logika 1 ke P0.3 SETB P0.4; Kirim logika 1 ke P0.4 SETB P0.5 ; Kirim logika 1 ke P0.5 SETB P0.6 ; Kirim logika 1 ke P0.6 SETB P0.7 ; Kirim logika 1 ke P0.7 SJMP START; lompat ke label START
DELAY: MOV R1,#255;?DEL1: MOV R2,#255;?DEL2: DJNZ R2,DEL2;? DJNZ R1,DEL1;? RET;? END;?
C1C2C3C4C5C6
5.Instruksi RL/RR
$mod51;? ORG0H;?START: MOVA,#11111110b;? MOV R0,#7 ;?KIRI: MOVP2,A ;? CALL DELAY ;? RL A ;? DEC R0 ;? CJNE R0,#0,KIRI ;? MOV R0,#7 ;?KANAN: MOV P2,A ;? CALL DELAY ;? RR A ;? DEC R0 ;? CJNE R0,#0,KANAN ;? SJMP START ;? DELAY: MOV R1,#255 ;?DEL1: MOV R2,#255 ;?DEL2: DJNZ R2,DEL2 ;? DJNZ R1,DEL1 ;? RET ;? END ;?
C1C2C3C4C5C6
6.Push Button Switcheds
$mod51;?
ORG 0h;?START: MOV A, P2 ;Ambil data dari P2 dan Simpan ke A CPL A ;Komplemen/ Invert terhadap A MOVP0, A ;Kirim data A ke P0 SJMP START;? END;?
C1C2C3C4C5C6
7.Nyala LED geser kanan-kiri
$mod51;?
ORG 0h;?CekP20: JB P2.0, CekP21 ; Menguji bit P2.0, apakah ;berlogika'1' CALLRLeft ; Jika P2.0=0, maka LED putar kiriCekP21: JB P2.1,CekP20 ; Menguji bit P2.1, apakah ; berlogika '1' CALL RRight ; Jika P2.1=0, maka LED putar ;kanan SJMP CekP20 ; jump forever to CekP2.0
;========================================;Subrutin ini digunakan untuk menggerakkan LED Ke Kanan;========================================RLeft: MOV A,#11111110b;send data to AccRLeft1: MOV P0,A ;send data to P0 CALLDELAY ;;call delay time JB P2.1,RLeft2 ;Menguji bit P2.1, apakah berlogika ;'1' SJMP EndRLeft ;Jika P2.1=0, maka lompat ke ;EndRLeft RLeft2 :RL A;? SJMP RLeft1;? EndRLeft: RET;?;;======================================;Subrutin ini digunakan untuk menggerakkan LED Ke Kiri;======================================RRight: MOV A,#01111111b;send data to AccRRight1: MOV P0,A ;send data to P0 CALL DELAY ;call delay time JB P2.0,RRight2 ;Menguji bit P2.0, apakah berlogika ;'1' SJMP EndRRight ;Jika P2.0=0, maka lompat ke ;EndRRight RRight2: RR A;? SJMP RRight1;? EndRRight: RET;?
;=======================================;subroutine delay time;=======================================DELAY: MOV R1,#255;?DEL1:MOV R2,#255;?DEL2: DJNZ R2,DEL2;? DJNZ R1,DEL1;? RET;? END;?
C1C2C3C4C5C6
8.Setting Up/Down dan Enter dengan display LED
$mod51;?
ORG 0h;?start:;? mov R7,#1 ;inisialisasi data settingSetup:mov A,R7 ;simpan data R7 ke A cpl A ;komplemen A, mov P0,A ;output data ke LED jnb p2.0,getout;bilasw1(P2.0) ditekan maka getout ;(selesai) jb P2.1,SetDn ;bila sw2(P2.1) ditekan maka INC R7 inc R7 ;R7:=R7+1 acall delay ;waktu tunda, antar penekanan tombol cjne R7,#100d,setup;deteksi apakah setting=100d mov R7,#1 ;reset R7 -> 1 sjmp Setup;?
SetDn: mov A,R7 ;simpan data R7 ke A cpl A ;komplemen A, mov P0,A ;output data ke LED jnb P2.0,getout; bila sw1(P2.0) ditekan maka getout ;(selesai) jb p2.2,Setup ;bila sw2(P2.1) ditekan maka INC R7 dec R7 ;R7:=R7-1 acall delay ;waktu tunda lama penekanan tombol cjne R7,#0d,setDn;deteksi apakah setting=0d mov R7,#1d ;reset R7 -> 1 sjmp Setdn;?getout:;? sjmp getout;? delay: mov R0,#255;?delay1: mov R2,#255;? djnz R2,$;? djnz R0,delay1;? Ret;? End;?
C1C2C3C4C5C6
9.Kode karakter pada display LED 7 Segment
DesimalData-data segmenDataHeksa Desimal
P2.7-P2.6gP2.5fP2.4eP2.3dP2.2cP2.1bP2.0a
011000000C0 ?
111111001F9 ?
210100100A4 ?
310110000B0 ?
41001100199 ?
51001001092 ?
61000001082 ?
71111100 0F8 ?
81000000080 ?
91001000090 ?
10.Menampilkan karakter pada display LED 7 Segment
$mod51;?
ORG 0H;?START:MOVP0,#0FEH;Aktifkan digit paling kananMOVP2,#0C0H;tampilkan karakter 0CALL DELAY;panggil program delayMOVP2,#0F9H;tampilkan karakter 1CALLDELAY;?MOVP2,#A4H;tampilkan karakter 2CALLDELAY;?MOVP2,#B0H;tampilkan karakter 3CALLDELAY;?MOVP2,#99H;tampilkan karakter 4CALLDELAY;?MOVP2,#92H;tampilkan karakter 5CALLDELAYMOVP2,#82H;tampilkan karakter 6CALLDELAY;?MOVP2,#0F8H;tampilkan karakter 7CALLDELAY;?MOVP2,#80H;tampilkan karakter 8CALLDELAY;?MOVP2,#90;tampilkan karakter 9CALLDELAY;?SJMPSTART;ulangi proses dari awal
DELAY:MOVR0,#0FFH;?LOOP:MOVR1,#0FFH;?LOOP1:DJNZR1,LOOP1;?DJNZR0,LOOP;?RET;?END;?
C1C2C3C4C5C6
11.Menampilkan karakter lain pada display LED 7 Segment
$mod51;?ORG 0H;?START:MOVR3,#0AH;data pembatasMOVP0,#0FEH;aktifkan digit paling kananMOVDPTR,#KARAKTER;simpan data karakter ke DPTRLOOP2:CLR A;?MOVC A,@A+DPTR;ambil data ke AccumulatorMOVP2,A;keluarkan ke port 2CALL DELAY;panggil program delayINCDPTR;siapkan karakter berikutnyaDJNZR3, LOOP2;?SJMPSTART;?
DELAY:MOVR0,#0FFH;?LOOP:MOVR1,#0FFH;?LOOP1:DJNZR1,LOOP1;?DJNZR0,LOOP;?RET;?KARAKTER:DB 11000000B,11111001B,10100100B,10110000BDB 10011001B,10010010B,10000010B,11111000BDB 10000000B,10010000B;DB 00111111B,00000110B,01011011B,01001111B;DB 01100110B,01101101B,01111101B,00000111B;DB 01111111B,01101111BEND
C1C2C3C4C5C6
12.Program Scanning Display LED 7 SegmentApa bedanya Scanning dan Scamming ?$mod51;?ORG 0H;?START:MOV R3,#06H;data pembatas jumlah digit 7 segmenMOVR4,#0FEH;data pengendali digitMOVA,R4;?MOV P0,A;?
LOOP3:MOVDPTR,#KARAKTER;?CLR A;?MOVC A,@A+DPTR;?MOVP2,A;?CALL DELAY;?MOVP2,#00H;?INCDPTR;?MOVA,R4;?RL A;?MOVP0,A;?MOVR4,A;?DJNZ R3,LOOP3;?SJMPSTART;?
DELAY:MOVR0,#0FH;?LOOP:MOVR1,#FFH;?LOOP1:DJNZR1,LOOP1;?DJNZR0,LOOP;?RET;?
KARAKTER:DB 00111111B,00000110B,01011011B;?DB 01001111B,01100110B,01101101B;?END;?
C1C2C3C4C5C6
13. Operasi Full Step Stepping Motor $mod51;?Org 0h;?START:MOV P0,#00001000B;?CALLDELAY;?MOVP0,#00000100B;?CALLDELAY;?MOVP0,#00000010B;?CALLDELAY;?MOVP0,#00000001B;?CALLDELAY;?JMPSTART;?
DELAY:MOVR0,#0FFH;?LOOP:MOVR1,#0FFH;?LOOP1:DJNZR1,LOOP1;?DJNZR0,LOOP;?RET;?END;?
C1C2C3C4C5C6
14. Operasi Half Step Stepping Motor$mod51;?Org 0h;?START:MOVP0,#00001000B;?CALLDELAY;?MOVP0,#00001100B;?CALLDELAY;?MOVP0,#00000100B;?CALLDELAY;?MOVP0,#00000110B;?CALLDELAY;?MOVP0,#00000010B;?CALLDELAY;?MOVP0,#00000011B;?CALLDELAY;?MOVP0,#00000001B;?CALLDELAY;?MOVP0,#00001001B;?CALLDELAY;?JMPSTART;?
DELAY:MOVR0,#0FFH;?LOOP:MOVR1,#0FFH;?LOOP1:DJNZR1,LOOP1;?DJNZR0,LOOP;?RET;?END;?
C1C2C3C4C5C6
15. Operasi High Torque
$mod51;?Org 0h;?START:MOVP0,#00001100B;?CALLDELAY;?MOVP0,#00000110B;?CALLDELAY;?MOVP0,#00000011B;?CALLDELAY;?MOVP0,#00001001B;?CALLDELAY;?JMPSTART;?
DELAY:MOVR0,#0FFH;?LOOP:MOVR1,#0FFH;?LOOP1:DJNZR1,LOOP1;?DJNZR0,LOOP;?RET;?END;?
C1C2C3C4C5C6
16. Keypad 4X3
$mod51;? row0 bit P2.0; baris 0 = P2.0 row1 bit P2.1; baris 1 = P2.1 row2 bit P2.2; baris 2 = P2.2 row3 bit P2.3; baris 3 = P2.3 Col2 bit P2.4; kolom 2 = P2.4 Col1 bit P2.5; kolom 1 = P2.5 Col0 bit P2.6; kolom 0 = P2.6 ;==================================== keydata equ 70h; data output = memori 70H keybounc equ 71h; data anti bounching = memori 71H keyport equ P2; keypad menggunakan port 2 ;======================================== org 0h; alamat awal memori program berada pada 0000H mov P2,#11111111b; set semua bit pada port 2 dengan logic 1start: call keypad4x3 ; ambil data dari sub rutin scanning keypad 4X3 Mov A,keydata ;A = keydata Cjne A,#0FFh,send;? sjmp start ; LOOPING FOREVERsend: Mov P0,A ;P0 = A Sjmp start ; LOOPING FOREVER PART 2 ;==================================== ; subroutine scan keypad 4x3 ;====================================Keypad4x3: mov keybounc,#50 ;keybounc = 50 mov keyport,#0FFh ;keyport=P2= FFH clr col2 ; col2 = 0 (kolom 2 diberi logic 0)
;========================keyRow0_C2: jb row0,keyRow1_C2; bila baris0 kolom2 tidak ada tombol ;ditekan, scan baris1 kolom2. djnz keybounc,KeyRow0_C2; bila ada tombol ditekan, kerjakan anti ;bounching mov keydata,#0FEh ;Siapkan data output 11111110B, FEH ;(tombol 1) ret ;======================================KeyRow1_C2: jb row1,keyRow2_C2; bila baris1 kolom2 tidak ada tombol ;ditekan, scan baris2 kolom2. djnz keybounc,keyRow1_C2; bila ada tombol ditekan, kerjakan anti ;bounching mov keydata,#0FBh ; Siapkan data output 11111011B, FBH ;(tombol 4) Ret;? ;===========================================keyRow2_C2: jb row2,keyRow3_C2; bila baris2 kolom2 tidak ada tombol ;ditekan, scan baris3 kolom2. djnz keybounc,keyRow2; bila ada tombol ditekan, kerjakan anti ;bounching mov keydata,#0F8h ; Siapkan data output 11111000B, F8H ;(tombol 7) ret; ;=========================================keyRow3_C2: jb row3,keyRow0_C1; bila baris3 kolom2 tidak ada tombol ditekan, scan baris0 kolom1. djnz keybounc,keyRow3_C2; bila ada tombol ditekan, kerjakan anti bounching mov keydata,#0F0h ; Siapkan data output 11110000B, F0H (tombol *) ret;==========================================KeyRow0_C1: setb col2; kolom2 diberi logic 1 clr col1; kolom2 diberi logic 0 jb row0,keyRow1_C1; bila baris0 kolom1 tidak ada tombol ;ditekan, scan baris1 kolom1. djnz keybounc,KeyRow0_C1; bila ada tombol ditekan, kerjakan anti ;bounching mov keydata,#0FDh ; Siapkan data output 11111101B, FDH ;(tombol 2) ret;? ;========================================KeyRow1_C1: jb row1,keyRow2_C1; bila baris1 kolom1 tidak ada tombol ;ditekan, scan baris2 kolom1. djnz keybounc,keyRow1_C1; bila ada tombol ditekan, kerjakan anti ;bounching mov keydata,#0FAh ; Siapkan data output 11111010B, FAH ;(tombol 5) ret;? ;==========================================keyRow2_C1: jb row2,keyRow3_C1; bila baris2 kolom1 tidak ada tombol ;ditekan, scan baris3 kolom1.
djnz keybounc,keyRow2_C1; bila ada tombol ditekan, kerjakan anti ;bounching mov keydata,#0F7h ; Siapkan data output 11110111B, F7H ;(tombol 8) ret;? ;=====================================keyRow3_C1: jb row3,keyRow0_C0; bila baris3 kolom1 tidak ada tombol ;ditekan, scan baris0 kolom0. djnz keybounc,keyRow3_C1; bila ada tombol ditekan, kerjakan anti ;bounching mov keydata,#00h ; Siapkan data output 00000000B, 00H ;(tombol 0) ret;?
;============================================keyRow0_C0: setb col1; kolom1 diberi logic 1 clr col0; kolom0 diberi logic 0 jb row1,keyRow2_C0; bila baris0 kolom0 tidak ada tombol ;ditekan, scan baris1 kolom0. djnz keybounc,KeyRow0_C0; bila ada tombol ditekan, kerjakan anti ;bounching mov keydata,#0FCh; Siapkan data output 11111100B, FCH ;(tombol 3) ret ;? ;===========================================KeyRow1_C0: jb row1,keyRow2_C0; bila baris1 kolom0 tidak ada tombol ;ditekan, scan baris2 kolom0. djnz keybounc,keyRow1_C0; bila ada tombol ditekan, kerjakan anti ;bounching mov keydata,#0F9h ; Siapkan data output 11111001B, F9H ;(tombol 6) ret;? ;========================================keyRow2_C0: jb row2,keyRow3_C0; bila baris2 kolom0 tidak ada tombol ;ditekan, scan baris3 kolom0. djnz keybounc,keyRow2_C0; bila ada tombol ditekan, kerjakan anti ;bounching mov keydata,#0F6h ; Siapkan data output 11110110B, F6H ;(tombol 9) ret;? ;===========================================keyRow3_C0: jb row3,No_key; bila baris3 kolom0 tidak ada tombol ;ditekan, kerjakan No_key.
djnz keybounc,keyRow3_C0; bila ada tombol ditekan, kerjakan anti ;bounching mov keydata,#0Fh ; Siapkan data output 00001111B, 0FH ;(tombol #) ret;? ;=======================================Nokey: mov keydata,#0FFh ;? ret;? end;?
C1C2C3C4C5C6
PINNameFunction
1VSSGround voltage
2VCC+5V
3VEEContrast voltage
4RSRegister Select0 = Instruction Register1 = Data Register
5R/WRead/ Write, to choose write or read mode0 = write mode1 = read mode
6EEnable0 = start to lacht data to LCD character1= disable
7DB0LSB
8DB1-
9DB2-
10DB3-
11DB4-
12DB5-
13DB6-
14DB7MSB
15BPLBack Plane Light
16GNDGround voltage
17. Liquid Cristal Display ( LCD ) Init_lcd: mov r1,#00000001b ;Display clear call write_inst ;EN=pulse dan RS=0 mov r1,#00111000b ;Function set, ;Data 8 bit,2 line font 5x7 call write_inst ;Set bit EN=pulse dan RS=0 mov r1,#00001100b ;Display on, ;cursor off,cursor blink off call write_inst ;EN=pulse dan RS=0 mov r1,#00000110b ;Entry mode, Set increment call write_inst;? ret;?
C1C2C3C4C5C6
18. Menulis sebuah Karakter pada LCD $mod51;? org 0h;? call init_LCD;? start: mov R1,#80h ; Lokasi Display RAM, Row=1 Col=1 call write_inst;? mov R1,#'A' ; Cetak Karakter A call write_data;? stop: sjmp stop;?Init_lcd: mov r1,#00000001b ;Display clear call write_inst;? mov r1,#00111000b ;Function set,Data 8 bit,2 line font 5x7 call write_inst;? mov r1,#00001100b ;Display on, ;cursor off,cursor blink off call write_inst;? mov r1,#00000110b ;Entry mode, Set increment call write_inst;? ret;? ;======================================Write_inst: clr P3.6 ; P3.6 = RS =0 mov P0,R1 ; P0 = D7 s/d D0 = R1 setb P3.7 ; P3.7 =EN = 1 call delay ; call delay time clr P3.7 ; P3.7 =EN = 0 ret;? ;===================================Write_data: setb P3.6 ; P3.6 = RS =1 mov P0,R1 ; P0 = D7 s/d D0 = R1 setb P3.7 ; P3.7 =EN = 1 call delay ; call delay time clr p3.7 ; P3.7 =EN = 0 ret;? ;================================ delay: mov R0,#0;? delay1:mov R7,#0fh;? djnz R7,$;? djnz R0,delay1;? ret;? end
C1C2C3C4C5C6
19. Menulis 8 Karakter pada LCD
$mod51;?
org 0h;? call init_LCD;?start: mov R1,#80h ; Lokasi Display RAM, Row=1 Col=1 call write_inst;? mov R1,#'W';? call write_data;? mov R1,#'e';? call write_data;? mov R1,#'l';? call write_data;? mov R1,#'c';? call write_data;? mov R1,#'o';? call write_data;? mov R1,#'m';? call write_data;? mov R1,#'e';? call write_data;? stop: sjmp stop;?Init_lcd: mov r1,#00000001b ;Display clear call write_inst;? movr1,#00111000b ;Function set, Data 8 bit,2 line font 5x7 call write_inst ;? mov r1,#00001100b ;Display on, cursor off,cursor blink off call write_inst;? mov r1,#00000110b ;Entry mode, Set increment call write_inst;? ret;? ;================================Write_inst: clr P3.6 ; P3.6 = RS =0 mov P0,R1 ; P0 = D7 s/d D0 = R1 setb P3.7 ; P3.7 =EN = 1 call delay ; call delay time clr P3.7 ; P3.7 =EN = 0 ret;? ;=================================== Write_data: setb P3.6 ; P3.6 = RS =1 mov P0,R1 ; P0 = D7 s/d D0 = R1 setb P3.7 ; P3.7 =EN = 1 call delay ; call delay time clr p3.7 ; P3.7 =EN = 0 ret;? ;=================================delay: mov R0,#0;?delay1:mov R7,#0fh;? djnz R7,$;? djnz R0,delay1;? ret;? end
C1C2C3C4C5C6
20. Menulis Karakter dengan Look Up Tabel $mod51;?org 0h;? call init_LCD;?start: call write_char;? stop: sjmp stop;? ;================================write_char: mov dptr,#word1 ;DPTR = [ address word1 ] mov r3,#16 ;R3=16,number character to be display mov r1,#80h ;R1=80h,address DDRAM start position call write_inst;? ;===================================write1:clr a ; A = 0 movc a,@a+dptr ; A = [A+ DPTR] mov r1,A ; R1 = A inc dptr ; DPTR = DPTR +1 call write_data;? djnz r3,write1 ; R3 = R3-1, ret;? ;===================================Init_lcd: mov r1,#00000001b ;Display clear call write_inst ;? mov r1,#00111000b ;Function set, Data 8 bit,2 line font 5x7 call write_inst ;? mov r1,#00001100b ;Display on, cursor off,cursor blink off call write_inst;? mov r1,#00000110b ;Entry mode, Set increment call write_inst;? ret;? ;======================================Write_inst: clr P3.6 ; P3.6 = RS =0 mov P0,R1 ; P0 = D7 s/d D0 = R1 setb P3.7 ; P3.7 =EN = 1 call delay ; call delay time clr P3.7 ; P3.7 =EN = 0 ret;? ;====================================Write_data: setb P3.6 ; P3.6 = RS =1 mov P0,R1 ; P0 = D7 s/d D0 = R1 setb P3.7 ; P3.7 =EN = 1 call delay ; call delay time call delay ; call delay time clr p3.7 ; P3.7 =EN = 0 ret;? ;======================================delay: mov R0,#0;?delay1:mov R7,#0fh;? djnz R7,$;? djnz R0,delay1;? ret;? ;=======================================word1: DB ' Welcome Home '; Karakter yang disimpan di ROM ;======================================== end ;?
C1C2C3C4C5C6
III. KESIMPULANSejauh mana pencapaian pengetahuan Anda tentang Pemrograman Mikrokontroler Atmel 89S51 ? ( )
Nomor Soal /Level Cognitif(bobot)C1(5)C2(6)C3(7)C4(8)C5(9)C6(10)TotalBobot
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Jumlah??????
IV. PENILAIAN
92
abcdefgP2.0P2.1P2.2P2.3P2.4P2.5P2.6+5VP0.5P0.4P0.3P0.2P0.0P0.112 V
P0.0
P0.1
P0.2
P0.3
+ 12 V
L1
L2
L3
L4
CMN
D0
D7
C2C1C00123456789...+VCCP2.0P2.1P2.2P2.3P2.4P2.5P2.6AT89S51R0R1R2R3D0D7