Sunteți pe pagina 1din 14

UNIVERSITATEA POLITEHNICA BUCURESTI

FACULTATEA DE ELECTRONICA, TELECOMUNICATII SI TEHNOLOGIA INFORMATIEI

PROIECT 2

TEMA 10

PROFESOR INTRUMATOR: ELISABETA BUZOIANU


STUDENT: POPA MARIAN BOGDAN
GRUPA: 434 B

BUCURESTI 2010
CUPRINS

Ι . Enunţul temei …………………………………3


Ι Ι. Datele de proiectare …………………………………3
ΙΙ Ι. Rezumatul proiectului…………………………………4
Ις. Introducere teoretică …………………………………4
ς . Simulare ORCAD …………………………………8
ςΙ. Implementare pe kit …………………………………10
ςΙ Ι. Bibliografie …………………………………15
I. ENUNTUL TEMEI

1. Să se realizeze simularea PSpice a funcţionării unui automat finit pentru comanda deschiderii,
respective închiderii unei uşi, prin acţionarea a două motoare, M1 şi M2, folosind mediul de programare
ORCAD.
• Comanda de acţionare a motoarelor se face de la o telecomandă( semnal F) în funcţie de informaţia
primită de la doi senzori ( Z şi O), astfel : dacă uşa este închisă, va porni motorul M2 care deschide
uşa, iar dacă uşa este deschisă, se va porni motorul M1 care o va închide
• În timpul funcţionării motorului M1 sau M2 semnalul de la telecomandă este ignorant

2. Să se implementeze acelaşi automat pe kitul C8051F320.

II. DATE DE PROIECTARE

1. Pentru simulare:
• diagrama stărilor care descrie funcţionarea automatului:

- Stările automatului sunt 0, 1, 2, 3


- Simbolurile folosite: F=semnal telecomandă; Z=sensor de uşă complet închisă; O=senzor
de uşă complet deschisă; motorul M2 deschide uşa, motorul M1 închide uşa.

• Utilizăm bistabile D pentru sintetizarea electronică, conform cu ecuaţiile de


comandă:

D0= *F+ *Q0*Q1+ *Q1* ;


D1=Q0* + *Q0+ *Q1* ;

• Ecuaţiile de comandă a motoarelor:

M1=Q0*Q1; M2= *Q1;


III. REZUMATUL PROIECTULUI

Proiectul isi propune atat simularea automatului in PSpice cat si implementarea pe kitul C8051F320.
Acest automat permite închiderea sau deschiderea unei uşi cu ajutorul a doua motoare(M1 sau M2) prin
activarea de la telecomandă(F) a unuia dintre cei doi senzori(Z sau O).

Pentru realizarea proiectului am parcurs urmatoarele etape:

• Am obţinut ecuaţiile corespunzătoare tranziţiilor si ieşirilor;


• Am realizat schema in Orcad folosind bistabili D, porţi NAND si NOT;
• Am realizat organigrama programului;
• Am utilizat Silicon Laboratories Integrated Development Environment (IDE) pentru programarea şi
implementarea automatului finit.

Ecuaţiile corespunzătoare tranziţiilor si ieşirilor le-am determinat cu ajutorul diagramei Venn-


Karnaugh(VK) în funcţie de semnalele primite.
Organigrama programului principal este elaborată conform funcţionării automatului si instrucţiunilor
microcontrolerului.

IV. INTRODUCERE TEORETICA

In acest proiect am folosit kit-ul C8051F320, compatibil Intel 8051. In continuare vom prezenta cateva
caracteristici tuturor mC Intel 8051.

Organizarea memoriei
Memoria de program şi date sunt fizic separate („Harvard”)
a) Memoria de program
- Este de tip ROM sau EPROM
- Harta memoriei are 64 kB
- Pe cip se află, de regulă, 4 kB, 8 kB sau 16kB. Restul memoriei este externă
- După RESET, (PC) ← 0000H
- Locaţii de memorie rezervate :
Iniţializare programe: 0000H ÷ 0002H
vector de întrerupere tip 0: 0003H ÷ 000AH
timer 0: 000BH
vector de întrerupere tip 1: 0013H ÷ 001AH
timer 1: 001BH
b) Memoria de date
- Memoria externă are 64 kB
- Memoria externă e accesată cu magistrala de date şi adrese prin intermediul Port 0 şi eventual Port 2
- Validarea se face cu RD, WR
- Magistrala de adrese poate avea numai 1 B sau 2 B
- Memoria internă este accesată cu adrese pe 1B
- Sunt 3 blocuri de câte 128 B: “Lower 128”, “Upper 128”, “SFR Space”.

