www.elektronik.si Seznam forumov www.elektronik.si
Forum o elektrotehniki in računalništvu
 
 PomočPomoč  IščiIšči  Seznam članovSeznam članov  SkupineSkupine  StatisticsStatistika  AlbumAlbum  DatotekeFilemanager DokumentacijaDocDB LinksPovezave   Registriraj seRegistriraj se 
  PravilaPravila  LinksBolha  PriponkePriponke  KoledarKoledar  ZapiskiZapiski Tvoj profilTvoj profil Prijava za pregled zasebnih sporočilPrijava za pregled zasebnih sporočil PrijavaPrijava 

AD pretvorba

 
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> Osnove programiranja PIC-a v Assembler-ju
Poglej prejšnjo temo :: Poglej naslednjo temo  
Avtor Sporočilo
DK
Član
Član



Pridružen-a: Ned 18 Apr 2010 14:58
Prispevkov: 57
Aktiv.: 0.34
Kraj: Mozirje

PrispevekObjavljeno: Sre Nov 24, 2010 5:37 pm    Naslov sporočila:  AD pretvorba Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
gumby
Član
Član



Pridružen-a: Sob 28 Apr 2007 12:32
Prispevkov: 4066
Aktiv.: 19.74

PrispevekObjavljeno: Sre Nov 24, 2010 6:36 pm    Naslov sporočila:   Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
DK
Član
Član



Pridružen-a: Ned 18 Apr 2010 14:58
Prispevkov: 57
Aktiv.: 0.34
Kraj: Mozirje

PrispevekObjavljeno: Sre Nov 24, 2010 6:56 pm    Naslov sporočila:   Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
gumby
Član
Član



Pridružen-a: Sob 28 Apr 2007 12:32
Prispevkov: 4066
Aktiv.: 19.74

PrispevekObjavljeno: Sre Nov 24, 2010 7:03 pm    Naslov sporočila:   Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
DK
Član
Član



Pridružen-a: Ned 18 Apr 2010 14:58
Prispevkov: 57
Aktiv.: 0.34
Kraj: Mozirje

PrispevekObjavljeno: Čet Dec 09, 2010 11:09 pm    Naslov sporočila:   Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
gumby
Član
Član



Pridružen-a: Sob 28 Apr 2007 12:32
Prispevkov: 4066
Aktiv.: 19.74

PrispevekObjavljeno: Čet Dec 09, 2010 11:54 pm    Naslov sporočila:   Odgovori s citatom

Na 16F88 je vhod AN5 na pinu RB6.
Saj imaš ta čip, ane... Think

_________________
Tule nisem več aktiven.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
DK
Član
Član



Pridružen-a: Ned 18 Apr 2010 14:58
Prispevkov: 57
Aktiv.: 0.34
Kraj: Mozirje

PrispevekObjavljeno: Pet Dec 10, 2010 10:10 am    Naslov sporočila:   Odgovori s citatom

ja AN5 je na RB6(12-pin).
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
DK
Član
Član



Pridružen-a: Ned 18 Apr 2010 14:58
Prispevkov: 57
Aktiv.: 0.34
Kraj: Mozirje

PrispevekObjavljeno: Pet Dec 10, 2010 3:25 pm    Naslov sporočila:   Odgovori s citatom

našel sem napako. nisem ga na začetku definiral da je vhod.
tnx
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
DK
Član
Član



Pridružen-a: Ned 18 Apr 2010 14:58
Prispevkov: 57
Aktiv.: 0.34
Kraj: Mozirje

PrispevekObjavljeno: Sre Feb 02, 2011 11:25 pm    Naslov sporočila:   Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
igo
Član
Član



Pridružen-a: Sre 11 Okt 2006 19:11
Prispevkov: 3638
Aktiv.: 17.11

PrispevekObjavljeno: Čet Feb 03, 2011 12:10 am    Naslov sporočila:  Re: AD pretvorba Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
DK
Član
Član



Pridružen-a: Ned 18 Apr 2010 14:58
Prispevkov: 57
Aktiv.: 0.34
Kraj: Mozirje

PrispevekObjavljeno: Čet Feb 03, 2011 12:42 am    Naslov sporočila:   Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
Pokaži sporočila:   
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> Osnove programiranja PIC-a v Assembler-ju Časovni pas GMT + 2 uri, srednjeevropski - poletni čas
Stran 1 od 1

 
Pojdi na:  
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: 48 dni


Powered by phpBB © 2001, 2005 phpBB Group