FORUMUL ELECTRONISTILOR

Vezi subiectul anteriorIn josVezi subiectul urmator
DANIEL
DANIEL
DANIEL
Fondator
MESAJE : 13258
MEMBRU DIN : 02/06/2017
LOCATIE LOCATIE : Bucuresti
PROFESIE : Electronist

#1INFORMATIV Cum programam un microcontroler PIC

Dum Iul 09, 2017 5:25 pm
Este vorba despre PIC16F84. Pentru inceput este recomandat a se citi foaia de lucru (datasheet-ul) microcontrolerului.

Mai jos este o diagramă care arată pini microcontrolerului. Voi incerca sa explic rolul fiecarui pin.
[Trebuie sa fiti înscris şi conectat pentru a vedea această imagine]
De la RA0 la RA4
RA este un port bidirecţional. Asta poate fi configurat ca o intrare sau ca o ieşire. Următorul număr dupa „RA” este numărul de biţi (0-4). Deci, avem un port cu 5 biţi direcţionali unde fiecare bit poate fi configurat ca bit de intrare sau de ieşire.
De la RB0 la RB7
RB este un al doilea port bidirecţional. Se comportă în exact acelaşi mod ca RA, cu excepţia ca există 8 biţi.
VSS si VDD
Acestia sunt pinii de alimentare. VDD este borna pozitiva, şi VSS este borna negativa, sau 0V. Tensiunea de alimentare maximă pe care o puteţi folosi este 6V, iar cea minimă este de 2V.
OSC1/CLK IN şi OSC2/CLKOUT
Aici conectam un ceas extern, astfel încât microcontrolerul are un fel de sincronizare.
MCLR
Acest pin este folosit pentru a şterge locatii de memorie din interiorul PIC (adică atunci când vrem să-l re-program). În condiţii normale de utilizare este conectat la linia de alimentare pozitiv.
INT
Acesta este un pin de intrare care poate fi folosit pentru monitorizare. Dacă PIN-ul primeste tensiune programul se poate reporni, opri sau orice altă funcţie dorim. Nu vom folosi asta foarte mult.
TOCK1
Acesta este un alt ceas de intrare, care opereaza un temporizator intern. Acesta funcţionează în independent fata de ceasul microcontrolerului. Din nou, nu vom folosi aceasta functie foarte mult.

Sa presupunem ca dupa cele spuse mai sus am realizat o schema ca in modelul prezentat mai jos:

[Trebuie sa fiti înscris şi conectat pentru a vedea această imagine]


Pentru a introduce programul in microcontroler avem nevoie de doua programe, unul este MPLAB IDE si PonyProg.

Deschidem MPLAB IDE selectam microcontrolerul.
[Trebuie sa fiti înscris şi conectat pentru a vedea această imagine]


Dupa ce am selectat microcontrolerul creem un proiect nou si incepem editarea programului.


;    Nume proiect:                                       *
;    Data:                                               *
;    Autor:                                            *
;                                              *
;                                                                     *
;**********************************************************************
;                                                                     *
;    Note:                                                            *
;     1. PIC 16F84A datasheet-ul poate fi gasit la:                   *
;        http://ww1.microchip.com/downloads/en/DeviceDoc/35007b.pdf   *
;                                                                     *
;                                                                     *
;   PENTRU A PROGRAMA MICROCONTROLERUL                                *
;   ------------------------------                                    *
;   Instaleaza MPLAB IDE                                              *
;   Deschide acest fisier in programul MPLAB IDEO                     *
;   din meniul de sus alege: Configure - Select Device                *
;   in casuta 'device' selecteaza PIC16F84A, si apoi "Ok"             *
;   din meniul de sus alege: Project - Quickbuild 16F84A.asm          *
;                                                                     *
;   In acelas director ca si cel in care se gaseste acest fisier      *
;   vei gasi un fisier cu numele 16F84A.HEX                           *
;   Acesta trebuie deschis cu programul in care se face programarea   *
;   si introdusa in microcontroler                                    *
;                                                                     *
;**********************************************************************

list      p=16F84A            ; Directiva 'list' defineste numele procesorului
                                           ;    

#include        ; include este o directiva standard
                                           ; defineste specificatiile procesorului
;------------------------------------------------------------------------------------
; directiva '__CONFIG' este folosita pentru configurarea microcontrolerului.
; Tabelul cu configurarea este afisat in fisierul '.inc' respectiv.
; Sau poate fi gasit si in foaia de lucru a microcontrolerului(datasheet).
;
__CONFIG   _CP_OFF & _WDT_OFF & _PWRTE_ON & _HS_OSC
; Aici setam biti de configurare
; Code protect off
; Watch Dog timer off
; Power-up timer delay on
; Setam tipul de oscilator in HS - High speed crystal/resonator >3.5Mhz
;   schimba in _RC_OSC pentru rezistor/capacitor
;   schimba in _XT_OSC pentru cristal/rezonator <3.5Mhz

;------------------------------------------------------------------------------------
; definim variabilele in 'General Purpose Register' (GPR)
; nota: memoria GPR a 16F84A incepe la 0x0C dar in alte PIC-uri incepe la 0x20
; Aici folosim 0x20 pentru compatibilitate cu noile PIC-uri

