;****************************************************************************** ; This file is a basic code template for code generation on the * ; PIC16F1827. This file contains the basic code building blocks to build * ; upon. * ; * ; Refer to the MPASM User's Guide for additional information on * ; features of the assembler. * ; * ; Refer to the respective data sheet for additional * ; information on the instruction set. * ; * ;****************************************************************************** ; * ; Filename: blikled1.asm * ; Date: 29.12.2012 * ; File Version: V 1,0 * ; * ; Author: Elektrostudio * ; Company: Elite * ; * ; * ;****************************************************************************** ; * ; Files Required: P16F1827.INC * ; * ;****************************************************************************** ; * ; Notes: USE hardware feom rsinisa@elitesecurity.org * ; * ;****************************************************************************** ; * ; Revision History: * ; * ;****************************************************************************** list p=16f1827 ; list directive to define processor #include ; processor specific variable definitions ;------------------------------------------------------------------------------ ; ; CONFIGURATION WORD SETUP ; ; The 'CONFIG' directive is used to embed the configuration word within the ; .asm file. The lables following the directive are located in the respective ; .inc file. See the data sheet for additional information on configuration ; word settings. ; ;------------------------------------------------------------------------------ __CONFIG _CONFIG1, _FOSC_INTOSC & _WDTE_OFF & _PWRTE_OFF & _MCLRE_OFF & _CP_OFF & _CPD_OFF & _BOREN_OFF & _CLKOUTEN_OFF & _IESO_OFF & _FCMEN_OFF __CONFIG _CONFIG2, _WRT_OFF & _PLLEN_OFF & _STVREN_OFF & _BORV_19 & _LVP_OFF ; !!! Za razliku od defaulta imamo samo _CLKOUTEN_OFF umesto _CLKOUTEN_ON ; !!! da bi nam OUTCLK pin bio slobodan za I/O operacije ;------------------------------------------------------------------------------ ; VARIABLE DEFINITIONS ; ; Available Data Memory divided into Bank 0-15. Each Bank may contain ; Special Function Registers, General Purpose Registers, and Access RAM ; ;------------------------------------------------------------------------------ CBLOCK 0x20 ; Define GPR variable register locations MYVAR1 ; User variables allocated contiguously MYVAR2 ; MYVAR3 ; ENDC SAMPLE1 EQU 0x7D ; Sample user registers SAMPLE2 EQU 0x7E ; SAMPLE3 EQU 0x7F ; ;------------------------------------------------------------------------------ ; EEPROM INITIALIZATION ; ; The 16F1827 has 256 bytes of non-volatile EEPROM, starting at address 0xF000 ; ;------------------------------------------------------------------------------ DATAEE ORG 0xF000 DE "MCHP" ; Place 'M' 'C' 'H' 'P' at address 0,1,2,3 ;------------------------------------------------------------------------------ ; RESET VECTOR ;------------------------------------------------------------------------------ ORG 0x0000 ; processor reset vector PAGESEL START bra START ; When using debug header, first inst. ; may be passed over by ICD2. ;------------------------------------------------------------------------------ ; INTERRUPT SERVICE ROUTINE ;------------------------------------------------------------------------------ ORG 0x0004 ;------------------------------------------------------------------------------ ; USER INTERRUPT SERVICE ROUTINE GOES HERE ;------------------------------------------------------------------------------ ; Note the 16F1827 family automatically handles context restoration for ; W, STATUS, BSR, FSR, and PCLATH where previous templates for 16F families ; required manual restoration. Shadow registers store these SFR values, and ; shadow registers may be modified since they are readable and writable for ; modification to the context restoration. RETFIE ; return from interrupt ;------------------------------------------------------------------------------ ; MAIN PROGRAM ;------------------------------------------------------------------------------ START ; !!! posto nakon reseta mcu clock je na 500kHz moramo prebaciti clock na ; !!! zeljeni radni takt (uzet je 4Mhz da bi imali 1uS vreme izvrsenja instrukcije) movlw b'01101000' ; bi7 PLL off ; bit 6-3 intrnal osc on 4Mhz ; bit 2 = 0 ; bit 1-0 sistem clock select in config1 word BANKSEL OSCCON ; selektovati BANK od OSCCON registra ;BANKSEL je direktiva ASM-u da generise kod za pristup naznacenoj banci SFR ERRORLEVEL -302 ; iskljuciti upozorenje ASM-a movwf OSCCON ; od ovog momenta krece MCU na 4Mhz ERRORLEVEL +302 ; ponovo ukljuciti upozorenje ASM-a ; ERRORLEVEL je direktiva ASM-u da iskljuci/ukljuci upozorenje ; 302 je broj upozorenja ASM-a da se pristupa SFR u drugoj BANCI a ne u BANK0 BANKSEL TRISB ; potrebna nam je banka TRISB da odredimo I/O pinove ERRORLEVEL -302 movlw b'00000000' ; svi pinovi u OUTPUT jer palimo LED-ovke movwf TRISB ; postavi pinove PORT-a B ERRORLEVEL +302 ; BANKSEL LATB ; OUTPUT LATCH ERRORLEVEL -302 ; clrf LATB ; all .0. ERRORLEVEL +302 ; BANKSEL MYVAR1 ; selektujemo BANK gde su nase varijable MAINLOOP: ; sa frekvecijom 4Mhz vreme izvrsavanje instrukcije 1uS i kako imamo dve u petlji ; moramo to ukalkulisai kod odredjivanja koliko treba brojati ; kako sa jednim bajtom mozemo postici max 256 vrednosti uzimamo okruglu vrednost 200 ; imamo da je pa je 2*1uS*250=500uS ; (naravno da je ovo samo racunski - u praksi je malo drugacije ali vraticemo se) ; ali kako nama treba vece kasnjenje u sledeci bajt zadacemo brojanje ; 100 da bi dobili kasnjenje 50mS ; a kako treba nam kasnjenje 10 x 50ms te da prvo u myvar1 postavimo broj 10 movlw D'10' ; zadato kasnjenje 10 * 100 * 500uS movwf MYVAR1 ; loop1: movlw D'100' ; petlja 100 * 500uS movwf MYVAR2 ; loop2: ; movlw D'250' ; petlja 500uS movwf MYVAR3 ; loop3: ; decfsz MYVAR3,F ; bra loop3 ; decfsz MYVAR2,F ; bra loop2 ; decfsz MYVAR1,F ; bra loop1 ; ; radimo izmenu logicke vrednosti na pinu PB0 PORTAB movlw b'000000001' ; xorwf PORTB,F ; GOTO MAINLOOP ; skok na glavnu petlju END