Ana Sayfa
Antrak Gazetesi
Eski Sayılar
Antrak Ana Sayfası
Yorumlariniz ve Sorularınız için mail adresimiz. Editör Burçak Çubukçu'ya bu adresten ulaşabilirsiniz


İnternette İlk 
Türk Amatör Telsiz Gazetesi

PIC16F877 / SAYI - 5

 


TA5CPO Adnan Işık
E-Mail: isikadnan@isikelektronik.com
Evet değerli okurlarımız, yazı dizimizin bu bölümünde geçen ay değindiğimiz ve bir çok okurdan aldığım e-mail’ ler doğrultusunda ilgi topladığını gördüğüm bir konudan Parsic’ den bahsedeceğim. Parsic, program yazmaktan hoşlanmayanlar ya da projeyi bir an önce tamamlamak isteyenler veya son yıllarda alışageldiğimiz ve hemen her programlama dilinin başına gelen “Visual” ifadesine alışanlar, sıcak bakanlar ve bu şekilde tasarımdan hoşlananlar için geliştirilmiş bir program. Program çalıştırıldığında seçilecek bileşenleri tanımlayan çeşitli toolbarlar’ ı içeren hazır yapısıyla kullanıcının hemen tüm ihtiyaçlarını karşılayacak tasarım bileşenlerini sunmakta. Program aşağıdaki pencerenin kliklenmesinin ardından ekrana geldiğinde; Grid’ lerden oluşan zeminiyle kolayca tasarım yapılabilecek Visual Basic’ in editörüne benzer bir editor ekrana gelmektedir.

Program çalıştırıldığında  ekranda  PIC programı yapılırken ihtiyaç duyulabilecek hemen tüm bileşenleri içeren toolbarlar görüntülenir. Bu toolbarlar kullanılarak zamanlayıcı, analog / dijital veri girişi vb. aşağıda örnek programda göründüğü gibi doğrudan araç çubukları kullanılarak hazırlanan program, görsel olarak hazırlanıp, nesneler üzerinde değer belirlenmesi ve bağlantısı yapıldığında arka planda da program tarafından PIC Kaynak kodu yazılmaktadır.

Büyük görmek için resme Tıklayın!
Büyük görmek için resme Tıklayın!

Bu kodu görebilmek için Window menüsünden source seçilerek aşağıdaki gibi açılan ek pencereden PIC kaynak kodları görüntülenir. “Project file:” projeye ait kaynak kodunun kaydedileceği sürücü, klasör ve ismi de verilmektedir. Kaynak kodunu kaydederken sürücü, klasör ve kaynak kodu ismi verebilmek için File menüsünden Save Source As ... seçeneğine girilerek belirlenir.

Büyük görmek için resme Tıklayın!
Büyük görmek için resme Tıklayın!

; Source created with Parsic Version 3.x
; at              : 01.03.2001 11:47:23
; Project File    : C:\PROGRA~1\MPLAB\PARSIC\EXAMPLE\LCD.PIC
; Project Version : 1.0.23
; Created         : 13.04.2000 00:05:00
; Last change     : 09.04.2001 10:10:00
 PROCESSOR 16F877
 INCLUDE P16F877.INC
 RADIX DEC
 __IDLOCS H'0100'

 __CONFIG _CP_OFF & _PWRTE_ON & _WDT_OFF & _BODEN_ON & _XT_OSC & _LVP_OFF & _CPD_OFF & _DEBUG_OFF

; Diverses

ZERO EQU Z ; ZERO-Flag
CARRY  EQU C ; CARRY-Flag

; Variable

