PIC16F684 - Lectia 1, HELLO WORLD, cum se seteaza MPLAB si cum se scrie un program Email
Scris de gigitreid   
Miercuri, 09 Iulie 2008 22:05

Pentru inceput intrati la aceasta adresa si cititi tot ce e acolo: www.mikroe.com/ro/..../picbook.htm . (Linkul nu mai este valabil. Cautati pe Google "picbook elforum", faceti-va cont si descarcati de acolo). Sunt explicate toate blocurile unui microcontroler (PIC16F84) si registri aceastuia. Cartea este scrisa in romana si este cea mai importanta resursa pentru incepatori. Alte functii, macrouri, etc gasiti la adresa www.piclist.com.

Descarcati si instalati de pe situl MICROCHIP programele MPLAB (pentru scriere programe in asamblare si simulare) si PICKIT2 (asta daca folositi acest programator), precum si fisierul PDF al acestui microcontroler.

PIC16F684 - prima aplicatie - leduri

Pentru a scrie un program in MPLAB urmati urmatorii pasi:

- creati un director pe hdd, locatia acestuia + numele + numele fisierelor sa nu depaseasca 128 caractere, altfel programul nu se va compila, de exemplu "d:/MPLAB/PIC16F684_hello_world"
- se porneste MPLAB
- meniul Project, se selecteaza selecteaza Project Wizard...
- Next
- Se selecteaza microcontrolerul, in cazul nostru PIC16F684
- Se selecteaza suitele de compilare, sau se lasa asa cum sunt pentru asamblare. NEXT
- Browse, se selecteaza directorul creat inainte,"d:/MPLAB/PIC16F684_hello_world", si la File name se scrie un nume de fisier, de exemplu "hello_world".
- Momentan nu avem ce fisiere sa adaugam, NEXT
- FINISH
- se selecteaza din meniul VIEW > PROJECT. Apare fereastra cu fisierele incluse in proiect.
- se copiaza c:\Program Files\Microchip\MPASM Suite\LKR\16f684.lkr si c:\Program Files\Microchip\MPASM Suite\P16F684.INC in directorul d:/MPLAB/PIC16F684_hello_world. Fisierul PIC16F684.INC defineste configuratia si numele registrilor/bitilor microcontrolerului.
- in MPLAB se selecteaza LINKER SCRIPT si da click dreapta pe el si se alege "add files". Din directorul d:/MPLAB/PIC16F684_hello_world se alege fisierul PIC16F684.LKR
- Din meniul FILE se selecteaza NEW. Se selecteaza fereastra UNTITLED
- Din meniul FILE se selecteaza SAVE AS si se alege directorul d:/MPLAB/PIC16F684_hello_world si fisierul se salveaza cu numele hello_world.asm. Nu uitati sa ii puneti extensia .asm
- Se selecteaza SOURCE FILES, se da click dreapta si se alege ADD FILES...
- Se selecteaza fisierul salvat anterior.
- Puteti incepe sa scrieti programul in fereastra respectiva.
- Pentru simulare se alege din meniul DEBBUGER > SELECT TOOL> MPLAB SIM.
- Pentru compilare se alege din meniul PROJECT > MAKE (tasta rapida F10).
- Pentru programarea codului in microcontroler se selecteaza din meniul PROGRAMMER > SELECT PROGRAMMER > PICKIT 2. Sau compilati si transferati fisierul hex din directorul respectiv in microcontroler cu programul aferent interfetei hardware pe care o detineti.

 

