Programowanie licznika impulsów na 89C2051 - problemy z rejestrami w asemblerze

Licznik





Poprzedni Następny
Wiadomość
spis treści
From: "Michał" <sumator_at_nospam_friko5.onet.pl>
Subject: Licznik
Date: Sun, 23 May 1999 15:17:49 +0200


Witam wszystkich a szczegolnie specow od uP!

W ramach cwiczen napisalem programik na 89C2051.
Ma to byc licznik zliczajacy impulsy podane na INT0.
Mam problem gdyz moj asembler buntuje sie w zwiazku
z nazwami rejestrow R0, R1...
Powinien chyba je rozpoznawac tak jak rozpoznaje alumulator ACC
albo inne SFR?
Probowalem zadeklarowac ich nazwy na poczatku programu poleceniem
EQU ale tez nie jest w porzatku.
Prosze przejrzyjcie ten programik, moze jest tam jakis gruby blad a i tak
ogolnie powiedzcie co o nim sadzicie.
Moze duzo rzeczy da sie zrobic prosciej. A licznik moze wykorzystam w
magnetofonie.
I nie zapominajcie, ze ja dopiero raczkuje :-))
Aaa asembler jest z dyskietki od DSM51
Program:

;INT0 - wejscie licznika
;stan licznika w banku 2
;R0 - tysiace
;R1 - setki
;R2 - dziesiatki
;R3 - jednostki
;dane licznika w mlodszej czesci rejestrow RX, starsza czesc #FH
;port P1 - wyjscie na wyswietlacz multiplex
;P1.0 - P1.3 odpowiednio BCD - DCBA do dekodera 7seg
;P1.4 - P1.7 wybor wyswietlacza tys - jedn H-wygasz, L-swieci
;P3.0 -"L"- zerowanie licznika
;******program glowny - obsluga wyswietlacza*****
LJMP START
ORG 0003H
LJMP 500H
ORG 20H
START:
SETB EA
SETB EX0
SETB RS1 ;bank2
LOOP:
SETB P3.0
MOV P1,RO ;tys na P1
CLR P1.4 ;1 cyfra wysw
ACALL WAIT_10MS ;wyswietlanie tys
MOV P1,R1 ;setki na P1
CLR P1.5
ACALL WAIT_10MS
MOV P1,R2
CLR P1.6
ACALL WAIT_10MS
MOV P1,R3
CLR P1.7
ACALL WAIT_10MS
JB P3.0,LOOP ;czy zerowac licznik
CLR EA
MOV R0,#F0H
MOV R1,#F0H
MOV R2,#F0H
MOV R3,#F0H
SETB EA
SJMP LOOP
; *******opoznienie*****
WAIT10_MS:
MOV R4,#20 ;20*0,5ms=10ms
LOOP1:
MOV A,#249
DJNZ ACC,$ ;0,5ms kwarc 12MHz
DJNZ R4,LOOP1
RET
; **liczenie***
ORG 500H
INC R3 ;zwieksz R3
CJNE R3,#FAH,KON ;sprawdz czy nie 10
MOV R3,#F0H ;jesli tak to zeruj
INC R2 ;zwieksz R2
CJNE R2,#FAH,KON ;sprawdz czy nie 10
MOV R2,#F0H ;itd
INC R1
CJNE R1,#FA,KON
MOV R1,#F0H
INC R0
CJNE R0,#FA,KON
MOV R0,#F0H
KON:
RETI

--
Pozdrawiam
MIC
sumator_at_nospam_.friko5.onet.pl



Poprzedni Następny
Wiadomość
spis treści
From: "Tomasz Gumny" <Tomasz.Gumny_at_nospam_ep.com.pl>
Subject: Re: Licznik
Date: Sun, 23 May 1999 15:33:12 +0200


Michał napisał(a) w wiadomości: ...
Witam wszystkich a szczegolnie specow od uP!

W ramach cwiczen napisalem programik na 89C2051.

