

    __config  3FF1h

   include P16F84A.INC

; Takt = 4MHz

;*******************************************************************

; PWM kontrol_V1.0

;*******************************************************************

;                definice konstant

#define bank0   bcf  STATUS,RP0                      ;prepnuti do banky 0 v pameti dat

#define bank1   bsf  STATUS,RP0                      ;prepnuti do banky 1 v pameti dat

;*******************************************************************

;           definice portu

#define  ovlRA0  PORTA,0                                  ;Spínaní programu pinem RA0 (pulz ?ms)          

;*******************************************************************

;                definice uživatelských registrů

OffRam EQU         20h                                      ;První adresa paměti RAM pro PIC16F873 - 368 bajtů (20h - 7Fh)

TMP0               EQU         OffRam+1                 ;Nacítání casových smycek

TMP1               EQU         OffRam+2                 ;Nacítání casových smycek

TMP2               EQU         OffRam+3                 ;Nacítání casových smycek

IMPwidth          EQU         OffRam+4                 ;Načtená šířka ovládacího impulzu

Imp50m            EQU         OffRam+5                 ;Proměnná pro smyčku analiz

;******************************************************************************************

	org       2100h                                                  ;přednast. adr. v EEPROM

;**************************************************************************





	org 0h                                                              ;začátek programu

Ini                   

                       						 bank1                       ;přepnutí do bank 1 v pameti dat

                        movlw               .255

                         movwf              TRISA                ;A0-7 jako vstup

                         clrf               TRISB                  ;B0-7 jako výstup

                         bcf                INTCON,GIE     ;zakazat vsechna preruseni

                        					 bank0                                         ;přepnutí do bank 0 v pameti dat                       

                         clrw                          ;vynulování pracovního registru

                        clrf                   PORTA             ;vynulování portu A

                        clrf                   PORTB             ;vynulování portu B

;-------------------------------------------------------------------------------------------------

Start   

                        call                   Cek40m

                        movlw               b'00000000'

                        movwf               PORTB

                       

;--------Test vstupu----------

                                              

tstin                            

                        movlw               .50                                           

                        movwf               Imp50m

                        clrf                   IMPwidth

                       

                        btfsc                 ovlRA0              ;Test konce periody před spuštěním načítání pulzu               

                                                                                                                                        

                        goto                 tstin

 

                        btfss                 ovlRA0              ;Test začátku  pulzu PWM nové periody

                        goto                 tstin

 

analiz 

                        btfss                 ovlRA0              ;Spuštění kontroly  pulzu PWM a načtení jeho šířky 0,5m -sekundovým vzorkováním do proměnné   IMPwidth

                                                                                       

                                                                                                                                            

                        goto                 kmpr1

                        incf                   IMPwidth,f                     

                        call                   Cek0.5m

                        decfsz              Imp50m,f                        ;Odčítání 25ms z šířky jedné peroidy

                        goto                 analiz

                       

;--------komparace pulzu----------              

                       

                                                                       ;IMPwidth 1 = 0,5ms

kmpr1 

                        movfw               IMPwidth          ;Test zda IMPwidth (šíka pulzu) je/není 2ms )

                        xorlw                4                                  ;Jestli, že IMPwidth je 4 výsledek XOR =0 potom Z =1

                        btfss                 STATUS,Z       

                        goto                 kmpr2               ;IMPwidth není 4

                        call                   dalkovy                                 

                        goto                 tstin     

                       

                       

kmpr2 

                        movfw               IMPwidth          ;Test zda IMPwidth (šíka pulzu) je/není 1,5ms)

                        Xorlw                3                                  ;Jestli, že IMPwidth je 3 výsledek XOR =0 potom Z =1

                        btfss                 STATUS,Z                   

                        goto                 kmpr3               ;IMPwidth není 3

                        call                   nic

                        goto                 tstin     

                       

                       

kmpr3 

                        movfw               IMPwidth          ;Test zda IMPwidth (šíka pulzu) je/není 1ms)

                        Xorlw                2                                  ; Jestli, že IMPwidth je 2 výsledek XOR =0 potom Z =1

                        btfss                 STATUS,Z                   

                        goto                 Start                 ;IMPwidth není 2

                        call                   tlumeny

                        goto                 tstin                            

                       

;--------Ovládání výstupů----------               

                       

dalkovy                     

                        movlw               b'00000001'

                        movwf               PORTB

                        Return

                       
tlumeny                     

                        movlw               b'00000010'

                        movwf               PORTB

                        Return



nic                     

                        movlw               b'00000000'

                        movwf               PORTB

                        Return



;------------------------------------------------------------------------------------------------

;                                              PODPROGRAMY

;------------------------------------------------------------------------------------------------

;-------- cas = 39,2 ms ----------    

Cek40m          

                        movlw               .51                   

                        movwf               TMP0

                        movlw               .255

                        movwf               TMP1

                        goto                 Smycka

;-------- cas = 14,9 ms ----------    

Cek15m          

                        movlw               .33                                           

                        movwf               TMP0

                        Movlw               .145

                        movwf               TMP1

                        goto                 Smycka

;-------- cas = 0,49 ms ----------    

Cek0.5m         

                        movlw               .3                     

                        movwf               TMP0

                        movlw               .37

                        movwf               TMP1

                        goto                 Smycka

;-------------------------------

Smycka          

                        movf                 TMP0,W

                        movwf               TMP2

;       ------------------------

Smycka1

                        decfsz              TMP2,F                        ; mala smycka

                        goto                 Smycka1

;       ------------------------

                        decfsz              TMP1,F                        ; velka smycka

                        goto                 Smycka

;       ------------------------

                        RETURN

;--------------------------------------------------------------------------------------------            

                       

                 end
