Advertisement
milanmetal

Primer sa vezbi / Kockica

Jan 10th, 2018
120
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.40 KB | None | 0 0
  1. #include <avr/io.h>
  2. #include <avr/interrupt.h>
  3. const unsigned char cifre[] = {
  4.  0xdd, 0x46, 0x54, 0x9c, 0x34, 0x24
  5. }; //decimalne cifre 1..6
  6. unsigned char kockica = 0, brojac = 0, ukljuceno = 1;
  7. ISR(TIMER0_COMPA_vect)
  8. {
  9.  //prekid tajmera 0 usled dostizanja vrednosti registra OCR0A
  10.  if (!ukljuceno)
  11.  brojac = 0;
  12.  
  13.  if (++brojac == 40)
  14.  {
  15.  brojac = 0;
  16.  //promena stanja kockice desava se na svakih 40ms
  17.  if (++kockica == 7)
  18.  kockica = 1;
  19.  
  20.  PORTD = cifre[kockica - 1];
  21.  }
  22. }
  23. ISR(PCINT1_vect)
  24. {
  25.  //prekid usled promene stanja pina PCINT10 ili pina PCINT8
  26.  switch ((~PINC) & 0x05)
  27.  {
  28.  case 0x01: //pritisnut levi taster
  29.  ukljuceno = 1;
  30.  break;
  31.  case 0x04: //pritisnut desni taster
  32.  ukljuceno = 0;
  33.  break;
  34.  }
  35. }
  36. int main()
  37. {
  38.  //inicijalizacija portova:
  39.  DDRB = 0x01; //PB0 -> izlaz
  40.  DDRC = 0x00; //port C -> ulaz
  41.  DDRD = 0xff; //port D -> izlaz
  42.  PORTB = ~0x01; //ukljucenje displeja D4
  43.  
  44.  PCICR = (1 << PCIE1); //dozvola prekida usled promene stanja
  45.  PCMSK1 = 0x05; //pina PCINT10, ili pina PCINT8
  46.  
  47.  //inicijalizacija tajmera 0:
  48.  TCCR0A = 0x02; //tajmer 0: CTC mod
  49.  TCCR0B = 0x03; //tajmer 0: fclk = fosc/64
  50.  OCR0A = 249; //perioda tajmera 0: 250 Tclk (OCR0A + 1 = 250)
  51.  TIMSK0 = 0x02; //dozvola prekida tajmera 0
  52.  //usled dostizanja vrednosti registra OCR0A
  53.  
  54.  sei(); //I = 1 (dozvola prekida)
  55.  
  56.  while(1); //glavni program se vrti u praznoj petlji
  57.  //i ceka prekide
  58.  return 0;
  59. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement