Ana Sayfa
Antrak Gazetesi
Eski Sayılar
Antrak Ana Sayfası
Yorumlariniz ve Sorularınız için mail adresimiz.
 
 
İnternette İlk  
Türk Amatör Telsiz Gazetesi

PIC: Klasik Logic yerine 

Mikroişlemci - 4

 
Barbaros Aşuroğlu (TA2CBA) 
TA2CBA Barbaros Aşuroğlu  
E-Mail: ta2cba@www.antrak.org.tr 
URL: http://www.antrak.org.tr/~ta2cba 
 

Artık bir PIC16C84 sistemi, bu sistemi pogramlamak için bir programlayıcı 
devresi ve yazılımı, sistemi test etmek için basit bir test programı bu ana 
kadar elde ettiklerimizdi. 

Bu noktadan sonra artık gerçek anlamda programlamaya girebiliriz. 
Pic16c84 için program yazarken PLC (Programmable Logic Controller) 
simulasyonundan yararlanacağız. PLC daha cok otomasyonda kullanılan ve 
sıralı işlemlerin lojik aileleri ile biraraya getirilerek yapıldığı bir sistemdir. 
Bu sistem daha çok endüstriyel tesis otomasyonu için geliştirilmiş olup 
ilk yıllarında röleler ve mekanik zamanlama elemanları kullanılarak yapılırdı. 
Daha sonra işin içine mikroişlemciler girdi, hayat bu noktadan sonra daha 
kolaylaştı. Günümüzde PLC olanaklarını kullanmayan endüstriyel tesis yoktur. 

PLC ile pic birleştiği zaman ortaya esnek ve ucuz bir yapı çıkmaktadır. 
PLC yapısında AND, OR, XOR, TIMER, NOT, IN, OUT, LATCH, IN, OUT gibi 
lojik gruplarını kullanırız. Bu grupları farklı kombinasyonlarda birleştirerek 
Portlardan girdiğimiz TTL seviyesindeki sinyalleri kombinasyonun 
öngördüğü işlemlere tabi tutup çıkış olarak sectiğimiz Port’tan dışarı alırız. 

Buna bir ornek vermek gerekirse test porgramımızı ele alalım. Bir led ‘i port 
RB0 ‘a bağlayıp 0.5 saniye ON 0.5 saniye OFF şeklinde yakıp 
söndürmüştük. Bu işlemi PLC sistemi olarak tasarlarsak –1 Adet TIMER- 
elemanına ve –1 Adet çıkış elemanına ihtiyaç duyarız.timer elemanı 
0.5 saniye  ile açıp kapanmalı sonucuda çıkış elemanına iletmelidir. 
Çıkış elemanı ilgili Porttur, bizim programımızda bu RB0 idi. 

Bu programı yaparken grafik tabanlı bir PLC programlama yazılımından 
faydalanacağız. Bu yazılımı picbit_s.zip dosyasında bulabilirsiniz. 
Bu dosyayı picbit adı altında açacağınız bir directory’e  
kaydederseniz sorunsuz çalışır.  
Bu program dos altında, vga ekranlı, 386 ve üstü işlemcili herhangi bir 
PC de çalışır. 

PICBIT grafik editorü ile yazacağımız PLC programını gene aynı 
programdaki MPASM ile compile edip  elde ettiğimiz. hex sonlu dosyayı 
programlayıcımız ve ilgili yazılımıyla PIC16C84 içine programlayabiliriz 
daha sonra bu programı minimum pic devresiyle çalıştırırız. 

Şimdi yukarda saydıklarımıza bir örnek olarak PICBIT ‘i test programımızı 
tekrar yazmakta kullanalım. 

Amaç: 0.5 saniye aralıkla yanıp sönen port RB0’a bağlı bir adet led ile 
flaşör yapmak. 

PICBIT programını dos ortamında PICBIT yazarak çalıştırdığımızda 
karşımıza çıkan ekran ortasına mouse ile gidip sol tuş ile tıkladığınızda 
programlama grafik editor ekranı karşımıza gelir. 
Bu ekran üzerine istediğimiz elemanı (örneğin timer, out, in gibi) koyarız. 
Led Flaşör programı elemanları aşağıdaki gibi yer alır. Bir adet TIMER ve 
bir adet OUT elemanı işlemi bitirir. 

program çıktısı 
Led flaşör grafik PLC programı yukarda görüldüğü gibi iki adet elemandan 
oluşmaktadır. IN elemanı Timer T10 elemanının bir parçasıdır. 
T10 üstündeki 512,00 rakamı 512ms karşılığıdır ve bir listeden 
sabit değerler arasından uygun olanı seçilir. 