Ma to byc licznik zliczajacy impulsy podane na INT0.
Mam problem gdyz moj asembler buntuje sie w zwiazku
z nazwami rejestrow R0, R1...
Powinien chyba je rozpoznawac tak jak rozpoznaje alumulator ACC
albo inne SFR?
[...]

;INT0 - wejscie licznika
;stan licznika w banku 2
;R0 - tysiace
;R1 - setki
;R2 - dziesiatki
;R3 - jednostki
;dane licznika w mlodszej czesci rejestrow RX, starsza czesc #FH
;port P1 - wyjscie na wyswietlacz multiplex
;P1.0 - P1.3 odpowiednio BCD - DCBA do dekodera 7seg
;P1.4 - P1.7 wybor wyswietlacza tys - jedn H-wygasz, L-swieci
;P3.0 -"L"- zerowanie licznika
;******program glowny - obsluga wyswietlacza*****
LJMP START
ORG 0003H
LJMP 500H
ORG 20H
START:
SETB EA
SETB EX0
SETB RS1 ;bank2
LOOP:
SETB P3.0

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
MOV P1,RO ;tys na P1
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
RO (litera) czy R0 (cyfra)?

TG



Poprzedni Następny
Wiadomość
spis treści
From: "Juliusz" <juliusz_at_nospam_multi-ip.com.pl>
Subject: Re: Licznik
Date: Sun, 23 May 1999 20:00:56 +0200


Teraz sie asembluje - zamienilem tam stale z dziesie z dziesietnych na hex -
to sobie zerknij - bo moga sie nie zgadzac. Cos masz z tymi ORG jeszce nie
tak - chyba nie czaisz do konca o co chodzi. I nie myl stalych dziesietnych
z HEX.

Juliusz


;INT0 - wejscie licznika
;stan licznika w banku 2
;R0 - tysiace
;R1 - setki
;R2 - dziesiatki
;R3 - jednostki
;dane licznika w mlodszej czesci rejestrow RX, starsza czesc #FH
;port P1 - wyjscie na wyswietlacz multiplex
;P1.0 - P1.3 odpowiednio BCD - DCBA do dekodera 7seg
;P1.4 - P1.7 wybor wyswietlacza tys - jedn H-wygasz, L-swieci
;P3.0 -"L"- zerowanie licznika
;******program glowny - obsluga wyswietlacza*****
LJMP START
ORG 0003H
LJMP 500H
ORG 20H
START:
SETB EA
SETB EX0
SETB RS1 ;bank2

LOOP: SETB P3.0
MOV P1,R0 ;tys na P1
CLR P1.4 ;1 cyfra wysw
ACALL WAIT_10MS ;wyswietlanie tys
MOV P1,R1 ;setki na P1
CLR P1.5
ACALL WAIT_10MS
MOV P1,R2
CLR P1.6
ACALL WAIT_10MS
MOV P1,R3
CLR P1.7
ACALL WAIT_10MS
JB P3.0,LOOP ;czy zerowac licznik
CLR EA
MOV R0,#0F0H
MOV R1,#0F0H
MOV R2,#0F0H
MOV R3,#0F0H
SETB EA
SJMP LOOP
; *******opoznienie*****
WAIT10_MS:
MOV R4,#020h ;20*0,5ms=10ms

LOOP1: MOV A,#0FFh
DJNZ ACC,$ ;0,5ms kwarc 12MHz
DJNZ R4,LOOP1
RET

; **liczenie***
ORG 500H
INC R3 ;zwieksz R3
CJNE R3,#0FAH,KON ;sprawdz czy nie 10
MOV R3,#0F0H ;jesli tak to zeruj
INC R2 ;zwieksz R2
CJNE R2,#0FAH,KON ;sprawdz czy nie 10
MOV R2,#0F0H ;itd
INC R1
CJNE R1,#0FAh,KON
MOV R1,#0F0H
INC R0
CJNE R0,#0FAh,KON
MOV R0,#0F0H

KON: RETI

WAIT_10ms:
ret
end