LT1_FD = 32 ; located in Bank 0
ADC0 = 33 ; located in Bank 0
ADC0_HI = 34 ; located in Bank 0
LT2_FD = 35 ; located in Bank 0
LT3_FD = 36 ; located in Bank 0
LT4_FD = 37 ; located in Bank 0
LT5_FD = 38 ; located in Bank 0
LT6_FD = 39 ; located in Bank 0
LT7_FD = 40 ; located in Bank 0
TR1 = 41 ; located in Bank 0
TR1_HI = 42 ; located in Bank 0
S0 = 43 ; located in Bank 0
RAM = 44 ; located in Bank 0
SYS_TMP1 = 115 ; located in Bank 0, 1, 2, 3
SYS_TMP2 = 116 ; located in Bank 0, 1, 2, 3
SYS_TMP3 = 117 ; located in Bank 0, 1, 2, 3
SYS_TMP4 = 118 ; located in Bank 0, 1, 2, 3
SYS_TMP5 = 119 ; located in Bank 0, 1, 2, 3
SYS_TMP6 = 120 ; located in Bank 0, 1, 2, 3
SYS_TMP9 = 121 ; located in Bank 0, 1, 2, 3
SYS_TMP10 = 122 ; located in Bank 0, 1, 2, 3
SYS_WSAV = 123 ; located in Bank 0, 1, 2, 3
SYS_SSAV = 124 ; located in Bank 0, 1, 2, 3
SYS_PSAV = 125 ; located in Bank 0, 1, 2, 3

 ERRORLEVEL -302 ; disable warning (Bankswitching)
 ERRORLEVEL -306 ; disable warning (Pageswitching)

;****************************************
;Programmanfang
;****************************************
 ORG 0
NOP
 MOVLW HIGH SYS_INIT ; set page
 MOVWF PCLATH
 GOTO SYS_INIT
;****************************************
;Interrupt-Adress
;****************************************
 MOVWF SYS_WSAV ; save register
 SWAPF STATUS,W
 CLRF STATUS ; bank 0
 MOVWF SYS_SSAV
 MOVFW PCLATH
 MOVWF SYS_PSAV
 CLRF PCLATH

 BCF INTCON,T0IF ; Interrupt quitieren

 BCF STATUS,RP0 ; Bank 0
 BCF STATUS,RP1 ; Bank 0
 INCFSZ TR1,F
 GOTO SYS_INT_LABEL_0
 INCF TR1_HI,F

SYS_INT_LABEL_0

EXITINT
 MOVFW SYS_PSAV
 MOVWF PCLATH
 SWAPF SYS_SSAV,W ; Register zurück
 MOVWF STATUS
 SWAPF SYS_WSAV,F
 SWAPF SYS_WSAV,W

 RETFIE ; RETurn From Interrupt and Enable GIE
 

;****************************************
; Subroutines
;****************************************
;***************************************************
; Read  -> AN0
;***************************************************
READ_AN0

 MOVLW B'100'
 BSF STATUS,RP0 ; Bank 1
 BCF STATUS,RP1 ; Bank 1
 MOVWF ADCON1
 BSF TRISA,0
 BSF ADCON1,ADFM ; Right-Justified

 MOVLW B'11000001' ; CH0
 BCF STATUS,RP0 ; Bank 0
 MOVWF ADCON0
 MOVLW 5
 MOVWF SYS_TMP1

SYS_ADC_LABEL_0
 DECFSZ SYS_TMP1,F
 GOTO SYS_ADC_LABEL_0

 BSF ADCON0,GO ; Start convert

SYS_ADC_LABEL_1

 BTFSC ADCON0,GO ; ready ?
 GOTO SYS_ADC_LABEL_1 ; no

 BSF STATUS,RP0 ; Bank 1
 MOVFW ADRESL
 BCF STATUS,RP0 ; Bank 0
 MOVWF ADC0
 MOVFW ADRESH
 MOVWF ADC0_HI
 

 MOVLW 6
 BSF STATUS,RP0 ; Bank 1
 MOVWF ADCON1
 MOVLW B'11111111'
 MOVWF TRISA

 RETURN

;***************************************************
; Subroutines for LB1
;***************************************************

LCD_LB1_INIT
 BCF STATUS,RP0 ; Bank 0
 BCF STATUS,RP1 ; Bank 0
 BCF PORTC,4 ; ir-register
LCD_LB1_L1
 CALL LCD_LB1_OUT4
 DECFSZ SYS_TMP1,F
 GOTO LCD_LB1_L1

 MOVFW PORTC
 ANDLW H'F0'
 IORLW B'0011' ; Function Set
 MOVWF PORTC

 BSF PORTC,5 ; write
 BCF PORTC,5

 BSF SYS_TMP1,5 ; wait