OUT elemanı ise TIMER çıkışı ile  Port RB0 arasındaki baglantıyı düzenleyen 
program parçasıdır. 
 
 

PLC programının text çıktısı ise aşağıdaki gibidir: 

      ld      Timer_2,2        ;[D:1] 4 
      out     Port_B,0         ;[E:1] 5 
     ; 
 

Görüldüğü gibi PLC tekniği ile program yapmak assemblerdan çok daha 
kolaydır. 

Gelecek ay PICBIT yazılımını ve PLC elemanlarını yakından tanıyacağız. 

Merak edenlere yukarıdaki iki satırlık programın assembler listesini 
aşağıda veriyorum. 
 


MPASM 01.50 Released             PIC4.ASM   6-23-1998  14:51:58         PAGE  1 
 

LOC  OBJECT CODE     LINE SOURCE TEXT 
  VALUE 

                    00001 ;       produced by PICBIT 
                    00002         include "plc_2.inc" 
                    00001 ;modified from 5X to 16C84 
2007 3FFD           00002  __FUSES 0x3FFD 
                    00003  
                    00344         LIST 
                    00345  
                    00346 ;Place PLC specific register names here 
                    00347 ;C84 Equates 
  00000005          00348 Port_A  equ     5h 
  00000006          00349 Port_B  equ     6h 
  00000001          00350 Timer_1 equ     01h 
  00000002          00351 PCL     equ     02h 
                    00352  
                    00353         CBLOCK 0x0C 
  0000000C          00354 step1    ;Schrittmotor Phasenzeiger Motor-1 
  0000000D          00355 step2    ;Schrittmotor Phasenzeiger Motor-2 
  0000000E          00356 steptmp  ;Stepper Temp-Register 
  0000000F          00357 Timer_2 
                    00358         ENDC 
                    00359  
                    00360         CBLOCK 0x10 
  00000010          00361 Creg_l 
                    00362         ENDC 
                    00363  
                    00364         CBLOCK 0x18 
  00000018          00365 Creg_h 
                    00366         ENDC 
                    00367  
                    00368         CBLOCK 0x20 
  00000020          00369 _DFF 
                    00370         ENDC 
                    00371  
                    00372         CBLOCK 0X28 
  00000028          00373 Aux_1, Aux_2 
  0000002A          00374 Cflag, Ct 
  0000002C          00375 Temp_1, Temp_2, unused1, unused2 
                    00376         ENDC 
                    00377  
                    00378 ; 
                    00379 ;Init 
                    00380 ; 
0000 280A           00381 Reset   goto    init 
                    00382  
0001                00383 stepbits 
0001 0782           00384         addwf   PCL,f 
0002 34AA 3482 3496 00385         DT      0AAh, 082h, 096h, 014h, 055h, 041h, 069h, 028h 
     3414 3455 3441  
     3469 3428  
                    00386  
000A 3000           00387 init    movlw   0               ;Initialise all RAM bits to 'safe' values 
000B 0086           00388         movwf   Port_B          ; 
000C 0081           00389         movwf   Timer_1 
 

MPASM 01.50 Released             PIC4.ASM   6-23-1998  14:51:58         PAGE  2 
 

LOC  OBJECT CODE     LINE SOURCE TEXT 
  VALUE 

000D 008F           00390         movwf   Timer_2 
000E 008C           00391         movwf   step1 
000F 008D           00392         movwf   step2 
0010 0090           00393         movwf   Creg_l 
0011 0091           00394         movwf   Creg_l+1 
0012 0092           00395         movwf   Creg_l+2 
0013 0093           00396         movwf   Creg_l+3 
0014 0094           00397         movwf   Creg_l+4 
0015 0095           00398         movwf   Creg_l+5 
0016 0096           00399         movwf   Creg_l+6 
0017 0097           00400         movwf   Creg_l+7 
0018 0098           00401         movwf   Creg_h 
0019 0099           00402         movwf   Creg_h+1 
001A 009A           00403         movwf   Creg_h+2 
001B 009B           00404         movwf   Creg_h+3 
001C 009C           00405         movwf   Creg_h+4 
001D 009D           00406         movwf   Creg_h+5 
001E 009E           00407         movwf   Creg_h+6 
001F 009F           00408         movwf   Creg_h+7 
0020 00AA           00409         movwf   Cflag 
0021 00AB           00410         movwf   Ct 
0022 00A8           00411         movwf   Aux_1 
0023 00A9           00412         movwf   Aux_2 
0024 00AC           00413         movwf   Temp_1 
0025 00AD           00414         movwf   Temp_2 
0026 00A0           00415         movwf   _DFF 
                    00416  