“Upper 128” şi SFR Space sunt fizic separate şi adresate cu moduri de adresare diferite
“Upper 128” nu e implementată în 8051 clasic
“Upper 128” este adresabilă indirect la variantele la care e implementată
“Lower 128”: 4 bancuri de câte 8 registre R0 ÷ R7
16 B – un bloc de memorie adresabil pe bit
restul – memorie de date este adresabilă direct şi indirect

Moduri de adresare
Adresare directă:
- Adresa completă are 8 b în formatul instrucţiunii curente
- Se poate utiliza pentru memoria de date internă („Lower 128 ”)
- Se poate utiliza pentru SFR
Adresare indirectă:
- Poate fi pe 8 b sau pe 16 b
- Se pot accesa 256 B de memorie internă de date („Lower 128” şi „Upper 128”)
sau 64 kB de memorie externă
- Pentru adresele pe 8 b se pot folosi R0, R1 sau SP
- Pentru adresele pe 16 b se poate folosi doar DPTR – pentru memoria externă
Adresare implicită (în registru):
- Datele sunt accesate în unul dintre cel 8 registre din setul de lucru R0,…, R7
- Selecţia registrului vizat se face cu 3 biţi în chiar codul instrucţiunii
- Anumite instrucţiuni se referă la anumite registre (acumulator, pointer de date etc.)
Selecţia registrului se face în chiar codul instrucţiunii
Adresare imediată:
- O constantă care se află în formatul instrucţiunii curente, imediat după cod
- Constanta poate fi pe 8 b sau 16 b
Adresare indexată:
- Se foloseşte doar pentru memoria de program !
- Pentru tabele de translatare cu DPTR sau PC ca bază şi ACC intrare în tabelă
- Pentru salturi – ACC conţine deplasamentul

C8051F320:
• Microcontroler compatibil 8051 de mare viteza
• 16 KB de memorie on-chip Flash
• Oscillator intern 12 Mhz
• 25 porturi I/O
• Patru timere de uz general pe 16 biti
• Memorie -2304 Octeţi RAM intern (1k + 256 + 1k USB FIFO)
-16 KB Flash
• Controller USB, 1k FIFO RAM
• Power-On Reset, VDD Monitor, si Missing Clock Detector pe chip
• Counter/Timer programabil cu 5 moduri si Watch Dog Timer
• On – chip debugger.
• Referinta de tensiune , sensor de temperatura
Memoria Flash poate fi reprogramata într-un circuit, oferind capabititati de stocare a datelor pe un
sistem non-volatil, şi, de asemenea, permiţând upgrade-uri de firmware pentru 8051.
Utilizatorul software-ului are un control complet al tuturor periferice şi poate închide în mod individual
unul sau chiar toate perifericele pentru a economisi energie. Toate periferice analogice si digitale sunt
pe deplin funcţionale în timpul depanării. Functionarea fiecarui dispozitiv este specificată pentru 2.7 la
3.6 V.
V. SIMULARE ORCAD

D0=

D1=

M1=Q0*Q1

M2= *Q1

F-semnalul de la telecomandă;

Z-senzor de uşă complet deschisă;

O-senzor de uşă complet închisă;

M2-motorul ce deschide uşa;

M1-motorul ce închide uşa.


Definirea semnalelor:

Rezultatul simularii:
VI. Implementarea pe kit

Organigrama contine 3 blocuri mari:


• Setarile initiale si definirea variabilelor
• Initializarea registrelor folosite
• Stare automat

Cele 3 intrari logice F, Z, O vor fi conectate la pinii de port P1.0, SW2(P1.6), P2.6.
Afisarea starii de actionare a lui M1 se va face cu D1, iar cea a lui M2 cu D2.
Citirea variabilelor de intrare se va face la intervale de timp de 3 secunde obţinute cu program „buclă de
întârziere”.

Funcţionarea automatului:

Dacă uşa este închisă, când semnalul de la telecomandă este 1 logic ea va începe să se deschidă cu
ajutorul motorului M2. Când senzorul O are valoarea 1 logic atunci motorul M2 se va opri.
Dacă uşa este deschisă, cand semnalul de la telecomandă este 1 logic ea va începe să se închidă cu
ajutorul motorului M1. Când senzorul Z are valoarea 1 logic atunci motorul se va opri.
În starea 0, stare iniţială, uşa este închisă. Automatul rămâne în această stare până când primeşte
semnal de la telecomandă, şi astfel trece în starea următoare.
În starea 1 M2 funcţionează. Automatul rămâne în această stare până când semnalul de la senzorul
O (uşă complet deschisă) va fi 1 logic. Apoi trece in Starea 2, unde M2 e oprit.
În starea 2 se aşteaptă din nou semnalul de la telecomandă,1 logic, pentru a activa M1 şi pentru a
putea trece în starea 3.
Automatul va rămâne în această stare până la primirea semnalului 1 logic de la senzorul Z(uşă
complet închisă), după care va trece în starea 0.