LCD_LB1_L2
 CALL LCD_LB1_OUT4
 DECFSZ SYS_TMP1,F
 GOTO LCD_LB1_L2

 BSF PORTC,5 ; write
 BCF PORTC,5

 CALL LCD_LB1_OUT4

 BSF PORTC,5 ; write
 BCF PORTC,5

 CALL LCD_LB1_OUT4

 BCF PORTC,0 ; 4-Bit Interface

 BSF PORTC,5 ; write
 BCF PORTC,5

 CALL LCD_LB1_OUT4

 MOVLW B'00101000' ; Function Set 4-Bit,2-Lines
 CALL LCD_LB1_OUT

 MOVLW B'00001100' ; Display on, Cursor off, Blink off
 CALL LCD_LB1_OUT

 MOVLW B'00000110' ; Entrymode set
 CALL LCD_LB1_OUT

LCD_LB1_CLR
 BCF STATUS,RP0 ; Bank 0
 BCF STATUS,RP1 ; Bank 0
 BCF PORTC,4 ; ir-register
 MOVLW B'00000001' ; Display clear
 CALL LCD_LB1_OUT

 BSF SYS_TMP1,5 ; wait
LCD_LB1_L3
 CALL LCD_LB1_OUT4
 DECFSZ SYS_TMP1,F
 GOTO LCD_LB1_L3
 GOTO LCD_LB1_OUT4

;***************************************************

LCD_LB1_GOTOXY
 BCF STATUS,RP0 ; Bank 0
 BCF STATUS,RP1 ; Bank 0
 BCF PORTC,4 ; ir-register
 MOVLW H'40'
 BTFSC SYS_TMP2,0 ; Ypos
 ADDWF SYS_TMP1,F
 MOVLW H'14'
 BTFSC SYS_TMP2,1 ; Ypos
 ADDWF SYS_TMP1,F
 BSF SYS_TMP1,7 ; select dd-ram
 GOTO LCD_LB1_OUT1

;***************************************************

LCD_LB1_WRITESTR
 BCF STATUS,RP0 ; Bank 0
 BCF STATUS,RP1 ; Bank 0
 BSF PORTC,4 ; dd-ram
LCD_LB1_WRITESTR1
 CALL LCD_LB1_CHAROUT
 BSF INTCON,GIE
 ANDLW H'FF' ; last is zero
 BTFSC STATUS,ZERO
 RETURN

 MOVWF SYS_TMP1
 MOVLW HIGH LCD_LB1_OUT1 ; set page
 MOVWF PCLATH
 CALL LCD_LB1_OUT1
 INCFSZ SYS_TMP4,F ; next char
 GOTO LCD_LB1_WRITESTR1
 INCF SYS_TMP5,F ; next page
 GOTO LCD_LB1_WRITESTR1

LCD_LB1_CHAROUT
 BCF INTCON,GIE
 MOVFW SYS_TMP5
 MOVWF PCLATH
 MOVFW SYS_TMP4
 MOVWF PCL

;***************************************************

LCD_LB1_DEZO10000

 MOVLW LOW 10000
 MOVWF SYS_TMP1
 MOVLW HIGH 10000
 MOVWF SYS_TMP2

 CALL LCD_LB1_CONVERTDEZ
 MOVF SYS_TMP9,F
 BTFSS STATUS,ZERO
 GOTO LCD_LB1_DEZO1000
 CALL LCD_LB1_CHECKNULL

LCD_LB1_DEZO1000

 MOVLW LOW 1000
 MOVWF SYS_TMP1
 MOVLW HIGH 1000
 MOVWF SYS_TMP2

 CALL LCD_LB1_CONVERTDEZ
 MOVF SYS_TMP9,F
 BTFSS STATUS,ZERO
 GOTO LCD_LB1_DEZO100
 CALL LCD_LB1_CHECKNULL

LCD_LB1_DEZO100

 MOVLW LOW 100
 MOVWF SYS_TMP1
 CLRF SYS_TMP2

 CALL LCD_LB1_CONVERTDEZ
 MOVF SYS_TMP9,F
 BTFSS STATUS,ZERO
 GOTO LCD_LB1_DEZO10
 CALL LCD_LB1_CHECKNULL

LCD_LB1_DEZO10

 MOVLW LOW 10
 MOVWF SYS_TMP1
 CLRF SYS_TMP2

 CALL LCD_LB1_CONVERTDEZ
 MOVF SYS_TMP9,F
 BTFSS STATUS,ZERO
 GOTO LCD_LB1_DEZO1
 CALL LCD_LB1_CHECKNULL

LCD_LB1_DEZO1
 MOVLW 48
 ADDWF SYS_TMP4,W
 GOTO LCD_LB1_WRITECHAR

;***************************************************

