Problem att programmera tidtagning i Assembler

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
rickyboy
Inlägg: 22
Blev medlem: 8 mars 2004, 13:30:29

Problem att programmera tidtagning i Assembler

Inlägg av rickyboy »

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:

Bild
Senast redigerad av rickyboy 29 mars 2004, 14:21:16, redigerad totalt 1 gång.
Användarvisningsbild
Fagge
Inlägg: 3930
Blev medlem: 27 maj 2003, 13:59:51
Ort: Blekinge

Inlägg av Fagge »

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
rickyboy
Inlägg: 22
Blev medlem: 8 mars 2004, 13:30:29

Jag har provat

Inlägg av rickyboy »

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 :(
Användarvisningsbild
Fagge
Inlägg: 3930
Blev medlem: 27 maj 2003, 13:59:51
Ort: Blekinge

Inlägg av Fagge »

Det som skiljer mellan MPUerna är!.

HC11 / 705
LDAA = LDA
CMPA = CMP

Så det borde funka!.
matseng
Inlägg: 2360
Blev medlem: 16 september 2003, 17:18:13
Ort: Dubai, United Arab Emirates
Kontakt:

Inlägg av matseng »

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 :-)
rickyboy
Inlägg: 22
Blev medlem: 8 mars 2004, 13:30:29

Nu går klockan

Inlägg av rickyboy »

Tack så mycket för hjälpen matseng och Fagge.
Skriv svar