Sari la conținut
ELFORUM - Forumul electronistilor

test tmr0 in assembly


Postări Recomandate

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 spre comentariu
  • Răspunsuri 3
  • Creat
  • Ultimul Răspuns

Top autori în acest subiect

Top autori în acest subiect

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 spre comentariu

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

Editat de 10vid
Link spre comentariu

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 spre comentariu

Creează un cont sau autentifică-te pentru a adăuga comentariu

Trebuie să fi un membru pentru a putea lăsa un comentariu.

Creează un cont

Înregistrează-te pentru un nou cont în comunitatea nostră. Este simplu!

Înregistrează un nou cont

Autentificare

Ai deja un cont? Autentifică-te aici.

Autentifică-te acum



×
×
  • Creează nouă...

Informații Importante

Am plasat cookie-uri pe dispozitivul tău pentru a îmbunătății navigarea pe acest site. Poți modifica setările cookie, altfel considerăm că ești de acord să continui.Termeni de Utilizare si Ghidări