LCD_LB1_CONVERTDEZ
 MOVF SYS_TMP9,F
 BTFSS STATUS,ZERO
 DECF SYS_TMP9,F
 CLRF SYS_TMP6
LCD_LB1_CONVERTDEZ2
 INCF SYS_TMP6,F

 MOVFW SYS_TMP1
 SUBWF SYS_TMP4,F

 MOVFW SYS_TMP2
 BTFSS STATUS,CARRY
 INCFSZ SYS_TMP2,W
 SUBWF SYS_TMP5,F
 BTFSC STATUS,CARRY
 GOTO LCD_LB1_CONVERTDEZ2

 MOVFW SYS_TMP2
 ADDWF SYS_TMP5,F
 MOVFW SYS_TMP1
 ADDWF SYS_TMP4,F
 BTFSC STATUS,CARRY
 INCF SYS_TMP5,F

 DECF SYS_TMP6,W
 BTFSS STATUS,ZERO
 BSF SYS_TMP10,0
 RETURN

;***************************************************

LCD_LB1_CONVERTHEX
 ANDLW 15
 MOVWF SYS_TMP1
 MOVLW 48
 ADDWF SYS_TMP1,F
 MOVLW 58
 SUBWF SYS_TMP1,W
 BTFSS STATUS,CARRY
 GOTO $+3
 MOVLW 7
 ADDWF SYS_TMP1,F
 MOVFW SYS_TMP1

;***************************************************

LCD_LB1_WRITECHAR
 BCF STATUS,RP0 ; Bank 0
 BCF STATUS,RP1 ; Bank 0
 BSF PORTC,4 ; dd-ram

;***************************************************

LCD_LB1_OUT
 MOVWF SYS_TMP1 ; store
LCD_LB1_OUT1
 CLRF SYS_TMP3 ; LCDWriteStr (first nibble)
LCD_LB1_OUT2
 SWAPF SYS_TMP1,W ;high nibble
LCD_LB1_OUT3
 ANDLW H'0F' ; mask
 MOVWF SYS_TMP2 ; store
 BCF STATUS,RP0 ; Bank 0
 BCF STATUS,RP1 ; Bank 0
 MOVFW PORTC ; load port
 ANDLW H'F0' ; mask
 IORWF SYS_TMP2,W ; add cmd
 MOVWF PORTC ; out

 BSF PORTC,5 ; E high
 BCF PORTC,5 ; E low

 BTFSC SYS_TMP3,3 ; ready ?
 GOTO LCD_LB1_OUT4 ; yes
 BSF SYS_TMP3,3 ; second nibble
 MOVFW SYS_TMP1
 GOTO LCD_LB1_OUT3 ; next nibble

LCD_LB1_OUT4
LCD_LB1_OUTV
 DECFSZ SYS_TMP3,F
 GOTO LCD_LB1_OUTV
 RETURN

;***************************************************

LCD_LB1_CHECKNULL
 BTFSS STATUS,ZERO
 DECF SYS_TMP9,F
 MOVWF SYS_TMP1
 BTFSS STATUS,ZERO
 BSF SYS_TMP10,0
 MOVLW 48
 BTFSC SYS_TMP10,0
 ADDWF SYS_TMP1,f
 MOVLW 32
 BTFSS SYS_TMP10,0
 ADDWF SYS_TMP1,F
 MOVFW SYS_TMP1
 GOTO LCD_LB1_WRITECHAR
; 00EA

;****************************************
;Initialisierung
;****************************************
SYS_INIT

 MOVLW B'00100000'
 MOVWF INTCON

; Ausgangs-Pegel setzen, bevor die Richtung gesetzt wird

 BCF STATUS,RP0 ; Bank 0
 BCF STATUS,RP1 ; Bank 0
 MOVLW B'00000000'
 MOVWF PORTA

 MOVLW B'00000000'
 MOVWF PORTB

 MOVLW B'00000000'
 MOVWF PORTC

 MOVLW B'00000000'
 MOVWF PORTD

 MOVLW B'00000000'
 MOVWF PORTE

 MOVLW 15
 BSF STATUS,RP0 ; Bank 1
 MOVWF OPTION_REG

 MOVLW 6 ; all Digital
 MOVWF ADCON1

; Richtung setzen

 MOVLW B'11111111'
 MOVWF TRISA

 MOVLW B'11111111'
 MOVWF TRISB

 MOVLW B'11000000'
 MOVWF TRISC

 MOVLW B'11111111'
 MOVWF TRISD

 MOVLW B'00000111'
 MOVWF TRISE

