
Initiere in programare (Lectia 1)
Asa cum am inceput seria de articole “Copii creeaza” cred ca este util (in acelasi scop) si prezentarea unor serii de “mini cursuri” care sa familiarizeze pe incepator cu programarea.
Marea majoritate a montajelor ce folosesc microcontrolere , roboti , ceasuri , aparate de masura , fie nu functioneaza in parametrii , fie softul nu este disponibil decat platit , fie acesta nu este dat , fie nu am reusit noi sa acumulam suficiente cunostinte de limba engleza. In aceste cazuri ideal este sa reusim sa ne creem propriul soft pornind de la lucruri cat mai simple si mergand catre complicat.
Vom face impreuna primii pasi in programare folosind numai microcontrolerul PIC16F84. De la inceput trebuie sa avem in vedere ca noile calculatoare care de fapt sunt niste play-station-uri mai sofisticate nu ne vor ajuta prea mult. De ce? Pentru ca nu au porturile serial si paralel , anumite softuri nu ruleaza decat cu artificii ( vezi ICprog , care are nevoie de driver instalat in acelasi loc cu softul de baza ) , si multe alte neajunsuri.
Primul pas pe care trebuie sa-l facem este acela de a descarca de pe net programele : MikroPascal , Daemon Tools , Proteus , ICprog ( full ) si sa fim pregatiti ca poate mai trebuie cate ceva.
Se instaleaza Daemon Tools apoi Proteus v6.9 ( pentru licenta ma puteti contacta si-l trimit – ABSOLUT gratuity ). Apoi urmeaza instalarea programului MikroPascal pe care il gasiti liber pe net si nu ridica probleme.
Nu vom face analiza microcontrolerului , s-au ocupat altii de asta ci vom trece direct la treaba cu urmatoarele precizari :
-Portul A = a fost asimilat cu intrarea in microcontroller respective pinii RA0 – RA4 , pini prin care se primeste comanda.
-Portul B = a fost asimilat cu iesirea din microcontroller respective pinii RB0 – RB7 , pini prin care se trimite comanda de executie.
-Tot ce este trecut dupa semnul ( // ) reprezinta text liber , de indicatie , programul il ignora automat , dar sa nu abuzam de aceasta.
-Initializarea programului MikroPascal nu-i accord atentie deoarece nu cred ca este nevoie.
Lectia nr. 1, aprinderea unui numar de 8 (opt) LED-uri secvential.
program Lectia01a;//numele programului , cat mai scurt dar clar sa-l putem identifica ulterior destul de usor
var k:byte; //variabila de tip byte , ulterior vor mai apare si alte tipuri de variabile
begin //se incepe programul , aici se face initializarea in "0" , aducerea la "0"
portb:=0;//initializare porturilor B sa lucreze ca iesire , pt a putea comanda ceva , LED , punte H , servo , etc.
trisb:=0;//configurarea porturilor B sa lucreze ca iesire
porta:=255;//initializarea porturilor A sa lucreze ca intrare , aici se aplica comanda de la un swich , buton , LED de tip IR , etc.
trisa:=255;//configurarea porturilor A ca intrare
//Porturile A si B au fost configurate ( declarate ) si se poate incepe scrierea comenzilor pe care dorim sa le execute microcontrolerul.
while true do //daca este adevarat (configurarea porturilor ) mergi la inceput de program sau incepe executia
begin //incepere program
if button(porta,1,1,0) then //daca butonul RA1 este neapasat ( in "0" logic )
//porta,1,1,0 inseamna Port A , 1( pinul 1=RA0 ) , 1 (constanta de program) , 0 ( buton neactivat , in "0" logic )
portb:=0; //intreg portul B este in "0";
// Acum aprindem LED-ul nr 8 conectat la RB7
if button(porta,1,1,1) then //daca RA1 este apasat ( in 1 logic )
begin //incepe secventa nr 1 de program
portb:=128; //portul RB7 se aprinde
delay_ms(500); //pentru o perioada de 500milisecunde
end; //sfarsitul secventei de program , aceata instructiune are in finalul ei semnul graphic ";"
// Acum aprindem LED-ul nr 1 conectat la RB0
if button(porta,1,1,1) then
begin
portb:=1;
delay_ms(500);
end;
// Acum aprindem LED-ul nr 7 conectat la RB6
if button(porta,1,1,1) then
begin
portb:=64;
delay_ms(500);
end;
// Acum aprindem LED-ul nr 2 conectat la RB1
if button(porta,1,1,1) then
begin
portb:=2;
delay_ms(500);
end;
// Acum aprindem LED-ul nr 6 conectat la RB5
if button (porta,1,1,1) then
begin
portb:=32;
delay_ms(500);
end;
// Acum aprindem LED-ul nr 3 conectat la RB2
if button (porta,1,1,1) then
begin
portb:=4;
delay_ms(500);
end;
// Acum aprindem LED-ul nr 5 conectat la RB4
if button (porta,1,1,1) then
begin
portb:=16;
delay_ms(500);
end;
// Acum aprindem LED-ul nr 4 conectat la RB3
if button (porta,1,1,1) then
begin
portb:=8;
delay_ms(500);
end;
end;
//aceasta comanda inchide linia "incepere program";
end.
//aceasta comanda inchide programul definitiv
NOTA! Fiecarui "begin" din program trebuie sa-i corespunda obligatoriu cate un "end"
Aici este acelasi program dar fara texte explicative :
program Lectia01a;
var k:byte;
begin
portb:=0;
trisb:=0;
porta:=255;
trisa:=255;
while true do begin
if button (porta,1,1,0) then
portb:=0;
if button (porta,1,1,1) then begin
portb:=128;
delay_ms(500);
end;
if button (porta,1,1,1) then begin
portb:=1;
delay_ms(500);
end;
if button (porta,1,1,1) then begin
portb:=64;
delay_ms(500);
end;
if button (porta,1,1,1) then begin
portb:=2;
delay_ms(500);
end;
if button (porta,1,1,1) then begin
portb:=32;
delay_ms(500);
end;
if button (porta,1,1,1) then begin
portb:=4;
delay_ms(500);
end;
if button (porta,1,1,1) then begin
portb:=16;
delay_ms(500);
end;
if button (porta,1,1,1) then begin
portb:=8;
delay_ms(500);
end;
end;
end.
Nota ! Porturile RB0 – RB7 se afla asa :
2°=1 à RB0 ; 2¹=2 à RB1 ; 2²=4 à RB2 ; 2³=8 à RB3 ; s.a.m.d.
Pentru a aprinde tot portul odata se face suma cifrelor respective porturilor RB0 – RB7 suma care este 255.
Comentarii:
Adauga comentariul tau:

