8052 programovania

Y

yasm81

Guest
Proff nám kódu a musíme to zmeniť ..., Ale nikdy sme sa dozvedeli asembly tak Nerozumiem kód v každom kroku AT ALL .. máme len 1 týždeň .. niekto má nejakú predstavu?Tu je kód
; Period.asm: Opatrenia obdobie na pin p2.0
Podľa Ježiša Calvin-Fraga, 2007
;
; Využíva sériového portu z mikrokontroléru pre zobrazenie
; Zmerané obdobie.Pripojte sériový port mikrokontroléru
, K počítaču pomocou programu HyperTerminal alebo akékoľvek iné terminálový program
; Nakonfigurovaná na 115200 baud, 2 stop bity, žiadna parita, handshake nemá.
;
$ MOD52
org 0000H
ljmp MyProgram

org 000BH; prerušovacie vektor pre časovač 0
ljmp Timer0ISR

org 001BH
ljmp 1234H, ktoré potrebujú CMON51

; Prírastok 16-bit počítať v R0-R1
Timer0ISR:
vr R1
cjne R1, # 0,
uzavretáinc R0
vykonalo:
reti

; Prenesie číslo v hexadecimálním R0-R1 na BCD v R2-R3-R4
; Zmeny R0 na R5 a akumulátor.
; Zastáva stroj 310 cyklov a 28 bytov.
hex2bcd:
mov R2, # 0; Nastaviť BCD Výsledky 00000
mov R3, # 0
mov R4, # 0
mov R5, # 16; Obíďte pultu.
hex2bcd_L0:
mov a, R1, R0 Shift-R1 vľavo cez carry
RLC jedna
mov R1, a
mov a, R0
RLC jedna
mov R0, a
mov a, R4; Vykoná BCD BCD prepravovať pomocou BCD čísla
addc a, R4
da jedna
mov R4, a
mov a, R3
addc a, R3
da jedna
mov R3, a
mov a, R2
addc a, R2
mov R2, a
djnz R5, hex2bcd_L0
ret

; Inicializuje sériového portu
InitSerial:
CLR TR1; Stop časovač 1
mov a, # 0FH; Nastavte časovač 1 ako 8-bit autoreload časovač
ANL A, TMOD
ORL A, # 20H
mov TMOD, a
ORL PCON, # 80h; SMOD = 1 -> k = 2: dvojlôžkové prenosovej rýchlosti
MOV TL1, # 0FFH; Nastaviť prenosová rýchlosť až 115200 pre 22.1184MHz krištáľu
MOV TH1, # 0FFH
osev TR1; Štart časovač 1
mov Scone, # 52H; Sériový port v režime 1, ren, txrdy, rxempty
ret

; Odošle byte v akumulátora cez sériový port
putchar:
jnb TI, putchar; Počkajte na posledný znak odovzdávať
CLR TI
mov SBUF, a
ret

; Odošle nulu ukončiť reťazec upozornil tým DPTR cez sériový port
uvádza:
CLR jedna
movc a, @ a dptr
jz puts_end
lcall putchar
vr dptr
JMP kladie
puts_end:
ret

; Vytlačí BCD číslo uložené v R2-R3-R4
printBCD:
; Digit 5
mov a, r2
ORL A, # 30H
lcall putchar
; Desatinný
mov a, #''.
lcall putchar
; Digit 4
mov a, r3
swapový jedna
ANL A, # 0FH
ORL A, # 30H
lcall putchar
; Digit 3
mov a, r3
ANL A, # 0FH
ORL A, # 30H
lcall putchar
; Digit 2
mov a, r4
swapový jedna
ANL A, # 0FH
ORL A, # 30H
lcall putchar
; Digit 1
mov a, r4
ANL A, # 0FH
ORL A, # 30H
lcall putchar
ret

; Inicializuje časovač / čítač 0 v 8-bit autoreload protizáruku
InitTimer0:
osev T0; Povoliť pin T0 ako vstupné
CLR TR0; Zastaviť merač 0
mov a, # 0F0H
ANL A, TMOD
ORL A, # 02h; Nastavte časovač 0 ako 8-bitový časovač autoreload
mov TMOD, a
mov TH0, # 72; Pre 100us@22.11MHz: 256 - ((100e-6) * (22.11e6/12))
mov IE, # 82H; časovač 0 Povoliť globálne prerušenie a prerušenie
ret

MyProgram:
mov SP, # 80h; Nastaviť zásobníka ukazovateľ na začiatok pridať

lcall InitSerial
lcall InitTimer0
mov dptr, # Banner
lcall kladie

navždy:

mov TL0, # 0
mov R0, # 0
mov R1, # 0
osev P2.0; Použite tento pin ako vstup

; Zbaviť akýkoľvek nevyčerpávajúci obdobie
L0:
jnb P2.0, L0
L1:
JB P2.0, L1

osev TR0; Začiatok počítanie
L2:
jnb P2.0, L2
L3:
JB P2.0, L3
CLR TR0; Stop uskutočnia R0-R1 má počítať v 100us inkrementů

lcall hex2bcd

mov dptr, # Obdobie
lcall kladie

lcall printBCD

mov dptr, # SECS
lcall kladie

JMP navždy

; Niektoré reťazce:
Banner:
db 0Ah, 0Dh
db 'Period.asm: Opatrenia obdobie (0.0000s na 6.5535s) na pin p2.0'
db 0Ah, 0Dh
db 'Ježišom Calvin-Fraga, 2007'
db 0Ah, 0Dh, 0Ah, 0Dh, 0
Obdobie:
db 'T ='
db 0
Sekundy:
db 's'
db 0Dh, 0
END

 

Welcome to EDABoard.com

Sponsor

Back
Top