; init vars
 

; Clear RAM

 BCF STATUS,IRP
 MOVLW 32
 MOVWF FSR
CR1
 CLRF INDF
 INCF FSR,F
 MOVLW H'70'
 SUBWF FSR,W
 BTFSC STATUS,ZERO
 INCF FSR,F

 BTFSS FSR,7
 GOTO CR1
 BSF FSR,5
CR2
 CLRF INDF
 INCF FSR,F
 MOVLW H'F0'
 SUBWF FSR,W
 BTFSS STATUS,ZERO
 GOTO CR2
 BSF STATUS,IRP
 MOVLW 16
 MOVWF FSR
CR3
 CLRF INDF
 INCF FSR,F
 MOVLW H'70'
 SUBWF FSR,W
 BTFSS STATUS,ZERO
 GOTO CR3
 MOVLW 144
 MOVWF FSR
CR4
 CLRF INDF
 INCF FSR,F
 MOVLW H'EB'
 SUBWF FSR,W
 BTFSS STATUS,ZERO
 GOTO CR4
 

;***************************************************
; Init LCD -> LB1
;***************************************************

 CALL LCD_LB1_INIT

 BCF STATUS,RP0 ; Bank 0
 BCF STATUS,RP1 ; Bank 0
 CLRF TMR0
 BCF INTCON,T0IF
 BSF INTCON,GIE ; Interrupt freigeben

;**********************************
;******* Haupt-Programm ***********
;**********************************

MAIN

 CALL READ_AN0
;***************************************************
; LCD -> LT1
;***************************************************

; test of positiv edge

 BCF STATUS,RP0 ; Bank 0
 BTFSC LT1_FD,0
 GOTO LABEL_LT1_SETFD
 BTFSS S0,2
 GOTO LABEL_LT1_SETFD
 

 MOVLW 0
 MOVWF SYS_TMP1
 MOVLW 1
 MOVWF SYS_TMP2

 MOVLW HIGH LCD_LB1_GOTOXY ; set page
 MOVWF PCLATH
 CALL LCD_LB1_GOTOXY

 MOVLW LOW TAB_LT1
 MOVWF SYS_TMP4
 MOVLW HIGH TAB_LT1
 MOVWF SYS_TMP5

 MOVLW HIGH LCD_LB1_WRITESTR ; set page
 MOVWF PCLATH

 CALL LCD_LB1_WRITESTR

 BCF PCLATH,3 ; Page 0
 BCF PCLATH,4 ; Page 0
LABEL_LT1_SETFD

 BCF STATUS,RP0 ; Bank 0
 BCF STATUS,RP1 ; Bank 0
 BTFSS S0,2
 GOTO LABEL_LT1_SETFD2
 BSF LT1_FD,0
 GOTO LABEL_LT1_END
LABEL_LT1_SETFD2
 BCF STATUS,RP0 ; Bank 0
 BCF STATUS,RP1 ; Bank 0
 BCF LT1_FD,0
LABEL_LT1_END

;***************************************************
; LCD -> LT2
;***************************************************

; test of positiv edge

 BTFSC LT2_FD,0
 GOTO LABEL_LT2_SETFD
 BTFSS S0,2
 GOTO LABEL_LT2_SETFD
 

 MOVLW 0
 MOVWF SYS_TMP1
 MOVLW 2
 MOVWF SYS_TMP2

 MOVLW HIGH LCD_LB1_GOTOXY ; set page
 MOVWF PCLATH
 CALL LCD_LB1_GOTOXY

 MOVLW LOW TAB_LT2
 MOVWF SYS_TMP4
 MOVLW HIGH TAB_LT2
 MOVWF SYS_TMP5

 MOVLW HIGH LCD_LB1_WRITESTR ; set page
 MOVWF PCLATH

 CALL LCD_LB1_WRITESTR

 BCF PCLATH,3 ; Page 0
 BCF PCLATH,4 ; Page 0
LABEL_LT2_SETFD

 BCF STATUS,RP0 ; Bank 0
 BCF STATUS,RP1 ; Bank 0
 BTFSS S0,2
 GOTO LABEL_LT2_SETFD2
 BSF LT2_FD,0
 GOTO LABEL_LT2_END
