Försöker koda ihop ett tidtagningsur med en mikroprocessor MC68HC705 via Assembler .
Det ja undra är hur jag ska skriva i programmet så att programmet hoppar tillbaka om exempel minnesplats $010 inte är 9?
Det är bara det som fattas för att programmet ska fungera korrekt.
Bit 1 på port b är den knapp som ska stoppa klockan.
Efter att tiden har stoppats så görs talen om så att det blir i ASCII kod och skrivs ut på displayen. (Det vet jag hur man gör)
Flödes schemat för tidtagningen:
Senast redigerad av rickyboy 29 mars 2004, 14:21:16, redigerad totalt 1 gång.
hmm
Hadde de varit HC11an så skulle programet se ut ungefär så här!. Vet dok inte hur mycke som skiljer dem åt!?.
LDAA $010 * LADDA ACCKUMULATOR A MED VÄRDET I RAM $010
CMPA #$09 * GEMFÖR MED 9
BLO TBAKA * OM VÄRDET ÄR MINDRE ÄN 9 HOPPA TILL TBAKA.
* ANNARS FORTSÄTT
Tack för inlägget Fagge men den fungera inte med MC68
Finns det någon annan här som kan eller vet hur man kan göra iställe?
Har provat att köra den inbyggda klockan men den går ju inte att räkna så lång tid med, har dock provat att skriva ett annat program som kan räkna sekunder, minuter och timmar, men den gick inte att stoppa
Ser ut som ett skolarbete - varför inte be läraren om hjälp i den här specifika frågan. Det är det som man har en lärare till för.
Men...
Tittar man på ditt flödesschema så finns det ingen anledning till att kolla strömbrytar-bitten på flera ställen än direkt efter 10 mS-fördröjningen. Det går högst några enstaka uS mellan kollarna vilket är helt onödigt när det ändå kan ta upp till 10000 uS innan den reagerar om man råkar trycka ner knappen medans programmet ligger i fördröjningsrutinen.
Dessutom ska du inte kolla efter värdet 9 i dina "if-satser" utan det ska vara 10. Såvida du inte verkligen vill räkna 0, 1, 2, 3, 4, 5, 6, 7, 8, 10 ,11, 12 ,13, 14, 15, 16, 17, 18, 20 osv....
Om du hade tittat lite närmare i instruktionssettet för MC68HC705 (du har väl en manual/handbok eller något?) så hade du ganska enkelt sett ganska logiska ersättningsnamn för instruktionerna i Fagges kodexempel. Jag kan inte garantera något här eftersom jag inte rört vid en 68xxxx-processor på åtminstone de senaste 15 åren, men med hjälp av lite googling så fick jag fram nedanstående.
LDA $010 ; LADDA ACCKUMULATOR A MED VÄRDET I RAM $010
CMP #10 ; JÄMFÖR MED SIFFRAN 10
BNE TBAKA ; OM VÄRDET ÄR SKILJT FRÅN 10 HOPPA TILL TBAKA.
; ANNARS FORTSÄTT
Ett par allmänna tips annars bara:
Inleder man ett tal med en 0'a så brukar det betyda att talet ska tolkas Oktalt.
Inleder men det med ett $ så ska det tolkas Hexadecimalt.
Semikolon ; och inte stjärna * används för kommentarer i vanliga fall.
Referera inte till minnescellen $011 i programmet direkt. Använd antingen en EQU och gör något i stil med minuter EQU $011
eller ännu bättre ORG ram_start
minuter RMB 1
i början (deklarationsdelen) av koden så kan du sedan göra LDA minuter istället för det mer kryptiska LDA $011.
EDIT: rättning av megabronto-många stavfel. Kl 0800 är aldeles för tidigt :-)