Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Jak zrobic w asemblerze 8051...???

Bex 25 Lip 2003 11:13 1552 5
  • #1 25 Lip 2003 11:13
    Bex
    Poziom 10  

    Witam jestem początkującym i mam takie pytanie:

    Jak zrobic w asemblerze 8051 zeby dioda podlanczona do portu P1.1 mrugala co 1s, przy czym mam kwarc 12MHz. Oto jak to powinno wygladac:

    start->zapal na 1s -> zgas na 1s -> zapal na 1s -> .... (i tak analogicznie)

    Prosze o pomoc, i jeszcze jakies linki do stron z opisem asemblera 8051!!

    0 5
  • #2 25 Lip 2003 11:41
    ElGregor
    Poziom 22  

    Przy 12MHz kwarcu częstotliwość pracy timerów wynosi 1MHz, w trybie 13 bitowym przerwanie timera będzie generowane z częstotliwością 1000000/8192 = 122Hz. W procedurze obsługi przerwania robisz dodatkowy licznik, który zwiększa się o 1, i kiedy "doliczy" do 122 (znaczy że minęła sekunda) zerujesz go i jednocześnie negujesz stan portu P1.1 żeby zmienić stan diody.

    Dobra stronka o 8051 jest np. tu: http://www.8052.com/tut8051.phtml

    0
  • #3 25 Lip 2003 11:43
    elektryk
    Poziom 42  

    Bex napisał:
    start->zapal na 1s -> zgas na 1s -> zapal na 1s -> .... (i tak analogicznie)
    A może tak:
    start -> zmień stan diody na przeciwny -> pusta pętla trwająca sekunde -> skocz przed "zmień stan..."

    0
  • #4 25 Lip 2003 11:46
    ElGregor
    Poziom 22  

    Można i tak, napewno będzie prościej, ale początkującemu będzie trudno wyliczyć ilość cykli maszynowych żeby dobrać długość pętli na 1s.
    Chyba że metodą prób i błedów.

    0
  • #5 25 Lip 2003 12:01
    Bex
    Poziom 10  

    A poda mi ktos konkretny kod??

    0
  • #6 25 Lip 2003 12:14
    ElGregor
    Poziom 22  

    To jest przykład na przerwaniu timera T0

    Code:
    ;program tick
    

    Counter      EQU  30h

          ORG  0000h
          jmp  Start
          ORG  000Bh
          jmp  Int0Handler

    Start:
          mov  Counter,#00h
          setb TR0   ;enable T0
          setb ET0   ;enable T0 interrupt
          setb EA   ;enable interrupts
    Loop:
          jmp  Loop

    Int0Handler:
          push ACC
          inc  Counter
          mov  A,Counter
          cjne A,#122,Exit
          mov  Counter,#00h
          cpl  P1.1
    Exit:      
          pop  ACC
          reti

          END

    0