Sari la conținut
ELFORUM - Forumul electronistilor

Cum sa programez un PIC


sofian

Postări Recomandate

Puteai sa postezi codul direct pe pagina.

Din cate vad este in assembler iar aici nu cunosc sintaxa. Am presupus (gresit) ca folosesti un limbaj de nivel inalt.

 

Dar ca si algoritm este simplu: incrementezi o variabila de tip unsigned char (ia valori de la 0 la 255) si dupa fiecare incrementare scrie valoarea direct in registrul PORTC.

Daca vrei sa faca numaratoarea la nesfarsit (intr-o bucla infinita) pur si simplu aduni in continuare pentru ca atunci cand ajunge la 255 cu adunarea va face rollover si o ia de la capat.

Daca vrei ca numaratoarea sa se faca o singura data folosesti o bucla tip while(x<256).

 

Daca ce ai nevoie este de ajutor ca sa inveti asamblare va trebui sa te ajute cineva mai adecvat. De ex. avem un coleg @Mifty care se pare ca este familiarizat cu programarea in asamblare ... poate te ajuta el.

 

LE: vezi ca ai in directiva config setarea LVP = ON. Nu cred ca vrei sa faci programarea in low voltage ...

Editat de mars01
Link spre comentariu
  • Răspunsuri 604
  • Creat
  • Ultimul Răspuns

Top autori în acest subiect

  • Liviu M

    54

  • Vlad Mihai

    28

  • bbogdanmircea

    27

  • seichter

    24

Top autori în acest subiect

Imagini postate

while(x<255) in loc de while(1) sau for(;;) etc. 

Corect, intr-un unsigned char nu poti stoca valoarea 256.

LE: Postat simultan cu @bandi12.

LLE: x<255, corect.

shame on me. (justificare: sunt mort de somn si bagat deja in pat. scuze).

Editat de mars01
Link spre comentariu

Pentru incrementat un registru sunt 2 instructiuni:

-incf -> increment f

-incfsz -> increment f skip if zero(adica face si un test pt overflow)

 

Codul poate sa fie ceva de genul:

incf numarator,1

movf numarator

movwf PORTC

call DELAY_ROUTINE

 

Oricum citeste mai intai :

http://ww1.microchip.com/downloads/en/DeviceDoc/30292D.pdf

de la pagina 135 .E prezentat setul de instructiuni al uC-ului - sunt 35 de instructiuni extrem  de simple.

Link spre comentariu
Vizitator mAgneTic3RaNgEr

Va multumesc mult la toti!

Informatia o gasesc utila! Acuma voi incerca sa o aplic si sper sa revin ceva mai tirziu cu ce ceea ce voi obtine! Merci ,inca o data! Sa aveti o seara placuta! 

Link spre comentariu
Vizitator mAgneTic3RaNgEr

Revin cu solutia la subiectul deschis anterior :

 

list p=16f877A ; list directive to define processor

#include <p16f877A.inc> ; processor specific variable definitions
 __CONFIG _CP_OFF & _WDT_OFF & _BODEN_OFF & _PWRTE_ON & _HS_OSC & _WRT_OFF & _LVP_ON & _CPD_OFF
; '__CONFIG' directive is used to embed configuration data within .asm file.
; The lables following the directive are located in the respective .inc file.
; See respective data sheet for additional information on configuration word.
;***** VARIABLE DEFINITIONS
CBLOCK 0x20 ; declaratia de variabile TIMER x necesare subrutinei
;de intarziere, RAM starts at address 20h
TIMER1
TIMER2
TIMER3
 
ENDC
;**********************************************************************
ORG 0x000 ; processor reset vector
main
; Initializarea porturilor microcontrolului
movlw b'00000000' ; toti pini porturilor = low
movwf PORTA
movlw b'00000000'
movwf PORTB
movlw b'00000000'
movwf PORTC
movlw b'00000000'
movwf PORTD
movlw b'00000000'
movwf PORTE
bsf STATUS,RP0 ; saltul in bankul 1 de memorie RAM,
;necesar setarii registrilor TRISx
movlw b'00000000' ; toti pinii portului PORTA = de intrare
movwf TRISA
movlw b'00000000' ; toti pinii portului PORTx = de iesire
movwf TRISB
movlw b'00000000'
movwf TRISC
movlw b'00000000'
movwf TRISD
movlw b'00000000'
movwf TRISE
movlw b'00000110' ; prin setarea registrului ADCON1 cu valoarea binara
;se seteaza pinii portului A ca pini I/O digitali
movwf ADCON1
bcf STATUS,RP0 ; saltul in bankul 0 de memorie RAM
CLRF PORTB ;stergerea registrului
GOTO START
 
START INCF PORTB
CALL DELAY_ROUTINE
CALL DELAY_ROUTINE
GOTO START
 
DELAY_ROUTINE MOVLW 0x0B ;subrutina de intarziere
MOVWF TIMER3
DEL_LOOP1 MOVLW 0xE7
MOVWF TIMER2
DEL_LOOP2 MOVLW 0x2D
MOVWF TIMER1
DEL_LOOP3 
DECFSZ TIMER1,F
GOTO DEL_LOOP3
DECFSZ TIMER2,F
GOTO DEL_LOOP2
DECFSZ TIMER3,F
GOTO DEL_LOOP1
RETLW 0
END

 

Editat de mAgneTic3RaNgEr
Link spre comentariu

nu ştim! :)

 

nu avem idee pe ce plăcuţă sunt puse cele două picuri, şi nu ne-ai spus şi ce tip anume de picuri sunt.

singurul lucru pe care-l pot (putem) spune e că unul dintre ele nu este recunoscut, şi cum pickit2 are un număr de picuri "necunoscute", poate fi perfect normală eroarea...

Link spre comentariu

... e cumva clona de pickit2 pe care o făcuse nel64?dacă da, el ar fi în măsură să spună dacă e corect pus în soclu 675 ăla...asta pentru că, deşi pagina lui pickit2 de pe situl microchip e dusă în neant, mai există nişte pagini care au păstrat lista de "supported devices", şi 675 figurează printre ele...

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