editor thumb

Initiere in programare (Lectia 1)

autor:Ghiteanu Nelu - YO9BXE copy:Ghiteanu Nelu sursa:externa contact:yo9bxe@xnet.ro
         

Initiere in programare cu MikroPascal

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.

 

Lectia nr.1

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:

user-comment-thumb
salut si eu sunt un incepator in microcontrolere,lucru si eu la un montaj -un termometru cu pic16f84A cu ds1820...ma intreb daca o sa reusesc sa-l programez :)imi doresc foarte mult sa-l vad functionand....am o rugaminte dk o sa intampin dificultati la programare ma puteti ajuta?va multumesc redactor : da
comentat de: mihai_ic, 15-08-2010
user-comment-thumb
Multumim , asteptam mai departe. O zi buna
comentat de: iliehar, 06-06-2009
user-comment-thumb
Buna ziua, Este pentru prima data cand gasesc un text de programare COMENTAT,de multe ori imi puneau intrebarea de unde "scot" oamenii astia textele care sa mai faca si lucrul asta.Astept comentarii inainte la aceste programe sa m-a invat cu ele si sa-mi intre in cap ca de mult imi doresc. Mult succes si o sa vorbim despre programare in lectiile care urmeaza.
comentat de: razvan doru, 08-05-2009

Adauga comentariul tau:

comentariile inaccesibile
spacer
spacer