Y
yasm81
Guest
Proff gaf ons de code en we moeten aanpassen ...maar we hebben nooit geleerd asembly dus ik begrijp niet de code in elke stap AT ALL .. we hebben maar 1 week .. niemand heeft enig idee?hier is de codes
; Period.asm: maatregelen in de periode op pin p2.0
; Door Jezus Calvino-Fraga, 2007
;
; Gebruikt de seriële poort van de microcontroller om de
; Gemeten periode.Sluit de microcontroller seriële poort
; Op de computer met behulp van HyperTerminal of andere terminal programma
; Geconfigureerd op 115200 baud, 2 stopbits, geen pariteit, geen handshake.
;
$ MOD52
org 0000H
ljmp MyProgram
org 000BH; Interrupt vector voor timer 0
ljmp Timer0ISR
org 001BH
ljmp 1234H; Nodig door CMON51
; Increment 16-bits tellen in R0-R1
Timer0ISR:
incl. R1
cjne R1, # 0, gedaan
incl. R0
gedaan:
RETI
; Converteert de hexadecimale getal in R0-R1 tot BCD in R2-R3-R4
; Veranderingen R0 te R5 en de accu.
; Is 310 machine cycli en 28 bytes.
hex2bcd:
mov R2, # 0; Stel BCD resultaat
00.000mov R3, # 0
MOV R4, # 0
mov R5, # 16; Loop teller.
hex2bcd_L0:
mov a, R1; Shift R0-R1 links via uitvoeren
RLC een
mov-R1, een
mov a, R0
RLC een
MOV R0, een
mov a, R4; Voer bcd bcd voeren met behulp van BCD nummers
addc een, R4
da een
mov R4, een
mov a, R3
addc een, R3
da een
mov R3, een
mov a, R2
addc een, R2
mov R2, een
djnz R5, hex2bcd_L0
ret
; Initialiseert de seriële poort
InitSerial:
clr TR1; Stop timer 1
mov a, # 0FH; Set timer 1 als 8-bits autoreload timer
ANL A, TMOD
KNO-een, # 20H
mov TMOD, een
KNO-PCON, # 80H; SMOD = 1 -> k = 2: dubbele baudrate
mov TL1, # 0FFH; Set baudrate tot
115.200 voor 22.1184MHz kristal
mov Th1, # 0FFH
setb TR1; Start timer 1
mov SCON, # 52H; seriële poort in mode 1, eren, txrdy, rxempty
ret
; Stuurt de byte in de accu via de seriële poort
putchar:
JNB TI, putchar; Wacht tot het laatste teken te zenden
clr TI
mov SBUF, een
ret
; Stuurt de nul eindigende tekenreeks gewezen door DPTR via de seriële poort
puts:
clr een
movc een, @ a dptr
JZ puts_end
lcall putchar
incl. dptr
JMP puts
puts_end:
ret
; Drukt de BCD getal in R2-R3-R4
printBCD:
; Digit 5
mov a, r2
KNO-a, # 30h
lcall putchar
; Decimaalteken
mov a, # '. "
lcall putchar
; Digit 4
mov a, r3
swap een
ANL A, # 0FH
KNO-a, # 30h
lcall putchar
; Digit 3
mov a, r3
ANL A, # 0FH
KNO-a, # 30h
lcall putchar
; Digit 2
mov a, r4
swap een
ANL A, # 0FH
KNO-a, # 30h
lcall putchar
; Cijfer 1
mov a, r4
ANL A, # 0FH
KNO-a, # 30h
lcall putchar
ret
; Initialiseert timer / teller 0 als een 8-bits autoreload counter
InitTimer0:
setb T0; Enable pen T0 als input
clr TR0; Stop timer 0
mov a, # 0F0H
ANL A, TMOD
KNO-een, # 02u; Stel de timer 0 als 8-bit timer autoreload
mov TMOD, een
mov TH0, # 72; Voor 100us@22.11MHz: 256 - ((100E-6) * (22.11e6/12))
mov IE, # 82H; Inschakelen timer 0 interrupt en mondiale interrupts
ret
MyProgram:
mov SP, # 80H; Stel de stack pointer naar het begin van idata
lcall InitSerial
lcall InitTimer0
mov dptr, # Banner
lcall puts
forever:
mov TL0, # 0
MOV R0, # 0
mov-R1, # 0
setb P2.0; Gebruik deze pin als input
; Gooi eventuele onvolledige perioden
L0:
JNB P2.0, L0
L1:
JB P2.0, L1
setb TR0; Start tellen
L2:
JNB P2.0, L2
L3:
JB P2.0, L3
clr TR0; Stop tellen R0-R1 is de telling in 100us toenameregeling
lcall hex2bcd
mov dptr, # Looptijd
lcall puts
lcall printBCD
mov dptr, # secs
lcall puts
JMP forever
; Sommige strijkers:
Banner:
db 0AH, 0DH
db 'Period.asm: Maatregelen de periode (0.0000s om 6.5535s) op pin p2.0'
db 0AH, 0DH
db 'Door Jezus Calvino-Fraga, 2007'
db 0AH, 0DH, 0AH, 0DH, 0
Periode:
db 'T ='
db 0
Secs:
db 's'
db 0DH, 0
EINDE
; Period.asm: maatregelen in de periode op pin p2.0
; Door Jezus Calvino-Fraga, 2007
;
; Gebruikt de seriële poort van de microcontroller om de
; Gemeten periode.Sluit de microcontroller seriële poort
; Op de computer met behulp van HyperTerminal of andere terminal programma
; Geconfigureerd op 115200 baud, 2 stopbits, geen pariteit, geen handshake.
;
$ MOD52
org 0000H
ljmp MyProgram
org 000BH; Interrupt vector voor timer 0
ljmp Timer0ISR
org 001BH
ljmp 1234H; Nodig door CMON51
; Increment 16-bits tellen in R0-R1
Timer0ISR:
incl. R1
cjne R1, # 0, gedaan
incl. R0
gedaan:
RETI
; Converteert de hexadecimale getal in R0-R1 tot BCD in R2-R3-R4
; Veranderingen R0 te R5 en de accu.
; Is 310 machine cycli en 28 bytes.
hex2bcd:
mov R2, # 0; Stel BCD resultaat
00.000mov R3, # 0
MOV R4, # 0
mov R5, # 16; Loop teller.
hex2bcd_L0:
mov a, R1; Shift R0-R1 links via uitvoeren
RLC een
mov-R1, een
mov a, R0
RLC een
MOV R0, een
mov a, R4; Voer bcd bcd voeren met behulp van BCD nummers
addc een, R4
da een
mov R4, een
mov a, R3
addc een, R3
da een
mov R3, een
mov a, R2
addc een, R2
mov R2, een
djnz R5, hex2bcd_L0
ret
; Initialiseert de seriële poort
InitSerial:
clr TR1; Stop timer 1
mov a, # 0FH; Set timer 1 als 8-bits autoreload timer
ANL A, TMOD
KNO-een, # 20H
mov TMOD, een
KNO-PCON, # 80H; SMOD = 1 -> k = 2: dubbele baudrate
mov TL1, # 0FFH; Set baudrate tot
115.200 voor 22.1184MHz kristal
mov Th1, # 0FFH
setb TR1; Start timer 1
mov SCON, # 52H; seriële poort in mode 1, eren, txrdy, rxempty
ret
; Stuurt de byte in de accu via de seriële poort
putchar:
JNB TI, putchar; Wacht tot het laatste teken te zenden
clr TI
mov SBUF, een
ret
; Stuurt de nul eindigende tekenreeks gewezen door DPTR via de seriële poort
puts:
clr een
movc een, @ a dptr
JZ puts_end
lcall putchar
incl. dptr
JMP puts
puts_end:
ret
; Drukt de BCD getal in R2-R3-R4
printBCD:
; Digit 5
mov a, r2
KNO-a, # 30h
lcall putchar
; Decimaalteken
mov a, # '. "
lcall putchar
; Digit 4
mov a, r3
swap een
ANL A, # 0FH
KNO-a, # 30h
lcall putchar
; Digit 3
mov a, r3
ANL A, # 0FH
KNO-a, # 30h
lcall putchar
; Digit 2
mov a, r4
swap een
ANL A, # 0FH
KNO-a, # 30h
lcall putchar
; Cijfer 1
mov a, r4
ANL A, # 0FH
KNO-a, # 30h
lcall putchar
ret
; Initialiseert timer / teller 0 als een 8-bits autoreload counter
InitTimer0:
setb T0; Enable pen T0 als input
clr TR0; Stop timer 0
mov a, # 0F0H
ANL A, TMOD
KNO-een, # 02u; Stel de timer 0 als 8-bit timer autoreload
mov TMOD, een
mov TH0, # 72; Voor 100us@22.11MHz: 256 - ((100E-6) * (22.11e6/12))
mov IE, # 82H; Inschakelen timer 0 interrupt en mondiale interrupts
ret
MyProgram:
mov SP, # 80H; Stel de stack pointer naar het begin van idata
lcall InitSerial
lcall InitTimer0
mov dptr, # Banner
lcall puts
forever:
mov TL0, # 0
MOV R0, # 0
mov-R1, # 0
setb P2.0; Gebruik deze pin als input
; Gooi eventuele onvolledige perioden
L0:
JNB P2.0, L0
L1:
JB P2.0, L1
setb TR0; Start tellen
L2:
JNB P2.0, L2
L3:
JB P2.0, L3
clr TR0; Stop tellen R0-R1 is de telling in 100us toenameregeling
lcall hex2bcd
mov dptr, # Looptijd
lcall puts
lcall printBCD
mov dptr, # secs
lcall puts
JMP forever
; Sommige strijkers:
Banner:
db 0AH, 0DH
db 'Period.asm: Maatregelen de periode (0.0000s om 6.5535s) op pin p2.0'
db 0AH, 0DH
db 'Door Jezus Calvino-Fraga, 2007'
db 0AH, 0DH, 0AH, 0DH, 0
Periode:
db 'T ='
db 0
Secs:
db 's'
db 0DH, 0
EINDE