Scrigroup - Documente si articole

Username / Parola inexistente      

Home Documente Upload Resurse Alte limbi doc  

CATEGORII DOCUMENTE





AccessAdobe photoshopAlgoritmiAutocadBaze de dateCC sharp
CalculatoareCorel drawDot netExcelFox proFrontpageHardware
HtmlInternetJavaLinuxMatlabMs dosPascal
PhpPower pointRetele calculatoareSqlTutorialsWebdesignWindows
WordXml


Microcontrolerul pe 8 biti PIC 16F84 - Exemple

hardware

+ Font mai mare | - Font mai mic







DOCUMENTE SIMILARE

Trimite pe Messenger
ULTRA TRACKER - Dispozitive si mod de instalare
Structura calculatoarelor personale
Scrierea unui CD-R/DVD - overburning
Microprocesorul (mP)
Dispozitive de iesire
SPECIFICATII PRIVIND UTILIZAREA SISTEMULUI DE SUPRAVEGHERE DVR MATRIX
Tipuri de memorie
Microprocesorul Pentium
Evolutia sistemelor de calcul - Structura von Neumann a sistemelor de calcul secventiale
Manual de utilizare pentru - CD Writer CRW-5232AS ASUS

Microcontrolerul pe 8 biti PIC 16F84

Exemple

                     1. Scopul lucrarii



Insusirea cunostintelor privind utilizarea programului MPLAB si folosirea acestuia pentru simularea unor programe scrise pentru microcontrolerul PIC 16F84.

                           

                     Exemplul 1. Sa se programeze procesorul 16F84 astfel incat pe display-ul placii sa fie afisata cifra 7.

       LIST P=16F84, R=DEC

     STATUS  EQU 3 ; registrul 03h din memoria de date

     RA           EQU 5      ; registrul 05h din memoria de date

     RB           EQU 6      ; registrul 06h din memoria de date

     TRISA      EQU 0x85    ;registrul 85h din memoria de dare

     TRISB      EQU 0x86    ;registrul 86h din memoria de date

     RP0     EQU 5   ; bitul 5 din registrul  STATUS

                  ORG 0      ; se defineste RAM-ul incepand cu 0h

        L1       MOVLW 0  ; continutul registrului W devine 0

                  MOVWF TRISB ; se seteaza TRISB ca port de iesire

                  BCF STATUS,RP0 ; se reseteaza bitul RP0 (RP0=0) pentru selectarea segmentului

                         ;0 din memoria de date

                  MOVLW 0x07

                  MOVWF RB ; se trimite aceasta valoarea 0x07 la port TRISB

        

                  GOTO L1

        END

Exemplul 2. Sa se scrie un program in care sa se completeze cu AAh toate registrele de uz general din segmentul 0 de memorie, apoi sa le stearga (sa le completeze cu 0). Daca stergerea a fost efectuata se vor aprinde led-urile 0,1,2,3 (corespunzatoare pinilor RB<0>RB<3>).

LIST P=16F84, R=DEC

; definirea RAM-ului

STATUS EQU 3           ; registrul 03h din memoria de date

FSR        EQU 4           ; registrul 04h din memoria de date

INDF       EQU 0x00      ; adresare indirecta

RA          equ 5           ; se definesc variabilele pentru porturi

RB          equ 6

TRISA     equ 0x85      ; registrul 5 din segmentul 2 de memorie

TRISB     equ 0x86      ; registrul 6 din segmentul 2 de memorie

RP0         equ 5           ; bitul 5 din registrul STATUS

ORG 0           ; se va defini RAM-ul incepand cu adresa 0h

BSf STATUS,RP0

Movlw 0x00

MoVwf TRISB ; portul B configurat ca port de iesire

BCF STATUS, RP0 ;se reseteaza bitul 5 din registrul STATUS pentru

;scrierea in segmentul 0 de memorie

movlw 0x00 ; continutul registrului W este incarcat cu 0x00

movwf RB   ; se asigura ca ledurile sunt stinse 

movlw 0x0C ; continutul registrului W este incarcat cu 0x0C (adresa de la care incep ;registrele generale)

movwf FSR ; registrul FSR ia valoarea 0x0c

; se incepe adaugarea de valori in registrele generale

AdaugaReg

movlw 0xAA