LABEL_LT2_SETFD2
 BCF STATUS,RP0 ; Bank 0
 BCF STATUS,RP1 ; Bank 0
 BCF LT2_FD,0
LABEL_LT2_END

;***************************************************
; LCD -> LT3
;***************************************************

; test of positiv edge

 BTFSC LT3_FD,0
 GOTO LABEL_LT3_SETFD
 BTFSS S0,2
 GOTO LABEL_LT3_SETFD
 

 MOVLW 0
 MOVWF SYS_TMP1
 MOVLW 3
 MOVWF SYS_TMP2

 MOVLW HIGH LCD_LB1_GOTOXY ; set page
 MOVWF PCLATH
 CALL LCD_LB1_GOTOXY

 MOVLW LOW TAB_LT3
 MOVWF SYS_TMP4
 MOVLW HIGH TAB_LT3
 MOVWF SYS_TMP5

 MOVLW HIGH LCD_LB1_WRITESTR ; set page
 MOVWF PCLATH

 CALL LCD_LB1_WRITESTR

 BCF PCLATH,3 ; Page 0
 BCF PCLATH,4 ; Page 0
LABEL_LT3_SETFD

 BCF STATUS,RP0 ; Bank 0
 BCF STATUS,RP1 ; Bank 0
 BTFSS S0,2
 GOTO LABEL_LT3_SETFD2
 BSF LT3_FD,0
 GOTO LABEL_LT3_END
LABEL_LT3_SETFD2
 BCF STATUS,RP0 ; Bank 0
 BCF STATUS,RP1 ; Bank 0
 BCF LT3_FD,0
LABEL_LT3_END

;***************************************************
; LCD -> LT4
;***************************************************

; test of positiv edge

 BTFSC LT4_FD,0
 GOTO LABEL_LT4_SETFD
 BTFSS S0,2
 GOTO LABEL_LT4_SETFD
 

 MOVLW 6
 MOVWF SYS_TMP1
 MOVLW 0
 MOVWF SYS_TMP2

 MOVLW HIGH LCD_LB1_GOTOXY ; set page
 MOVWF PCLATH
 CALL LCD_LB1_GOTOXY

 MOVLW LOW TAB_LT4
 MOVWF SYS_TMP4
 MOVLW HIGH TAB_LT4
 MOVWF SYS_TMP5

 MOVLW HIGH LCD_LB1_WRITESTR ; set page
 MOVWF PCLATH

 CALL LCD_LB1_WRITESTR

 BCF PCLATH,3 ; Page 0
 BCF PCLATH,4 ; Page 0
LABEL_LT4_SETFD

 BCF STATUS,RP0 ; Bank 0
 BCF STATUS,RP1 ; Bank 0
 BTFSS S0,2
 GOTO LABEL_LT4_SETFD2
 BSF LT4_FD,0
 GOTO LABEL_LT4_END
LABEL_LT4_SETFD2
 BCF STATUS,RP0 ; Bank 0
 BCF STATUS,RP1 ; Bank 0
 BCF LT4_FD,0
LABEL_LT4_END

;***************************************************
; LCD -> LT5
;***************************************************

; test of positiv edge

 BTFSC LT5_FD,0
 GOTO LABEL_LT5_SETFD
 BTFSS S0,0
 GOTO LABEL_LT5_SETFD
 

 MOVLW 4
 MOVWF SYS_TMP1
 MOVLW 1
 MOVWF SYS_TMP2

 MOVLW HIGH LCD_LB1_GOTOXY ; set page
 MOVWF PCLATH
 CALL LCD_LB1_GOTOXY

 BCF STATUS,RP0 ; Bank 0
 BCF STATUS,RP1 ; Bank 0
 MOVFW ADC0
 MOVWF SYS_TMP4
 MOVFW ADC0_HI
 MOVWF SYS_TMP5
 MOVLW 6
 MOVWF SYS_TMP6
LABEL_LT5_FIXED
 BCF STATUS,CARRY
 RLF SYS_TMP4,F
 RLF SYS_TMP5,F
 DECFSZ SYS_TMP6,F
 GOTO LABEL_LT5_FIXED

 MOVLW 10
 MOVWF SYS_TMP6

