8052 programavimas

Y

yasm81

Guest
Proff davė mums šį kodą ir mums reikia jį keisti ...bet mes niekada išmokti asembly kad I
don't understand kodą kiekviename žingsnyje AT ALL .. mes tik 1 savaitę .. kiekvienas turi kokią nors idėją?čia yra kodai
; Period.asm: priemonės laikotarpiui Kaisčiai p2.0
; Jėzus Calvin'o-Fraga, 2007
;
; Naudoja uosto szeregowego į mikrokontrolerów rodyti
; Matuojamas laikas.Prijunkite mikrokontrolerów serial port
; Prie kompiuterio naudojant HyperTerminal arba kitų terminalų programa
; Konfigurowane metu 115200 Baud, 2 stabdymo bitai, nė pariteto Handshake nėra.
;
$ MOD52
Org 0000H
ljmp MyProgram

Org 000BH; Nutraukiama Vektorius laikmatç 0
ljmp Timer0ISR

Org 001BH
ljmp 1234H; reikia CMON51

; Didinti 16 bitų skaičiumi R0-R1
Timer0ISR:
inc R1
cjne R1, # 0, padaryta
inc R0
nuveikti:
reti

; Konwertuje šešioliktainį numeris R0-R1 su BCD R2, R3, R4
; Pakeitimus R0, kad R5 ir akumuliatorius.
; Priima 310 mašinų ciklai ir 28 baitų.
hex2bcd:
mov R2, # 0; Nustatyti BCD rezultatas 00000
mov R3, # 0
mov R4, # 0
mov R5, # 16; Ciklas skaitliukas.
hex2bcd_L0:
mov A, R1; Shift R0-R1 kairėje per vežti
RLC a
mov R1, a
mov A, R0
RLC a
mov R0, yra
mov A, R4; Atlikti bcd bcd atlikti naudojant BCD numeriai
addc a R4
da a
mov R4, yra
mov A, R3
addc a R3
da a
mov R3, yra
Mov A, R2
addc a R2
mov R2, yra
djnz R5, hex2bcd_L0
Ret

; Inicjalizuje serijos uosto
InitSerial:
CLR TR1; Stotelė laikmatç 1
Mov A, # 0FH; Nustatyti laikmatç 1, 8-bit autoreload laikmatis
Exoseth a TMOD
ORL A, # 20H
mov TMOD, yra
ORL PCON # 80H; SMOD = 1 -> k = 2: dvigulė baudrate
mov TL1 # 0FFH; Nustatyti Baud tarifą 115200 už 22.1184MHz kristalai
mov TH1 # 0FFH
setb TR1; Pradėti laikmatç 1
mov SCON # 52H; Serijos uosto režimu 1, ren, txrdy, rxempty
Ret

; Siųsti baitas į akumuliatorius per serial port
putchar:
jnb TI, putchar; Palaukite paskutinės pobūdžio perduoti
CLR TI
mov SBUF, yra
Ret

; Perduoda nulinis eilutę pažymėti pagal DPTR per serial port
pateikia:
CLR a
movc a @ a dptr
jz puts_end
lcall putchar
vč dptr
JMP kelia
puts_end:
Ret

; Spausdinami BCD skaičius saugomi R2, R3, R4
printBCD:
; Digit 5
Mov A, R2
ORL A, # 30H
lcall putchar
; Dešimtainis taškas
Mov A, # "."
lcall putchar
; Digit 4
mov A, R3
apsikeitimo a
Exoseth a, # 0FH
ORL A, # 30H
lcall putchar
; Digit 3
mov A, R3
Exoseth a, # 0FH
ORL A, # 30H
lcall putchar
; Digit 2
mov A, R4
apsikeitimo a
Exoseth a, # 0FH
ORL A, # 30H
lcall putchar
; Digit 1
mov A, R4
Exoseth a, # 0FH
ORL A, # 30H
lcall putchar
Ret

; Inicjalizuje laikmatç / counter 0 kaip 8 bitų autoreload skaitliukas
InitTimer0:
setb T0; Įjungti Kaisčiai T0 sąnaudos
CLR TR0; Stotelė laikmatç 0
Mov A, # 0F0H
Exoseth a TMOD
ORL A, # 02H; Nustatyti laikmatç 0 8 bitų autoreload laikmatis
mov TMOD, yra
mov TH0, # 72; Dėl 100us@22.11MHz: 256 - ((100e-6) * (22.11e6/12))
MOV IE, # 82H; Įjungti laikmatį 0 nutraukti ir pasaulio pertraukinėja
Ret

MyProgram:
MOV SP, # 80H; Nustatyti kamino rodiklis pradžioje idata

lcall InitSerial
lcall InitTimer0
mov dptr # Baneris
lcall kelia

amžius:

mov TL0, # 0
mov R0, # 0
mov R1, # 0
setb P2.0; Naudokite šį pin kaip indėlio

; Išmesti bet kokia nekomplektinė laikotarpiai
L0:
jnb P2.0, L0
L1:
jb P2.0, L1

setb TR0; Pradėti skaičiavimas
L2:
jnb P2.0, L2
L3:
jb P2.0, L3
CLR TR0; Stotelė skaičiavimas R0-R1 turi skaičiumi 100us padidėjimų

lcall hex2bcd

mov dptr # Laikotarpis
lcall kelia

lcall printBCD

mov dptr # sekundžių
lcall kelia

JMP amžinai

; Kai kurios eilutes:
Baneris:
db 0AH, 0DH
db "Period.asm: Priemonės laikotarpiui (0.0000s į 6.5535s) ne pin p2.0"
db 0AH, 0DH
db "Iki Jėzaus Calvin'o-Fraga, 2007"
db 0AH, 0DH, 0AH, 0DH, 0
Laikotarpis:
db "T = '
db 0
Sekundžių:
db "s"
db 0DH, 0
PABAIGA

 

Welcome to EDABoard.com

Sponsor

Back
Top