Scrigroup - Documente si articole

Username / Parola inexistente      

Home Documente Upload Resurse Alte limbi doc  

CATEGORII DOCUMENTE





loading...

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


loading...







Politica de confidentialitate

DISTRIBUIE DOCUMENTUL

Comentarii


Vizualizari: 847
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