movwf INDF ; registrul INDF ia valoare 0xAA

incf FSR ;se va incrementa registrul FSR pana va parcurge toata zona de memorie cu registre generale (de la 0x0C la 0x2F)

movlw 0x2F; continutul registrului W este 0x2F

subwf FSR,0 ; se scade din registrul FSR valoarea 0x2F

BTFSS STATUS,2 ; se testeaza daca bitul 2 din registrul STATUS este 0, daca este 1 se ;sare peste instructiunea urmatoare

goto           AdaugaReg

movlw 0x0C

movwf FSR ; se va incarca FSR cu inceputul zonei de memorie a registrelor generale

; se incepe stergerea de valori in registrele generale

StergeReg

clrf INDF

incf FSR

movlw 0x2F

subwf FSR,0

BTFSS STATUS,2

goto           StergeReg

movlw 0x0F

movwf RB ; se vor aprinde cele 4 led-uri

               END             ; sfarsit de program

Exemplul 3. Sa se scrie un program care verifica daca continutul registrului de la adresa 0x10 este par sau impar. Daca este par pe display se va afisa valoarea ff iar daca este impar 11.

       LIST P=16F84, R=DEC

     STATUS  EQU 3 ; registrul 03h din memoria de date



     RA           EQU 5      ; registrul 05h din memoria de date

     RB           EQU 6      ; registrul 06h din memoria de date

     TRISA      EQU 5    ;registrul 85h din memoria de dare

     TRISB      EQU 6    ;registrul 86h din memoria de date

     RP0     EQU 5   ; bitul 5 din registrul  STATUS

                  ORG 0      ; se defineste RAM-ul incepand cu 0h

                  BSF STATUS,RP0 ; se seteaza bitul RP0 (RP0=1)  pentru selectarea segmentului 1

                           ; din memoria de date

               MOVLW 0x00

                MOVWF TRISB ; se seteaza PORTB ca port de iesire

               BCF STATUS,RP0 ; se va scrie in segmentul 0 din memoria de date

               MOVLW 0x00

               MOVWF RB ; pe display se va afisa 00

Impar     MOVLW 0x11 ; daca este impar se va afisa 11

                MOVWF RB

               movlw 0x0A

               Movwf Operand ; operandul de testat

               rrf Operand ; se va roti la dreapta cu carry

               BTFSC STATUS,0 ;se verifica daca bitul de carry din registru STATUS este 0 sau 1

               goto    Impar ; daca este 1 sare la impar

               MOVLW 0xff ;se va afisa FF daca operandul este par

               MOVWF RB

      END

Exemplul 4.  Sa se simuleze un numarator zecimal de la 1 la 10.

      LIST P=16F84,R=DEC

STATUS  EQU 3 ; registrul 03h din memoria de date

RA          EQU 5 ;registrul 05 din memoria de date

RB          EQU 6 ;registrul 06 din memoria de date

TRISA     EQU 0X85

TRISB     EQU 0X86

TEMP equ 0x0C

Z equ 2 ; bitul 2 din registrul STATUS (bitul de zero)

;

RP0         EQU 5   ; bitul 5 din registrul STATUS

R0           equ 0x0D

R1           EQu 0x0E

R2           equ 0x0F

DATR1   EQU 133

DATR2   EQU 250

ZECE      EQU 0x10

        ORG 0 ; se incepe de la adresa 0

        BCF STATUS,RP0 ; se va scrie in segmentul 0 de memorie

        MOVLW 0

        MOVWF TRISB ; se va configura portul b ca port de iesire

       

        Movlw 0X09

        Movwf ZECE ; variabila ZECE va lua valoarea 0X09

    

        Movlw 0x00

        movwf TEMP

           

Inceput

        movf TEMP,0 ; continutul lui W se va salva in variabila TEMP

     

  subwf ZECE,0 ; se scade din ZECE continutul lui W

        BTfsc STATUS,Z ; se testeaza daca w a juns la valoarea 10, daca

;da sare la ETZECE

        call etzece

        movf TEMP,0

        addlw 0x01 ; aduna continutul lui w cu 1

        Movwf TEMP ; si il salveaza in variabila TEMP

  

        MOVWF RB ;se afiseaza numarul din w




        movlw 10 ; numara la o secunda

        call DELAY

        GOTO Inceput;

