|
www.elektronik.si Forum o elektrotehniki in računalništvu
|
Poglej prejšnjo temo :: Poglej naslednjo temo |
Avtor |
Sporočilo |
DK Član
Pridružen-a: Ned 18 Apr 2010 14:58 Prispevkov: 57 Aktiv.: 0.33 Kraj: Mozirje
|
Objavljeno: Sre Nov 24, 2010 5:37 pm Naslov sporočila: AD pretvorba |
|
|
Lp
Poizkusil sem napisati program, ki bo merili 2 padca napetosti na potenciometrih. V primeru da je napetost na kanalu AN1 večja od napetosti na AN0, bi se mi prižgala LED,ki je na RB4.
Program sem naložil na PIC 16f88 vendar mi program ne deluje tako kot bi jaz želel???
Koda: |
LIST p=16F88 ; list directive to define processor
#INCLUDE <p16f88.inc> ; 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, _CP_OFF & _CCP1_RB0 & _DEBUG_OFF & _WRT_PROTECT_OFF & _CPD_OFF & _LVP_OFF & _BODEN_OFF & _MCLR_ON & _PWRTE_ON & _WDT_OFF & _XT_OSC
__CONFIG _CONFIG2, _IESO_OFF & _FCMEN_OFF
;------------------------------------------------------------------------------
;
T1 equ 0x20
T2 equ 0x21
; T3 equ 0x22
REZ1 equ 0x23
REZ2 equ 0x26
;
;------------------------------------------------------------------------------
; MAIN PROGRAM
;------------------------------------------------------------------------------
org 0x00
goto START
org 0x004
START
;PRVA MERITEV NA AN0
bsf STATUS, RP0 ;IZBEREMO BANKO 1
clrf TRISA
movlw b'00000001' ;POSTAVIMO 1 BIT V TRISA
movwf TRISA ;RA0 je vhod
clrf ANSEL ;V ANSEL damo same 0
bsf ANSEL, 0 ;Izberemo AD vhod = AN0
movlw b'10000000' ;desna poravnava, refenca(vss,vdd),
movwf ADCON1
bcf STATUS,RP0 ;Izberemo banko 0
movlw b'01000001' ;fosc/8, izbira AN0 kanala, vklop AD modula
movwf ADCON0
NOP
call AD_MERITEV ;Kličemo podprogram AD_MERITEV
bsf STATUS, RP0 ;IZBEREMO BANKO 1
movf ADRESL,W ;rezultat iz ADRESL shranimo v W
movwf REZ1 ;Vrednost ADRESL prenesemo v REZ1
bcf STATUS, RP0 ;IZBEREMO BANKO 0
movf ADRESH,W ;rezultat iz ADRESH shranimo v W
movwf REZ1+1 ;REZ1 je ADRESL pa ADRESH
call PAVZA
goto MERITEV_2
MERITEV_2
;DRUGA MERITEV NA AN1
bsf STATUS, RP0 ;IZBEREMO BANKO 1
clrf TRISA
movlw b'00000010' ;POSTAVIMO 2 BIT V TRISA
movwf TRISA ;RA1 je vhod
clrf ANSEL ;V ANSEL damo same 0
bsf ANSEL, 1 ;Izberemo AD vhod = AN1
movlw b'10000000' ;desna poravnava, refenca(vss,vdd),
movwf ADCON1
bcf STATUS,RP0 ;Izberemo banko 0
movlw b'01001001' ;fosc/8, izbira AN1 kanala, vklop AD modula
movwf ADCON0
NOP
call AD_MERITEV ;Kličemo podprogram AD_MERITEV
bsf STATUS, RP0 ;IZBEREMO BANKO 1
movf ADRESL,W ;rezultat iz ADRESL shranimo v W
movwf REZ2 ;Vrednost ADRESL prenesemo v REZ1
bcf STATUS, RP0 ;IZBEREMO BANKO 0
movf ADRESH,W ;rezultat iz ADRESH shranimo v W
movwf REZ2+1 ;REZ1 je ADRESL pa ADRESH
call RAZLIKA ;klicanje podprograma za odštevanje
bsf STATUS, RP0 ;IZBEREMO BANKO 1
movlw 0x00
movwf TRISB ;določimo da je portB izhod
bcf STATUS,RP0 ;Izberemo banko 0
btfss STATUS,C ;preverimo ali je C=1, če je C=0 je rezultat negativen
call LED ;če je C=0 skočimo na podprogram LED, kjer prižgemo led diodo
LED
movlw b'00010000'
movwf PORTB ;Rb4 postavimo na 1 in led gori
return
;TO UPORABIŠ NAPREJ ZA DODATNE ANALOGNE VHODE
;bcf STATUS, RP0 ;banka 0
;movlw b'01001001' ;fosc/8, izbira AN1 kanala, vklop AD modula
;call PAVZA
;PAVZA MED MERITVAMI
PAVZA
movlw .255
movwf T1
movlw .240
movwf T2
; movlw .2
; movwf T3
Z1
decfsz T1,f
goto Z1
decfsz T2,f
goto Z1
; decfsz T3,f
; goto Z1
return
AD_MERITEV
bsf ADCON0, GO ;Zaženemo ad pretvorbo
btfsc ADCON0,2 ;preverjamo lai je končana ad pretvorba
goto AD_MERITEV ;ponavlja dokler ni končana meritev
return
RAZLIKA
movf REZ2+1,W ;nižji bajt REZ2 -> W
subwf REZ1+1,f ;odštej nižje bajte...REZ2 odšteje od REZ1
movf REZ2,W ;višji bajt REZ2 -> W
btfss STATUS,C ;ali je prišlo do prenosa (C=0)?
incf REZ2,W ;DA, povečaj REZ2 -> w
subwf REZ1,W ;odštej višje bajte
return
goto START ;ponovi vse skupaj
end |
|
|
Nazaj na vrh |
|
|
gumby Član
Pridružen-a: Sob 28 Apr 2007 12:32 Prispevkov: 4066 Aktiv.: 19.65
|
Objavljeno: Sre Nov 24, 2010 6:36 pm Naslov sporočila: |
|
|
Koda: |
goto AD_MERITEV ;ponavlja dokler ni končana meritev |
Tole bo narobe, ker vedno znova zaženeš pretvorbo. Skočit moraš na BTFSC ukaz, eno vrstico višje od GOTO. Lahko napišeš "goto $-1", prevajalnik bo razumel.
Še nekaj: če misliš uporabit interni oscilator, potem spremeni CONFIG ukaz. _________________ Tule nisem več aktiven. |
|
Nazaj na vrh |
|
|
DK Član
Pridružen-a: Ned 18 Apr 2010 14:58 Prispevkov: 57 Aktiv.: 0.33 Kraj: Mozirje
|
Objavljeno: Sre Nov 24, 2010 6:56 pm Naslov sporočila: |
|
|
popravil napako, vendar še vedno ne dela prav. dioda začne takoj po vklopu svetiti in sveti, ne glede na to kako spreminjam potenciometra!
uporabljen imam zunanji oscilator |
|
Nazaj na vrh |
|
|
gumby Član
Pridružen-a: Sob 28 Apr 2007 12:32 Prispevkov: 4066 Aktiv.: 19.65
|
Objavljeno: Sre Nov 24, 2010 7:03 pm Naslov sporočila: |
|
|
Kje je skok na začetek glavne zanke?
Kje ugasneš LED?
TRIS, ADCON in ostale registre ne rabiš nastavljat pri vsaki meritvi. Na začetku programa to vse porihtaj, potem pa v zanki samo izbereš kanal za AD, izvedeš meritve in prižgeš/ugasneš LED. _________________ Tule nisem več aktiven. |
|
Nazaj na vrh |
|
|
DK Član
Pridružen-a: Ned 18 Apr 2010 14:58 Prispevkov: 57 Aktiv.: 0.33 Kraj: Mozirje
|
Objavljeno: Čet Dec 09, 2010 11:09 pm Naslov sporočila: |
|
|
program mi je uspelo napisati. Vhodi od AN0 do AN4 delujejo, ko pa pride do AN5 se pa nekaj zalomi. Sumim da nisem v config vredu napisal za oscilator, ker AN5 je pin za priklop oscilatorja in ga zato mogoče ne jemlje kot vhod. ???
Koda: |
__CONFIG _CONFIG1, _CP_OFF & _CCP1_RB0 & _DEBUG_OFF & _WRT_PROTECT_OFF & _CPD_OFF & _LVP_OFF & _BODEN_OFF & _MCLR_ON & _PWRTE_ON & _WDT_OFF & _INTRC_IO
__CONFIG _CONFIG2, _IESO_OFF & _FCMEN_OFF |
|
|
Nazaj na vrh |
|
|
gumby Član
Pridružen-a: Sob 28 Apr 2007 12:32 Prispevkov: 4066 Aktiv.: 19.65
|
Objavljeno: Čet Dec 09, 2010 11:54 pm Naslov sporočila: |
|
|
Na 16F88 je vhod AN5 na pinu RB6.
Saj imaš ta čip, ane... _________________ Tule nisem več aktiven. |
|
Nazaj na vrh |
|
|
DK Član
Pridružen-a: Ned 18 Apr 2010 14:58 Prispevkov: 57 Aktiv.: 0.33 Kraj: Mozirje
|
Objavljeno: Pet Dec 10, 2010 10:10 am Naslov sporočila: |
|
|
ja AN5 je na RB6(12-pin). |
|
Nazaj na vrh |
|
|
DK Član
Pridružen-a: Ned 18 Apr 2010 14:58 Prispevkov: 57 Aktiv.: 0.33 Kraj: Mozirje
|
Objavljeno: Pet Dec 10, 2010 3:25 pm Naslov sporočila: |
|
|
našel sem napako. nisem ga na začetku definiral da je vhod.
tnx |
|
Nazaj na vrh |
|
|
DK Član
Pridružen-a: Ned 18 Apr 2010 14:58 Prispevkov: 57 Aktiv.: 0.33 Kraj: Mozirje
|
Objavljeno: Sre Feb 02, 2011 11:25 pm Naslov sporočila: |
|
|
sedaj sem napisal program, ki bo meril 6 padcev napetosti. in ko je izpolnjen pogoj da je na vsakem naslednjem potenciometru večji padec napetosti, bi želel da mi na izhodu LED dioda gori, ampak mi LED utripa!?
kako narediti da bo ob izpolnjenem pogoju dioda svetila in ne utripala? |
|
Nazaj na vrh |
|
|
igo Član
Pridružen-a: Sre 11 Okt 2006 19:11 Prispevkov: 3638 Aktiv.: 17.03
|
Objavljeno: Čet Feb 03, 2011 12:10 am Naslov sporočila: Re: AD pretvorba |
|
|
Koda: |
START
nastavitev vseh registrov, inicializacija portov, ...
...
bcf STATUS,RP0 ;Izberemo banko 0
btfss STATUS,C ;preverimo ali je C=1, če je C=0 je rezultat negativen
call LED ;če je C=0 skočimo na podprogram LED, kjer prižgemo led diodo
LED
movlw b'00010000'
movwf PORTB ;Rb4 postavimo na 1 in led gori
return
RAZLIKA
movf REZ2+1,W ;nižji bajt REZ2 -> W
subwf REZ1+1,f ;odštej nižje bajte...REZ2 odšteje od REZ1
movf REZ2,W ;višji bajt REZ2 -> W
btfss STATUS,C ;ali je prišlo do prenosa (C=0)?
incf REZ2,W ;DA, povečaj REZ2 -> w
subwf REZ1,W ;odštej višje bajte
return
goto START ;ponovi vse skupaj
end |
1. Brezpogojno in takoj spravi program v naslednjo obliko:
Koda: |
INIT ; inicializacija vsega, ADC, PORTi ....
...
GlavnaZ ; Glavna Zanka, ki se ponavlja ves čas
...
call pPodprogram1
...
call pPodprogram2
...
call pPodprogram3
...
goto GlavnaZ ; Ponovi vse skupaj
pPodprogram1
...
return
pPodprogram2
...
return
pPodprogram3
...
return
end |
2. V zgoraj pripetem koščku ponavljaš START, ki je pravzaprav celotna kolobocija z inicializacijo vred, ki je ne smeš ponavljati ob vsakem prehodu zanke. Loči INIT in GlavnaZ.
3. Zgoraj imaš tudi zelo tvegano kombinacijo skok/klic - call LED . Če je C=1, greš v naslednjo vrstico (torej v LED), če pa je C=0, pa pokličeš LED in se vrneš, nato spet v naslednji vrstici izvedeš LED.
4. Ker se vsakič izvede inicializacija (ugasneš ledico) in 6 meritev traja dolgo, LED utripa.
Recimo, da 6-krat primerjaš vrednosti ADC meritve in morajo biti po velikosti.
Koda: |
GlavnaZ
call Izmeri
call pPrimerja
goto GlavnaZ
pIzmeri ; izmeri 6 ADC
...
call Pavza
...
return
pPavza
...
return
pPrimerja
bcf zVecji ; zastavice,0
movf ADCrez1,W ; W
subwf ADCrez2,W ; F - W
btfss STATUS,C ; je F < W ?
goto PrimerjaV; Ne, VEN
movf ADCrez2,W ; W
subwf ADCrez3,W ; F - W
btfss STATUS,C ; je F < W ?
goto PrimerjaV; Ne, VEN
...
movf ADCrez5,W ; W
subwf ADCrez6,W ; F - W
btfss STATUS,C ; je F < W ?
goto PrimerjaV; Ne, VEN
bsf zVecji ; ja
bcf iLedica ; izbriše izhod LEDICA
btfss zVecji ; je zastavica postavljena ?
bsf iLedica ; postavi izhod LEDICA
return
PrimerjaV; Ne, VEN
bcf iLedica ; izbriše izhod LEDICA
return |
_________________ Teoretično je praksa posledica teorije, praktično je pa ravno obratno. (igo 2001)
LP, Igor |
|
Nazaj na vrh |
|
|
DK Član
Pridružen-a: Ned 18 Apr 2010 14:58 Prispevkov: 57 Aktiv.: 0.33 Kraj: Mozirje
|
Objavljeno: Čet Feb 03, 2011 12:42 am Naslov sporočila: |
|
|
Koda: |
;******************************************************************************
; This file is a basic code template for code generation *
; on the PIC16F88. 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: xxx.asm *
; Date: *
; File Version: *
; *
; Author: *
; Company: *
; *
; *
;******************************************************************************
; *
; Files required: P16F88.INC *
; *
;******************************************************************************
; *
; Features of the 16F88: *
; *
; 1 10-bit PWM *
; 8 MHz Internal Oscillator *
; ICD support *
; 256 bytes of EEPROM data memory *
; Capture/Compare Module *
; *
;******************************************************************************
; *
; Notes: *
; *
;******************************************************************************
; *
; Revision History: *
; *
;******************************************************************************
;------------------------------------------------------------------------------
; PROCESSOR DECLARATION
;------------------------------------------------------------------------------
LIST p=16F88 ; list directive to define processor
#INCLUDE <p16f88.inc> ; 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, _CP_OFF & _CCP1_RB0 & _DEBUG_OFF & _WRT_PROTECT_OFF & _CPD_OFF & _LVP_OFF & _BODEN_OFF & _MCLR_ON & _PWRTE_ON & _WDT_OFF & _INTRC_IO
__CONFIG _CONFIG2, _IESO_OFF & _FCMEN_OFF
;------------------------------------------------------------------------------
;------------------------
;Nastavitev spremenljivk
;------------------------
T1 equ 0x20
T2 equ 0x21
T3 equ 0x22
REZ1 equ 0x23 ;rezultat 1 meritve(AN0)
REZ2 equ 0x26 ;rezultat 2 meritve(AN1)
REZ3 equ 0x29 ;rezultat 3 meritve(AN2)
REZ4 equ 0x32 ;rezultat 4 meritve(AN3)
REZ5 equ 0x35 ;rezultat 5 meritve(AN4)
REZ6 equ 0x38 ;rezultat 6 meritve(AN5)
R12 equ 0x41 ;rezultat če je drugi potenciometer večji od prvega
R23 equ 0x42 ;rezultat če je tretji večji od drugega
R34 equ 0x43 ;rezultat če je četrti večji od tretjega
R45 equ 0x44 ;rezultat če je peti večji od četrtega
R56 equ 0x45 ;rezultat če je šesti večji od petega
org 0x00
goto START
org 0x004
;---------------------------------------------------------
;Glavni program
;---------------------------------------------------------
START
bsf STATUS, RP0 ;IZBEREMO BANKO 1
clrf TRISA
movlw b'11111111' ;POSTAVIMO enke V TRISA
movwf TRISA ;RA0,RA1,RA2,RA3,RA4,RA6,RA7 je vhod
movlw b'01000000'
movwf TRISB ;določimo da je portB izhod, razen RB7, ki bo AN6
movlw b'10000000' ;desna poravnava, refenca(vss,vdd),
movwf ADCON1
bcf STATUS,RP0 ;Izberemo banko 0
clrf PORTB ;Zbrisemo Portb
clrf REZ1
clrf REZ2
clrf REZ1+1
clrf REZ2+1
clrf REZ3
clrf REZ4
clrf REZ3+1
clrf REZ4+1
clrf REZ5
clrf REZ6
clrf REZ5+1
clrf REZ6+1
clrf R12
clrf R23
clrf R34
clrf R45
clrf R56
MERITEV
;PRVA MERITEV NA AN0
bcf STATUS,RP0 ;Izberemo banko 0
movlw b'10000000' ;f/32, izbira AN0 kanala, AD modul ni vkloplen
movwf ADCON0
bsf STATUS, RP0 ;IZBEREMO BANKO 1
clrf ANSEL ;V ANSEL damo same 0
bsf ANSEL, 0 ;Izberemo AD vhod = AN0
call AD_MERITEV
bsf STATUS, RP0 ;IZBEREMO BANKO 1
movf ADRESL,W ;rezultat iz ADRESL shranimo v Wž
bcf STATUS, RP0 ;banka 0
movwf REZ1 ;Vrednost ADRESL prenesemo v REZ1
bcf STATUS, RP0 ;IZBEREMO BANKO 0
movf ADRESH,W ;rezultat iz ADRESH shranimo v W
movwf REZ1+1 ;REZ1 je ADRESL pa ADRESH
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
;------druga meritev-------
bcf STATUS,RP0 ;Izberemo banko 0
movlw b'10001000' ;f/32, izbira AN1 kanala, AD modul NI VKLOPLEN
movwf ADCON0
bsf STATUS, RP0 ;IZBEREMO BANKO 1
clrf ANSEL ;V ANSEL damo same 0
bsf ANSEL, 1 ;Izberemo AD vhod = AN0
call AD_MERITEV
bsf STATUS, RP0 ;IZBEREMO BANKO 1
movf ADRESL,W ;rezultat iz ADRESL shranimo v W
bcf STATUS, RP0 ;banka 0
movwf REZ2 ;Vrednost ADRESL prenesemo v REZ1
bcf STATUS, RP0 ;IZBEREMO BANKO 0
movf ADRESH,W ;rezultat iz ADRESH shranimo v W
movwf REZ2+1 ;REZ1 je ADRESL pa ADRESH
;------tretja meritev--------
bcf STATUS,RP0 ;Izberemo banko 0
movlw b'10010000' ;f/32, izbira AN0 kanala, AD modul ni vkloplen
movwf ADCON0
bsf STATUS, RP0 ;IZBEREMO BANKO 1
clrf ANSEL ;V ANSEL damo same 0
bsf ANSEL, 2 ;Izberemo AD vhod = AN0
call AD_MERITEV
bsf STATUS, RP0 ;IZBEREMO BANKO 1
movf ADRESL,W ;rezultat iz ADRESL shranimo v Wž
bcf STATUS, RP0 ;banka 0
movwf REZ3 ;Vrednost ADRESL prenesemo v REZ1
bcf STATUS, RP0 ;IZBEREMO BANKO 0
movf ADRESH,W ;rezultat iz ADRESH shranimo v W
movwf REZ3+1 ;REZ1 je ADRESL pa ADRESH
;--------četrta meritev------
bcf STATUS,RP0 ;Izberemo banko 0
movlw b'10011000' ;f/32, izbira AN0 kanala, AD modul ni vkloplen
movwf ADCON0
bsf STATUS, RP0 ;IZBEREMO BANKO 1
clrf ANSEL ;V ANSEL damo same 0
bsf ANSEL, 3 ;Izberemo AD vhod = AN0
call AD_MERITEV
bsf STATUS, RP0 ;IZBEREMO BANKO 1
movf ADRESL,W ;rezultat iz ADRESL shranimo v Wž
bcf STATUS, RP0 ;banka 0
movwf REZ4 ;Vrednost ADRESL prenesemo v REZ1
bcf STATUS, RP0 ;IZBEREMO BANKO 0
movf ADRESH,W ;rezultat iz ADRESH shranimo v W
movwf REZ4+1 ;REZ1 je ADRESL pa ADRESH
;---------peta meritev------
bcf STATUS,RP0 ;Izberemo banko 0
movlw b'10100000' ;f/32, izbira AN0 kanala, AD modul ni vkloplen
movwf ADCON0
bsf STATUS, RP0 ;IZBEREMO BANKO 1
clrf ANSEL ;V ANSEL damo same 0
bsf ANSEL, 4 ;Izberemo AD vhod = AN0
call AD_MERITEV
bsf STATUS, RP0 ;IZBEREMO BANKO 1
movf ADRESL,W ;rezultat iz ADRESL shranimo v Wž
bcf STATUS, RP0 ;banka 0
movwf REZ5 ;Vrednost ADRESL prenesemo v REZ1
bcf STATUS, RP0 ;IZBEREMO BANKO 0
movf ADRESH,W ;rezultat iz ADRESH shranimo v W
movwf REZ5+1 ;REZ1 je ADRESL pa ADRESH
;--------šesta meritev-------
bcf STATUS,RP0 ;Izberemo banko 0
movlw b'10101000' ;f/32, izbira AN0 kanala, AD modul ni vkloplen
movwf ADCON0
bsf STATUS, RP0 ;IZBEREMO BANKO 1
clrf ANSEL ;V ANSEL damo same 0
bsf ANSEL, 5 ;Izberemo AD vhod = AN0
call AD_MERITEV
bsf STATUS, RP0 ;IZBEREMO BANKO 1
movf ADRESL,W ;rezultat iz ADRESL shranimo v Wž
bcf STATUS, RP0 ;banka 0
movwf REZ6 ;Vrednost ADRESL prenesemo v REZ1
bcf STATUS, RP0 ;IZBEREMO BANKO 0
movf ADRESH,W ;rezultat iz ADRESH shranimo v W
movwf REZ6+1 ;REZ1 je ADRESL pa ADRESH
call RAZLIKA ;klicanje podprograma za odštevanje 1 in 2
call RAZLIKA2 ;klicanje podprograma za odštevanje 2 in 3
call RAZLIKA3 ;klicanje podprograma za odštevanje 3 in 4
call RAZLIKA4
call RAZLIKA5
;-----------------------
;IN VRATA MED R12 IN R23 , PRŽGE LED NA (PORTB,3)
;-----------------------
call INVRATA
; call PAVZA
goto START ;ponovi vse skupaj
AD_MERITEV
clrf ADRESL
clrf ADRESH
bcf STATUS,RP0 ;Izberemo banko 0
bsf ADCON0, ADON ;VKLOP AD MODULA
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
bsf ADCON0, 2 ;Zaženemo ad pretvorbo
btfsc ADCON0,2 ;preverjamo ali je končana ad pretvorba
goto $-1 ;ponavlja dokler ni končana meritev
bcf ADCON0, ADON
return
LED
bsf PORTB,4
movlw b'00000001' ;00000001 shranimo v R12, če je 2 potenc večji od prvega
movwf R12
return
RAZLIKA
movf REZ2+1,W ;nižji bajt REZ2 -> W
subwf REZ1+1,f ;odštej nižje bajte...REZ2 odšteje od REZ1
movf REZ2,W ;višji bajt REZ2 -> W
btfss STATUS,C ;ali je prišlo do prenosa (C=0)?
incf REZ2,W ;DA, povečaj REZ2 -> w
subwf REZ1,f ;odštej višje bajte
btfss STATUS, C ;preverimo ali je C=1, če je C=0 je rezultat negativen
goto LED ;če je C=0(negativen) prižgemo LED na RB4
;bsf PORTB,3 ;če pa je C=1(pozitiven)pa prižgemo LED na RB3
return
LED2
movlw b'00000001' ;00000001 shranimo v R12, če je 2 potenc večji od prvega
movwf R23
return
RAZLIKA2
movf REZ3+1,W ;nižji bajt REZ3 -> W
subwf REZ2+1,f ;odštej nižje bajte...REZ3 odšteje od REZ2
movf REZ3,W ;višji bajt REZ3 -> W
btfss STATUS,C ;ali je prišlo do prenosa (C=0)?
incf REZ3,W ;DA, povečaj REZ3 -> w
subwf REZ2,f ;odštej višje bajte
btfss STATUS, C ;preverimo ali je C=1, če je C=0 je rezultat negativen
goto LED2 ;če je C=0(negativen) prižgemo LED na RB4
;bsf PORTB,3 ;če pa je C=1(pozitiven)pa prižgemo LED na RB3
return
LED3
movlw b'00000001' ;00000001 shranimo v R12, če je 2 potenc večji od prvega
movwf R34
return
RAZLIKA3
movf REZ4+1,W ;nižji bajt REZ3 -> W
subwf REZ3+1,f ;odštej nižje bajte...REZ3 odšteje od REZ2
movf REZ4,W ;višji bajt REZ3 -> W
btfss STATUS,C ;ali je prišlo do prenosa (C=0)?
incf REZ4,W ;DA, povečaj REZ2 -> w
subwf REZ3,f ;odštej višje bajte
btfss STATUS, C ;preverimo ali je C=1, če je C=0 je rezultat negativen
goto LED3 ;če je C=0(negativen) prižgemo LED na RB4
;bsf PORTB,3 ;če pa je C=1(pozitiven)pa prižgemo LED na RB3
return
LED4
movlw b'00000001' ;00000001 shranimo v R12, če je 2 potenc večji od prvega
movwf R45
return
RAZLIKA4
movf REZ5+1,W ;nižji bajt REZ3 -> W
subwf REZ4+1,f ;odštej nižje bajte...REZ3 odšteje od REZ2
movf REZ5,W ;višji bajt REZ3 -> W
btfss STATUS,C ;ali je prišlo do prenosa (C=0)?
incf REZ5,W ;DA, povečaj REZ2 -> w
subwf REZ4,f ;odštej višje bajte
btfss STATUS, C ;preverimo ali je C=1, če je C=0 je rezultat negativen
goto LED4 ;če je C=0(negativen) prižgemo LED na RB4
;bsf PORTB,3 ;če pa je C=1(pozitiven)pa prižgemo LED na RB3
return
LED5
movlw b'00000001' ;00000001 shranimo v R12, če je 2 potenc večji od prvega
movwf R56
return
RAZLIKA5
movf REZ6+1,W ;nižji bajt REZ3 -> W
subwf REZ5+1,f ;odštej nižje bajte...REZ3 odšteje od REZ2
movf REZ6,W ;višji bajt REZ3 -> W
btfss STATUS,C ;ali je prišlo do prenosa (C=0)?
incf REZ6,W ;DA, povečaj REZ2 -> w
subwf REZ5,f ;odštej višje bajte
btfss STATUS, C ;preverimo ali je C=1, če je C=0 je rezultat negativen
goto LED5 ;če je C=0(negativen) prižgemo LED na RB4
;bsf PORTB,3 ;če pa je C=1(pozitiven)pa prižgemo LED na RB3
return
INVRATA
movf R12,W
andwf R23,f
btfss STATUS, Z
goto INVRATA2
return ;če že drugi potenci ni večji od prvega pojdi nazaj
INVRATA2
movf R34,W
andwf R23,f
btfss STATUS, Z
goto INVRATA3
return
INVRATA3
movf R45,W
andwf R34,f
btfss STATUS, Z
goto INVRATA4
return
INVRATA4
movf R56,W
andwf R45,f
btfss STATUS, Z
bsf PORTB,3
goto PAVZA
return
;-------------------
;PAVZA MED MERITVAMI
;-------------------
PAVZA
movlw .255
movwf T1
movlw .240
movwf T2
movlw .2
movwf T3
Z1
decfsz T1,f
goto Z1
decfsz T2,f
goto Z1
decfsz T3,f
goto Z1
return
end
|
tkle zgleda zdej moja koda...tist kar je u prejšnih postih je staro...
ne razumem točno zaka led utripa?[/quote] |
|
Nazaj na vrh |
|
|
|
|
Ne, ne moreš dodajati novih tem v tem forumu Ne, ne moreš odgovarjati na teme v tem forumu Ne, ne moreš urejati svojih prispevkov v tem forumu Ne, ne moreš brisati svojih prispevkov v tem forumu Ne ne moreš glasovati v anketi v tem forumu Ne, ne moreš pripeti datotek v tem forumu Ne, ne moreš povleči datotek v tem forumu
|
Uptime: 77 dni
Powered by phpBB © 2001, 2005 phpBB Group
|