Sari la conținut
ELFORUM - Forumul electronistilor

probleme PIC16F877A-04/P


cosmin_ctin2005

Postări Recomandate

Salutare,am cumparat un PIC16F877A-04/P si am incarcat un program pe care l-am simulat in proteus - montajul nu functioneaza (la simulare mergea)Am si eu nevoie de un program foarte simplu in ASM : cand apas un buton sa se aprinda un led.Multumesc mult

Link spre comentariu
  • Răspunsuri 13
  • Creat
  • Ultimul Răspuns

Top autori în acest subiect

  • cosmin_ctin2005

    8

  • TECH_FUN

    2

  • mdorian

    2

  • Rabulea Sergiu

    1

Unde gresesc?

 

 

list p=16f876 ; list directive to define processor

#include ; processor specific variable definitions

 

__CONFIG _CP_OFF &_WDT_OFF &_PWRTE_ON &_XT_OSC

 

cblock 0x0C

val1

endc

org 0x0000

goto start

 

start

bcf STATUS,6

bsf STATUS,5 ;BANK1

movlw 0xff

movwf TRISA

movlw 0x00

movwf TRISB

movlw 0x00

movwf TRISC

movlw 0x00

movwf TRISD

movlw 0xFF

movwf TRISE

bcf STATUS,5 ;BANK0

call start1

start1

clrf PORTA

clrf PORTB

clrf PORTC

clrf PORTD

clrf PORTE

movlw 0x00

movwf val1

call coco

return

coco

btfsc PORTA,0

call coco2

call coco

 

coco2

incf val1

bsf PORTC,4

call coco

end

Link spre comentariu

ce vreau sa fac:

daca aplic 0V la intrarea PORTA,0 (normal intrarea este legata la 5V) sa se faca iesirea PORTC,4

eu am folosit la PIC16F84 un macro button.inc dar la PIC16F877 nu functioneaza.

 

loop

Button 0,PORTA,2, .100, por_opr

call loop

 

por_opr

bsf PORTB,2

call loop

 

Button macro HiLo, Port, Bit, Delay, Adrress

 

Local Exit

Local Loop

if HiLo == 0

btfsc Port,Bit

else

btfss Port,Bit

endif

goto Exit

Loop

if HiLo == 0

btfss Port,Bit

else

btfsc Port,Bit

endif

goto Loop

call Adrress

Exit

endm

 

Unde gresesc?

Link spre comentariu

Incearca asta:

list p=16f877A ; list directive to define processor

#include ; processor specific variable definitions

 

__CONFIG _CP_OFF &_WDT_OFF &_PWRTE_ON &_XT_OSC

 

cblock 0x20

val1

val2

endc

org 0x0000

goto start

 

start

; niste initializari

clrf INTCON

banksel CMCON

movlw 0xff

movwf CMCON

banksel PIR1

clrf PIR1

clrf PIR2

;se trec toate perifericele pe power down

clrf T1CON

clrf T2CON

clrf SSPCON

clrf CCP1CON

clrf CCP2CON

clrf ADCON0

banksel PIE1

clrf PIE1

clrf PIE2

movlw 0x07

movwf ADCON1

clrf SSPCON2

 

banksel TRISA

movlw 0xff

movwf TRISA

movlw 0x00

movwf TRISB

movlw 0x00

movwf TRISC

movlw 0x00

movwf TRISD

movlw 0xFF

movwf TRISE

banksel PORTA

 

clrf PORTA

clrf PORTB

clrf PORTC

clrf PORTD

clrf PORTE

 

movlw 0x00

movwf val1

RepetaMereu

; asteapta 0 pe pin PORTA,0

btfsc PORTA,0

goto $-1

; o mica intarziere pentru a elimina impulsurile tranzitorii

clrf val2

incfsz val2,f

goto $-1

comf val1,f; val1 e folosit ca buffer

;pentru a memora starea anterioara , la fiecare apasare

;se schimba starea pinului portc,4

;

call CopiazaBit

; asteapta 1 pe PORTA,0

btfss PORTA,0

goto $-1

; o mica intarziere pentru a elimina impulsurile tranzitorii

clrf val2

incfsz val2,f

goto $-1

goto RepetaMereu

 

 

CopiazaBit

; copiaza val1,0 in PORTC,4

banksel val1; in acelasi banc cu PORTC

btfss val1,0

goto ClearBit

bsf PORTC,4

return

ClearBit

bcf PORTC,4

return

end

Pinul 0 de la portul A nu este intrare digitala implicit , trebuie initializat , probabil acolo e greseala de nu iti merge macroul

Oricum , modul in care folosesti apelurile de subrutine e revoltator , nu reusesc sa inteleg cum un lucru atat de simplu il faci atat de complicat :banghead:

Link spre comentariu

am facut urmatorul program si l-am simulat in PROTEUS si merge foarte bine dar practic nu merge.

 

list p=16f877 ; list directive to define processor

#include ; processor specific variable definitions

__CONFIG _CP_OFF &_WDT_OFF &_PWRTE_ON &_XT_OSC &_BODEN_ON &_LVP_ON

 

 

;***** Declarare variabile *****

 

Cblock 0x0C

 

LCDbuf

LCDtemp

WCYCLE

PRESCwait

doi

te_st

endc

 

 

;***** structura prog din memorie *****

 

ORG 0x0000 ;reset vector

goto Main

 

 

#include "bank.inc"

#include "button.inc"

#include "wait.inc"

 

Main

bcf STATUS,RP0

bcf STATUS,RP1

clrf PORTA

bsf STATUS,RP0

movlw 0x06

movwf ADCON1

movlw 0xCF

movwf TRISA

clrf PORTB

movlw 0x00

movwf TRISB

clrf PORTC

movlw 0x00

movwf TRISC

clrf PORTD

movlw 0x00

movwf TRISD

clrf PORTE

movlw 0x00

movwf TRISE

bcf STATUS,RP0

bcf STATUS,RP1

 

clrf PORTB

movlw 0x00

movwf te_st

clrf PORTD

 

Loop

Button 0,PORTE,0, .100, On

goto Loop

 

On

 

bsf PORTB,7

bsf PORTB,6

bsf PORTC,3

bsf PORTC,4

bsf PORTD,0

bsf PORTD,1

bsf PORTD,3

bsf PORTD,4

return

 

End

este prima data cand programez acest tip de PIC si nu stiu ce trebuie bifat in ICPROG

 

Fusses

WDT

PWRT

BODEN

LVP

CPD

WRT

DEBUGGER

 

help me!!!!!

:nas:

Link spre comentariu

n-am mai programat de mult in asm, dar mai observ o problema. daca te uiti pe configuratia bank-ului0, blocul de 'general purpose registers' incepe de la 0x20h... daca scrii peste registrii dedicati, nu garanteaza nimeni ca o sa ramana acolo intacta informatia... cel putin adcon vad sigur ca-l scrii chiar tu in program.

Link spre comentariu

Salut.

Dupa parerea mea gresesti aici:

Cblock 0x0CLCDbufLCDtempWCYCLEPRESCwaitdoite_stendc

Memoria RAM (general pourpose register) incepe de la 0x20 la PIC 16F877, nu de la 0x0C ca la PIC16F84

deci codul tau ar trebui sa arate cam asa:

Cblock 0x20LCDbufLCDtempWCYCLEPRESCwaitdoite_stendc

Un sfat:

Filtreaza ce citesti din cartea de pe mikroelectronica, pentru ca acea carte are exemple pentru PIC 16F84 care nu este compatibil cu microcontrolerul tau.

 

Cu respect, Sergiu.

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