DELAY                   ; DELAY 0.1 SEC

        MOVWF R0

DELAY3

        MOVLW DATR1

        MOVWF R1

DELAY2

        MOVLW DATR2

        MOVWF R2

DELAY1

        DECFSZ R2

        GOTO DELAY1

        DECFSZ R1

        GOTO DELAY2

        DECFSZ R0

        GOTO DELAY3

        RETLW 0

etzece

movlw 0x10

movwf RB

        END

Exemplul 5.  Sa se simuleze un semafor: - led-ul rosu se va aprinde pentru 15 secunde

-          led-ul galben se va aprinde pentru 2 secunde

-          led-ul verde se va aprinde pentru 15 secunde

        LIST P=16F84,R=DEC

;rosu rb:<0>, galben rb:<2>, verde rb:<1>

;       TRAFFIC LIGHT

STATUS  EQU 3

RA      EQU 5

RB      EQU 6

R0      EQU 0x0C

R1      EQU 0x0D

R2      EQU 0x0E

TRISA   EQU 0X85

TRISB   EQU 0X86

RP0     EQU 5   ; bitul 5 din registru STATUS

;       Definirea variabilelor

DATR1   EQU 133

DATR2   EQU 250

        ORG 0

        BSF STATUS,RP0

        MOVLW 0

        MOVWF TRISB     ; PORTB ca port de iesire

        BCF STATUS,RP0

;

BEGIN

        MOVLW 00000001

        MOVWF RB        ; se aprinde led-ul rosu

        MOVLW 150       ; pentru 15 secunde

        CALL DELAY

;

        MOVLW 000000100

        MOVWF RB        ; se aprinde led-ul galben

        MOVLW 20           ; pentru 2 secunde

        CALL DELAY     

;

        MOVLW 00000010

        MOVWF RB        ; se aprinde led-ul verde

        MOVLW 150         ; pentru 15 secunde

        CALL DELAY

        GOTO BEGIN

DELAY                   ; DELAY 0.1 SEC

        MOVWF R0

DELAY3

        MOVLW DATR1

        MOVWF R1

DELAY2

        MOVLW DATR2

        MOVWF R2

DELAY1

        DECFSZ R2

        GOTO DELAY1

        DECFSZ R1

        GOTO DELAY2

        DECFSZ R0

        GOTO DELAY3

        RETLW 0

        END

TeME:

  1. Sa se programeze procesorul 16F84 astfel incat pe display-ul placii sa fie afisata cifra FF atunci cand o variabila din zona 0 de memorie este egala cu o alta variabila din zona 1 de memorie.

2.   Sa se scrie un program in care sa se completeze cu AAh toate registrele de uz general din segmentul 0 de memorie, apoi sa-i copieze in segmentul 2 de memorie. Daca copierea  a fost efectuata se vor aprinde led-urile 0 pentru 10 secunde si apoi led-ul 1 pentru 20 secunde (ledurile corespunzatoare pinilor RB:<0> si RB:<1>).

  1. Sa se scrie un program care sa adune doua variabile din segmentul 0 de memorie si sa afiseze rezultatul pe display-ul placii. De asemenea sa se semnaleze daca a aparut depasire prin scrierea in memorie a valorii FFH iin locatia 15H.
  2. Sa se scrie un program care sa numere aparitiile bitilor de 1 din continutul unui registru de la adresa 0x11. Rezultatul se se afiseze pe display-ul placii.
  3. Sa se scrie un program care sa numere aparitiile valorii 0x11 din zona de registre generale ale segmentului 0 de memorie. Rezultatul se se afiseze pe display-ul placii.
  4. Sa se simuleze un numarator zecimal de la 00-60 (va numara 1 minut). Se va folosi o rutina de conversie hexazecimala-decimal. Sa se afiseze acest lucru pe display-ul placii.







Politica de confidentialitate

DISTRIBUIE DOCUMENTUL

Comentarii


Vizualizari: 835
Importanta: rank

Comenteaza documentul:

Te rugam sa te autentifici sau sa iti faci cont pentru a putea comenta

Creaza cont nou

Termeni si conditii de utilizare | Contact
© SCRIGROUP 2019 . All rights reserved

Distribuie URL

Adauga cod HTML in site