0027 1683           00417 Scan    bsf     3,5 
0028 301F           00418         movlw   1fh             ;Main scan loop 
0029 0085           00419         movwf   Port_A          ;RA0-RA4 = inputs 
002A 3000           00420         movlw   0 
002B 0086           00421         movwf   Port_B          ;RB0-RB7 = outputs 
002C 3007           00422         movlw   07              ;Enable RTCC, count up on CLKOUT 
002D 0081           00423         movwf   0x01            ;OPTION 
002E 1283           00424         bcf     3,5 
                    00425                                 ;Increment Timer_2 on Timer_1 overflow 
002F 1B81           00426         btfsc   1,7             ;   IF RTCC = 1xxx xxxxb THEN 
0030 172D           00427         bsf     Temp_2,6        ;      Set bit 6 in Temp_2 (overflow flag) 
                    00428                                 ;   ENDIF 
0031 1B81           00429         btfsc   1,7             ;   IF RTCC = 0xxx xxxxb THEN 
0032 2837           00430         goto    Nzero 
0033 1F2D           00431         btfss   Temp_2,6        ;      IF bit 6 in Temp_2 = 1 THEN 
0034 2837           00432         goto    Nzero 
0035 0A8F           00433         incf    Timer_2,f       ;         Increment Timer_2 
0036 132D           00434         bcf     Temp_2,6        ;         Clear bit 6 in Temp_2 
                    00435                                 ;      ENDIF 
0037                00436 Nzero                           ;   ENDIF 
0037 16AD           00437         bsf     Temp_2,5        ;Used to set shift/rotate direction (right) 
0038 122D           00438         bcf     Temp_2,4        ;Used to set shift/rotate direction (left) 
                    00439  
                    00003 ; ============================ 
                    00004 ; === UserCode starts here === 
                    00005 ; ============================ 

MPASM 01.50 Released             PIC4.ASM   6-23-1998  14:51:58         PAGE  3 
 

LOC  OBJECT CODE     LINE SOURCE TEXT 
  VALUE 

                    00006         ld      Timer_2,2        ;[D:1] 4 
0039 3000               M         movlw   0 
003A 190F               M         btfsc   Timer_2,2 
003B 3001               M         movlw   1 
                    00007         out     Port_B,0         ;[E:1] 5 
003C 00AC               M         movwf   Temp_1 
003D 182C               M         btfsc   Temp_1,0 
003E 1406               M         bsf     Port_B,0 
003F 1C2C               M         btfss   Temp_1,0 
0040 1006               M         bcf     Port_B,0 
                    00008 ; 
                    00009         endp 
0041 0064               M         clrwdt 
0042 2827               M         goto    Scan 
                        M         end 
 

MPASM 01.50 Released             PIC4.ASM   6-23-1998  14:51:58         PAGE  4 
 

SYMBOL TABLE 
  LABEL                             VALUE  

Aux_1                             00000028 
Aux_2                             00000029 
Cflag                             0000002A 
Creg_h                            00000018 
Creg_l                            00000010 
Ct                                0000002B 
Nzero                             00000037 
PCL                               00000002 
Port_A                            00000005 
Port_B                            00000006 
Reset                             00000000 
Scan                              00000027 
Temp_1                            0000002C 
Temp_2                            0000002D 
Timer_1                           00000001 
Timer_2                           0000000F 
_DFF                              00000020 
__16C84                           00000001 
and                                
and_not                            
ctr                                
dff                                
endp                               
idff                               
init                              0000000A 
inv                                
inv_lat                            
inv_out                            
latch                              
ld                                 
ld_not                             
or                                 
or_not                             
out                                
out_not                            
rsff_r                             
rsff_s                             
shift                              
step1                             0000000C 
step2                             0000000D 
stepbits                          00000001 
stepp_1                            
stepp_2                            
steptmp                           0000000E 
unused1                           0000002E 
unused2                           0000002F 
xor                                
xor_not                            

MPASM 01.50 Released             PIC4.ASM   6-23-1998  14:51:58         PAGE  5 
 

MEMORY USAGE MAP ('X' = Used,  '-' = Unused) 
 

0000 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX 
0040 : XXX------------- ---------------- ---------------- ---------------- 
2000 : -------X-------- ---------------- ---------------- ---------------- 

All other memory blocks unused. 

Program Memory Words Used:    67 
Program Memory Words Free:   957 
 

Errors   :     0 
Warnings :     0 reported,     0 suppressed 
Messages :     0 reported,     0 suppressed