Jump to content
ELFORUM - Forumul electronistilor

test tmr0 in assembly


a_sorien
 Share

Recommended Posts

Salutare ! Task : daca un buton nu este apasat timp de 9.5 s , se aprinde un led ( rosu sa zicem) . Daca totusi in aceste 9.5 s se apasa un anumit buton se aprinde un alt ledd ( verde sa zicem)si ramane asa pana la decuplarea alimentarii  . Folosesc un 16f628 in care RA1 este conectat la un buton care il poate conecta la 5v la apasare ( altfel spus , RA1 este conectat la 5v prin tr-un switch ) .Folosesc PORTB mai precis RB0 si RB1 pentru cele doua leduri . Timpul nu este necesar sa fie f exact !! De aceea folosesc oscilatorul intern . Si totusi acest program nu merge...!! De ce?

 

 

 

LIST  p=16F628      include "P16F628.inc"      __config 0x3D18       org  0x0000                    movlw  0x07 ; comparatoare OFF  movwf  CMCON        bsf  STATUS,  RP0    movlw  0xff    ; all intrari     movwf  TRISA   movlw  0x00    ; all iesiri     movwf  TRISB   movlw b'11000111' ; TMR0 setat 1:256   movwf OPTION_REG  bcf  STATUS,  RP0  LOOP         banksel  TMR0 clrf TMR0 K   banksel  PORTA btfsc   PORTA,RA1   bsf   PORTB,RB0 ; aprinde led banksel  TMR0 movf TMR0,W xorlw   .144 btfss   STATUS,Z goto K bsf   PORTB,RB1 ; aprinde led goto LOOP       end

Link to comment
Share on other sites

La prima vedere nu faci corect selecția ”bank”-urilor . TRISA , TRISB sunt  în bank 1 - nu văd unde l-ai selectat. Pe de altă parte TMR0 , PORTA , PORTB sunt în același bank - bank 0 - deci selecțiile alea în buclă sunt inutile .

NU garantez pentru ce-am spus mai sus , nu am verificat atent, am zis , la prima vedere!

Link to comment
Share on other sites

Cu Timer0 + prescaler 256 nu poti genera un delay mai mare de 65.5 ms (@ 4MHz). Ai nevoie de inca o variabila , un fel de postscaler software.

Lasi TMR0 nemodificat, pentru a putea numara maximul de 65.5 ms, si doar verifici cand e 0, moment in care decrementezi o variabila.

 

 

loop

  movlw 144

  movwf contor

k

  btfsc PORTA,1

  bsf PORTB,0

  btfss INTCON,T0IF     ;verifica TMR0 overflow

  goto k

  bcf INTCON,T0IF

  decfsz contor,F

  goto k

  bsf PORTB,1

    goto loop

Edited by 10vid
Link to comment
Share on other sites

Cu Timer0 + prescaler 256 nu poti genera un delay mai mare de 65.5 ms (@ 4MHz). Ai nevoie de inca o variabila , un fel de postscaler software.

Lasi TMR0 nemodificat, pentru a putea numara maximul de 65.5 ms, si doar verifici cand e 0, moment in care decrementezi o variabila.

 

 

loop

  movlw 144

  movwf contor

k

  btfsc PORTA,1

  bsf PORTB,0

  btfss INTCON,T0IF     ;verifica TMR0 overflow

  goto k

  bcf INTCON,T0IF

  decfsz contor,F

  goto k

  bsf PORTB,1

    goto loop

 

 

True..! TOIF  se ridica oricand  apare overflow si fara sa pornesti intreruperi ! Multam fain..!!

 

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.Terms of Use si Guidelines