LCD_LT5_BIN1
 MOVLW HIGH LCD_LB1_WRITECHAR ; set page
 MOVWF PCLATH
 RLF SYS_TMP4,F
 RLF SYS_TMP5,F
 MOVLW 48
 BTFSC STATUS,CARRY
 MOVLW 49
 CALL LCD_LB1_WRITECHAR

 MOVLW HIGH LCD_LT5_BIN1 ; set page
 MOVWF PCLATH
 DECFSZ SYS_TMP6,F
 GOTO LCD_LT5_BIN1
 BCF PCLATH,3 ; Page 0
 BCF PCLATH,4 ; Page 0
LABEL_LT5_SETFD

 BCF STATUS,RP0 ; Bank 0
 BCF STATUS,RP1 ; Bank 0
 BTFSS S0,0
 GOTO LABEL_LT5_SETFD2
 BSF LT5_FD,0
 GOTO LABEL_LT5_END
LABEL_LT5_SETFD2
 BCF STATUS,RP0 ; Bank 0
 BCF STATUS,RP1 ; Bank 0
 BCF LT5_FD,0
LABEL_LT5_END

;***************************************************
; LCD -> LT6
;***************************************************

; test of positiv edge

 BTFSC LT6_FD,0
 GOTO LABEL_LT6_SETFD
 BTFSS S0,0
 GOTO LABEL_LT6_SETFD
 

 MOVLW 4
 MOVWF SYS_TMP1
 MOVLW 2
 MOVWF SYS_TMP2

 MOVLW HIGH LCD_LB1_GOTOXY ; set page
 MOVWF PCLATH
 CALL LCD_LB1_GOTOXY

 BCF STATUS,RP0 ; Bank 0
 BCF STATUS,RP1 ; Bank 0
 MOVFW ADC0
 MOVWF SYS_TMP4
 MOVFW ADC0_HI
 MOVWF SYS_TMP5

 BCF SYS_TMP10,0
 MOVLW 2
 MOVWF SYS_TMP9
 MOVLW HIGH LCD_LB1_DEZO10000 ; set page
 MOVWF PCLATH
 CALL LCD_LB1_DEZO10000
 BCF PCLATH,3 ; Page 0
 BCF PCLATH,4 ; Page 0
LABEL_LT6_SETFD

 BCF STATUS,RP0 ; Bank 0
 BCF STATUS,RP1 ; Bank 0
 BTFSS S0,0
 GOTO LABEL_LT6_SETFD2
 BSF LT6_FD,0
 GOTO LABEL_LT6_END
LABEL_LT6_SETFD2
 BCF STATUS,RP0 ; Bank 0
 BCF STATUS,RP1 ; Bank 0
 BCF LT6_FD,0
LABEL_LT6_END

;***************************************************
; LCD -> LT7
;***************************************************

; test of positiv edge

 BTFSC LT7_FD,0
 GOTO LABEL_LT7_SETFD
 BTFSS S0,0
 GOTO LABEL_LT7_SETFD
 

 MOVLW 4
 MOVWF SYS_TMP1
 MOVLW 3
 MOVWF SYS_TMP2

 MOVLW HIGH LCD_LB1_GOTOXY ; set page
 MOVWF PCLATH
 CALL LCD_LB1_GOTOXY

 BCF STATUS,RP0 ; Bank 0
 BCF STATUS,RP1 ; Bank 0
 MOVFW ADC0
 MOVWF SYS_TMP4
 MOVFW ADC0_HI
 MOVWF SYS_TMP5

LCD_LT7_BIN1
 MOVLW HIGH LCD_LB1_CONVERTHEX ; set page
 MOVWF PCLATH
 SWAPF SYS_TMP5,W
 CALL LCD_LB1_CONVERTHEX
 MOVFW SYS_TMP5
 CALL LCD_LB1_CONVERTHEX
 SWAPF SYS_TMP4,W
 CALL LCD_LB1_CONVERTHEX
 MOVFW SYS_TMP4
 CALL LCD_LB1_CONVERTHEX

 BCF PCLATH,3 ; Page 0
 BCF PCLATH,4 ; Page 0
LABEL_LT7_SETFD

 BCF STATUS,RP0 ; Bank 0
 BCF STATUS,RP1 ; Bank 0
 BTFSS S0,0
 GOTO LABEL_LT7_SETFD2
 BSF LT7_FD,0
 GOTO LABEL_LT7_END
LABEL_LT7_SETFD2
 BCF STATUS,RP0 ; Bank 0
 BCF STATUS,RP1 ; Bank 0
 BCF LT7_FD,0
LABEL_LT7_END

