Sari la conținut
ELFORUM - Forumul electronistilor

Exercitii programare de la zero


Vizitator ciocanaru

Postări Recomandate

Ai doua erori:

 

1. Nu ai incheiat acolada finala pentru functia 3. Practic mai trebuie sa adaugi o acolada de inchidere chiar inainte sa inceapa functia 4

2. In functia 4, pe la mijlocul ei declari o variabila int j. Declaratia variabilelor se face intotdeauna la inceputul programului sau functiei. In cazul tau, mai concret, trebuie sa muti declaratia aceasta imediat dupa acolada de deschidere a functiei 4.

 

Dupa aceste modificari, programul se compileaza fara erori.

Link spre comentariu

Salut,

 

Elison se referea la urmatorul hack.

 

Inlocuiesti linia:

unsigned int i;

care se vede mai jos,

#define BUTON   RA0_bit#define INPUT   1#define OUTPUT  0#define APASAT  0#define NR_JOCURI    4unsigned int i;//Timer0//Prescaler 1:4; TMR0 Preload = 6; Actual Interrupt Time : 1 msvoid InitTimer0(){  OPTION_REG = 0x81;  TMR0 = 6;  INTCON = 0xA0;}// restul de cod

cu linia:

unsigned int i = 4;
Editat de mars01
Link spre comentariu

Revin cu un update, am testat jocul de lumini si am observat o problema, jocul  porneste pana nu apas butonul. Cum se poate rezolva??

Exprimarea ta nu este clara.

Daca vrei sa porneasca un joc de lumini cand alimentezi circuitul, trebuie sa initializezi variabila i , asa cum foarte clar ti-a explicat @mars01, cu o constanta corespunzatoare jocului pe care il doresti.

Daca vrei sa porneasca doar cand apesi butonul, pui i=4

Editat de Elison
Link spre comentariu
  • 6 luni mai târziu...

Nu inteleg cum functioneaza operatorul "%"

 

https://download.mikroe.com/documents/compilers/mikroc/pic/help/arithmetic_operators.htm

 

Citesc despre el ca ar trebui sa returneze restul impartirii a doua numere intregi ; si avem ca exemplu :

/* for example: */
9 % 3;          /* equals 0 */
7 % 3;          /* equals 1 */
-7 % 3;         /* equals -1 */

... cu precizarea : "Remainder operand % works only with integers; the sign of result is equal to the sign of the first operand:"

 

9%3 e in regula : restul e 0

 

dar de ce la 7%3 rezultatul e 1 ?

 

 

 

M-am lovit de acest obstacol incercand sa inteleg programul urmator :

// LCD module connections
sbit LCD_RS at RB2_bit;
sbit LCD_EN at RB3_bit;
sbit LCD_D4 at RB4_bit;
sbit LCD_D5 at RB5_bit;
sbit LCD_D6 at RB6_bit;
sbit LCD_D7 at RB7_bit;

sbit LCD_RS_Direction at TRISB2_bit;
sbit LCD_EN_Direction at TRISB3_bit;
sbit LCD_D4_Direction at TRISB4_bit;
sbit LCD_D5_Direction at TRISB5_bit;
sbit LCD_D6_Direction at TRISB6_bit;
sbit LCD_D7_Direction at TRISB7_bit;
// End LCD module connections

int t;
char a;
char lcd[] = "000 Degree";

void main()
{
  ADCON1 = 0x04;
  Lcd_Init();
  Lcd_Cmd(_LCD_CURSOR_OFF);

  do
  {
    Lcd_Cmd(_LCD_CLEAR);
    Lcd_out(1,1, "Temperature:");
    t = ADC_Read(0);

    t = t * 0.4887;
    a = t%10;
    lcd[2] = a + '0';

    t = t/10;
    a = t%10;
    lcd[1] = a + '0';

    t = t/10;
    a = t%10;
    lcd[0] = a + '0';

    Lcd_out(2,1,lcd);
    Delay_ms(100);
  }while(1);
}
Link spre comentariu

Operatorul modulo este un pic mai pacatos :

 

R = A % B se calculeaza cu relatia : R = A – B * (A / B)

 

Eu i-l folosesc aproape exclusiv cand ret. zero - ex: daca intr-o bucla din 33 in 33 de iteratii trebuie sa fac ceva:

for(int i=0; i< 10000; i++){
   //code
   if (i %33 == 0) logEvents();
}

In exemplu t%10 obtine ultima cifra din t.

Editat de rlodina
Link spre comentariu

Creează un cont sau autentifică-te pentru a adăuga comentariu

Trebuie să fi un membru pentru a putea lăsa un comentariu.

Creează un cont

Înregistrează-te pentru un nou cont în comunitatea nostră. Este simplu!

Înregistrează un nou cont

Autentificare

Ai deja un cont? Autentifică-te aici.

Autentifică-te acum
×
×
  • Creează nouă...

Informații Importante

Am plasat cookie-uri pe dispozitivul tău pentru a îmbunătății navigarea pe acest site. Poți modifica setările cookie, altfel considerăm că ești de acord să continui.Termeni de Utilizare si Ghidări