STATE0
• stinge orice LED aprins
• citeste F
• daca este 0, seteaza STATE0
• daca este 1, seteaza STATE1

STATE1
• aprinde D2
• citeste O
• daca este 0, seteaza STATE1
• daca este 1, seteaza STATE2

STATE2
• stinge orice LED aprins
• citeste F
• daca este 0, seteaza STATE2
• daca este 1, seteaza STATE3

STATE3
• aprinde D1
• citeste Z
• daca este 0, seteaza STATE3
• daca este 1, seteaza STATE0

ORGANIGRAMA:

START

Setari si configurare mC

Initializare registre

Temporizare

Cautarea starii curente cu


registrul contor de stare

Stingere LED Aprind D2 Stingere LED Aprind D1

Citire intrari Citire intrari Citire intrari Citire intrari

DA NU DA NU DA NU DA NU
0=0 F=0 Z=0
F=0

S0 S1 S1 S2 S2 S3 S3 S0
Setari si configurare mC
Programul in sine incepe cu instructiunile
$NOMOD51(Dezactivarea definitiilor implicite pt registrele speciale ale 8051)
$include (c8051f320.inc) (Includerea fisierului de definire pt registrele specifice kitului C8051F320 DK)
Apoi pentru a usura partea de programare, asociem “etichete” porturilor , corespunzatoare intrarilor si iesirilor:
F equ P1.0
Z equ P1.6
O equ P2.5
M1 equ P2.3
M2 equ P2.2
Se defineste vectorul de reset la adresa 0000h. In cazul unui reset se sare la rutina principala de program
“main”: cseg at 0x0000

Initializarea
Dezactivam intreruperile: clr ea, dezactivam Watch Dog Timer: anl pca0md,#000h, activam crossbar: mov
xbr1,#40h, pinii corespunzatori intrarilor ii configuram ca intrari digitale: orl p1mdin,#0x01 orl p2mdin,#0x21,
iesirile digitale ca push – pull: orl p2mdout,#0x0c, stingem ledurile: clr M1 clr M2.

Bucla de intarziere
Citirea variabilelor de intrare se va face la intervale de timp de 3 secunde. Pentru aceasta, vom insera o bucla de
intarziere inainte de citirea fiecarei variabile(avem nevoie de o frecventa de 0,33Hz.
(<R3>*(<R2>*(R1*2+4)+4)+2)*8/12M=(35*(253*(253*2+4)+4)+2)*8/12M=3.01079466666 s .
Codul corespunzator buclei de intarziere:
Delay: mov R3, #0x23
Loop1: mov R2, #0xFD
Loop0: mov R1, #0xFD
djnz R1, $
djnz R2, Loop0
djnz R3, Loop1
sjmp mainLoop

Cautarea starii curente cu registrul contor de stare


Se foloseste R1 din Bank 1
State0:cjne R1,#0x00,State1;daca R1=0 se executa instructiunea imediat urmatoare, in caz contrar se sare la
Eticheta State1
State1:cjne R1,#0x01,State2;daca R1=1 se executa instructiunea imediat urmatoare, in caz contrar se sare la
Eticheta State2
State2: cjne R1,#0x02,State3;daca R1=2 se executa instructiunea imediat urmatoare, in caz contrar se sare la
Eticheta State3
State3: cjne R1,#0x03,State4;daca R1=3 se executa instructiunea imediat urmatoare, in caz contrar se sare la
Eticheta State0
Codul complet al programului:
$NOMOD51
$include (c8051f320.inc)
F equ P1.0
Z equ P1.6
O equ P2.5
M1 equ P2.2
M2 equ P2.3

cseg AT 0x0000
ljmp main
mainCodeSeg segment CODE
rseg mainCodeSeg
using 1
main:
acall init
mainLoop:
acall Delay
State0: cjne R1,#0x00,State1
jnb F, J0
mov R1,#0x01
setb M2
J0: sjmp mainLoop

State1: cjne R1,#0x01,State2


jnb O,J1
mov R1,#0x02
clr M2
J1: sjmp mainLoop

State2: cjne R1,#0x02,State3


jnb F,J2
mov R1,#0x03
setb M1
J2: sjmp mainLoop

State3: jnb Z,J3


mov R1,#0x00
clr M1
J3: sjmp mainLoop

Delay: mov R3, #0x23


Loop1: mov R2, #0xFD
Loop0: mov R1, #0xFD
djnz R1, $
djnz R2, Loop0
djnz R3, Loop1
sjmp mainLoop
init:
clr EA
anl PCA0MD,#0xBF
mov XBR1,#0x40
orl P2MDOUT,#0x0C
orl P2MDIN,#0x21
orl P1MDIN,#0x01
clr M1
clr M2
mov R1,#0x00
ret
END