;***************************************************
; Timer -> TR1
;***************************************************
 MOVLW 0 ; Test auf >=
 SUBWF TR1_HI,W ;F-W -> W
 BTFSS STATUS,ZERO
 GOTO LABEL_TR1_CHECK
 MOVLW 195
 SUBWF TR1,W ;F-W -> W
LABEL_TR1_CHECK
 BTFSS STATUS,CARRY
 GOTO LABEL_TR1_ENDE

LABEL_TR1_RESET
 MOVLW 0 ; Test auf >=
 SUBWF TR1_HI,F ;F-W -> F
 MOVLW 195
 SUBWF TR1,F ;F-W -> F
 BTFSS STATUS,CARRY
 DECF TR1_HI,F

LABEL_TR1_SET ; toggel output
 BTFSC S0,0
 GOTO LABEL_TR1_CLR
 BSF S0,0
 GOTO LABEL_TR1_ENDE
LABEL_TR1_CLR
 BCF S0,0
LABEL_TR1_ENDE

;***************************************************
; RS-FLIP-FLOP -> RS1
;***************************************************
 BCF STATUS,RP0 ; Bank 0
 BCF STATUS,RP1 ; Bank 0
 BTFSC S0,1
 GOTO LABEL_RS1_RESET
 BTFSS S0,0
 GOTO LABEL_RS1_ENDE
 BSF S0,2 ; Ausgang setzen
 GOTO LABEL_RS1_ENDE
LABEL_RS1_RESET
 BCF STATUS,RP0 ; Bank 0
 BCF STATUS,RP1 ; Bank 0
 BCF S0,2 ; Ausgang zurücksetzen
LABEL_RS1_ENDE

;***************************************************
; GND
;***************************************************

 BCF STATUS,RP0 ; Bank 0
 BCF STATUS,RP1 ; Bank 0
 BCF S0,1 ; immer Low

;****************************************
 GOTO MAIN
TAB_LT1
 RETLW 66 ; B
 RETLW 73 ; I
 RETLW 78 ; N
 RETLW 61 ; =
 RETLW 0 ; end

TAB_LT2
 RETLW 68 ; D
 RETLW 69 ; E
 RETLW 90 ; Z
 RETLW 61 ; =
 RETLW 0 ; end

TAB_LT3
 RETLW 72 ; H
 RETLW 69 ; E
 RETLW 88 ; X
 RETLW 61 ; =
 RETLW 0 ; end

TAB_LT4
 RETLW 76 ; L
 RETLW 67 ; C
 RETLW 68 ; D
 RETLW 45 ; -
 RETLW 84 ; T
 RETLW 101 ; e
 RETLW 115 ; s
 RETLW 116 ; t
 RETLW 0 ; end

 END

Yüklenecek programı çağırma, kaydetme, PIC’ in içindeki programı hex olarak okuma, PIC’ in içindeki programın silinmesi, PIC’ deki programın protect’ lenmesi vb. özellikleri içeren toolbar’ lar ekrana gelir. 
Ayrıca PIC içerisindeki programı Hex olarak görüntüleyen Program Memory penceresi ve EEPROM’ u görüntüleyen pencere ekrana gelir.
Yukarıda Parsic’ de verilen kaynak kodu, derlendikten sonra ki bu işlem için gerektiğinde Mplab vb. gibi programlar da  kullanılabilir; ProPic çalıştırıldıktan sonra, dosya çağırma bölümünden, hangi sürücüye, klasöre, hangi isimle kaydedilmiş ise File menüsünden Open seçeneği ile standart windows dosya çağırma mantığı ile çağrılır. Tabii tüm bu işlemler yapılırken PIC’in PIC Board üzerinde takılı olması gerekliliğini belirtmek gerekir.

Büyük görmek için resme Tıklayın!
Büyük görmek için resme Tıklayın!

Program çağrıldığında aşağıdaki pencerede programın hex kodu görüntülenir.
Büyük görmek için resme Tıklayın!
Büyük görmek için resme Tıklayın!

Bu bölümde projelerinde PIC kullanan ve PIC kullanmak isteyen okurlarımız için değişik program seçenekleri sunarak olabilecek alternatiflerden bahsetmeye çalıştım. Gelecek aydan itibaren yine işin program tasarımı ve uygulama kısmı ile ilgili açıklamalara ve örnek programlara yer vereceğim.

İyi Çalışmalar...

Adnan IŞIK