cblock 0x20
copiePORTB ; variabila pentru a copia PORTB
ltime ; folosit pentru functia de intarziere
dtime ; folosit pentru functia de intarziere
endc
;------------------------------------------------------------------------------------

; Definim selectarea bankului
#define   bank0     bcf       STATUS,RP0          ; Sel Bank 0
#define   bank1     bsf       STATUS,RP0          ; Sel Bank 1

;-----------------------------------------------------------------------------------
; Definim o constanta pentru bit-ul din partea stanga si alta pentru bit-ul din dreapta
BitStanga equ 7   ;|_______________PORTB
BitDreapta      equ 0   ;_______________|PORTB
; ----------------------------------------------------------------------------------
; Programul incepe aici

RESET_VECTOR org           0x000                    

; In aceasta sectiune initializam porturile I/O si variabilele
;
START bank1 ; selectam registrul bank 1
                                ; asta este o pseudoinstructiune definita mai sus
clrf TRISB ; setam PORTB ca iesire

bank0 ; selectam registrul bank 0
                                ; asta este o pseudoinstructiune definita mai sus

movlw 7<
movwf copiePORTB ; apoi initializez variabila

;-------------------------------------------------------------------------------------
; Codul principal

MUTASTANGA clrc
rlf copiePORTB,F ; roteste variabila spre stanga
call OUTPUT ; apeleaza functia de afisare
call DELAY ; apeleaza functia de intarziere
btfss copiePORTB, BitStanga ; verifica daca s-a ajuns la bit-ul din stanga
goto MUTASTANGA ; daca nu se intoarce la eticheta MUTASTANGA

MUTADREAPTA clrc
rrf copiePORTB,F ; roteste varibila spre dreapta
call OUTPUT ; apeleaza functia de afisare
call DELAY ; apeleaza functia de intarziere
btfss copiePORTB, BitDreapta ; verifica daca s-a ajuns la bit-ul din dreapta
goto MUTADREAPTA ; daca nu se intoarce la eticheta MUTADREAPTA
goto MUTASTANGA ; altfel se intoarce inapoi la MUTASTANGA

;---------------------------------------------------------------------------------
;Functia OUTPUT
OUTPUT movfw copiePORTB ; adauga aceasta variabila in registrul W
movwf PORTB ; si scrie din W in iesirea portului B
return ; apoi se intoarce

;--------------------------------------------------------------------------------------
;functia DELAY

DELAY

movlw     .1 ; Aceasta valoare este timpul de intarziere de 100mS
                                                                      ;(pentru 4Mhz)
                                         ; numarul trebuie sa fie intre 1 si 255
          goto      _Ldelay

_Delay     movwf     dtime     ; Apelare pentru W x 1mS
__Dcall   call      __1mS
          decfsz    dtime,F
          goto      __Dcall
__DlyEnd   return
_Ldelay   movwf     ltime     ; Apelare pentru W x 100mS
__Dlcall   movlw     d'100'
          call      _Delay
          decfsz    ltime,F
          goto      __Dlcall
          return
__1mS     movlw     0xC6
_next     nop
          addlw     0xFF
          btfss     STATUS,Z
          goto      _next
          nop
          nop
          nop
          return

end

Programul in format ASM si HEX le gasiti aici.
[Trebuie sa fiti înscris şi conectat pentru a vedea această imagine]

Dupa ce a fost scris, programul trebuie asamblat (in MPLAB IDE) si apoi introdus in microcontroler, pentru asta putem folosi PonyProg.
[Trebuie sa fiti înscris şi conectat pentru a vedea această imagine]


Ultima editare efectuata de catre Admin in Lun Aug 07, 2017 1:54 pm, editata de 1 ori


Florin Iordache
Florin Iordache
Florin Iordache
Administrator
MESAJE : 17525
MEMBRU DIN : 02/06/2017
LOCATIE LOCATIE : TARGOVISTE
PROFESIE : PASIUNE

#2INFORMATIV Re: Cum programam un microcontroler PIC

Dum Iul 09, 2017 5:33 pm
V-am atasat si programul ponyprog 2000 : [Trebuie sa fiti inscris si conectat pentru a vedea acest link]


constantin otiliu
constantin otiliu
constantin otiliu
Membru
MESAJE : 2
MEMBRU DIN : 23/06/2018
LOCATIE LOCATIE : bucuresti
PROFESIE : pensionar

#3INFORMATIV Re: Cum programam un microcontroler PIC

Sam Iun 23, 2018 11:45 am
daca intarzii la intalnire .....nu te mai intalnesti ! pacat ca am descoperit acest site ptr mine prea tarziu....."marfa a expirat" si......a fost retrasa ! Sad Sad Sad
Wink


Continut sponsorizat
Continut sponsorizat

#4INFORMATIV Re: Cum programam un microcontroler PIC



Vezi subiectul anteriorSusVezi subiectul urmator
Permisiunile acestui forum:
Nu puteti raspunde la subiectele acestui forum