|
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. 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.
|