;Un exemplu de program scris in asamblare :
    PROCESSOR 16F684; se declara tipul procesorului

    INCLUDE ; se incarca in compilator numele si adresele registrilor de functii speciale SFR

    __CONFIG _WDT_OFF & _PWRTE_ON & _MCLRE_OFF & _CP_OFF & _CPD_OFF & _FCMEN_ON & _HS_OSC; directiva pentru definirea configuratiei de pornire: watchdo=off, reset extern=off, code protect=off, oscilatorul=cristal quatz.

    #define led1 PORTC,0; pinul 10, R0, adica bitul 0 al portului C va mai avea si numele led1

    UDATA; aceasta directiva declara inceputul de memorie RAM nefolosita
    LOCNT RES 1 ; se rezerva un octet(byte) pentru variabila LOCNT

    ORG 0; vectorul reset, de aici incepe executia programului
    GOTO main001; instructiunea de salt neconditionat la adresa etichetei main001
    ORG 4; vectorul intrerupere. Cand are loc o intrerupere, aici sare si incepe executia rutinei de intrerupere
    CODE ; se defineste inceputul programului propriuzis, pentru cod relocabil

main001; eticheta main001, se scrie din coloana 0,
    ;restul codului poate fi scris din urmatoarele coloane (se lasa un spatiu inainte)

    ;In continuare se vor configura porturile A si C
    BCF STATUS, RP0; se selecteaza primul banc de registri
    MOVLW 0x00; se incarca in acumulator cifra zero
    MOVWF PORTC; se copiaza continutul acumulatorului in registru portc
    MOVWF PORTA; se copiaza continutul acumulatorului in registru porta
    MOVLW 0X07 ; se incarca in acumulator 7 hexa = 00000111 in binar
    MOVWF CMCON0 ; se copiaza continutul acumulatorului in CMCON0
    ;BIT 210=111 COMPARATORS OFF, CXIN PINS = DIGITAL I/O
    BSF STATUS, RP0 ; se selecteaza bancul al doilea de registri
    MOVLW b'00000001' ; se copiaza in acumulator numarul 1 in binar
    MOVWF ANSEL; BIT 7-0 intrare analogica sau I/O digitala 1=ANALOG INPUT 0=DIGITAL I/O
    MOVLW B'00100000'
    MOVWF TRISA ; configuratia portului A, 1=intrare, 0=iesire
    MOVLW B'00000000'
    MOVWF TRISC ; configuratia portului C, 1=intrare, 0=iesire
    BCF STATUS, RP0 ; se selecteaza bancul 1 cu registri
    ; sfarsitul configurarii porturilor A si C

main002 ; eticheta main002
    BSF led1;(1) se seteaza 1 bitul led1 definit mai sus (PORTC, RC0)
    ; intructiunea se executa intr-un timp de procesor = 1/4 * frecventa de lucru
    NOP ;(2) no operation, un timp
    NOP;(3) no operation, un timp
    NOP ;(4) no operation, un timp
    NOP;(5) no operation, un timp
    BCF led1;(6) se seteaza 0 bitul led1, un timp de procesor
    NOP ;(7) no operation, un timp
    NOP ;(8) no operation, un timp
    GOTO main002;(9,10) 2 timpi. Programul sare la eticheta main002
    ; in total 10 timpi de procesor. ledul va clipi cu frecventa de 1/4*10,
    ;deci daca microcontrolerul lucreaza la 4MHZ, ledul va clipi cu 100khz.
    ; Daca masurati cu un frecventmetru la pinul 10 veti observa acest lucru.

    end; indica sfarsitul programului. Ce urmeaza dupa nu va fi luat in considerare de compilator.

 Descarca de aici proiectul. Recomand folosirea unei variante mai vechi de MPLAB, 8.15a, daca doriti sa folositi in acelasi timp MPLAB_SIM ca debugger si PICKIT2 ca programator.

Comments
Doar utilizatorii inregistrati pot scrie comentarii.!
LAST_UPDATED2
 
 
Statistici vizitatori: [+/-]
Azi:
Ieri:
Alaltaieri:
979
1310
1209

+101
Saptamana asta:
Saptamana trecuta:
Cu 2 sapt. in urma:
2289
8387
9516

-1129
Luna asta:
Luna trecuta:
Acum doua luni:
25136
24865
0

+24865
Anul asta:
Anul trecut:
50001
0
+50001
Avem 45 vizitatori online