hex klávesnice dekodér problém

Z

zhi_yi

Guest
Ahoj, prosím pomozte mi

i určené k provedení 4x4 hex dekodér pomocí at89s2051 poté,
co jsem vytvořil program, Zkoušel jsem to na at89s52, a je to práce, ale když jsem se snažil psát hex soubor do at89s2051 a snažil se na okruhu, to nefunguje , i asm používání jazyka,
jsem změnil hlavičku do $ MOD2051, výsledek je stále do jisté míry chyba nastala, a zároveň i stisknutím tlačítka 0 až 7, je to práce, ale od 8 do F pochybení došlo.prosím, pomozte mi.

žádné pomáhá velmi ocenila.

děkuji ti

<img src="http://www.edaboard.com/images/smiles/icon_smile.gif" alt="Úsměv" border="0" />
 
Možná jste něco, co existuje v 89C52 a neexistuje v 89C2051 ..Po všech 89C2051 je snížená verze 51 - nemluvě o 52 ..

Mohli byste po vašem kódu?

Pozdravy,
IanP

 
Samozřejmě, zde je kód, prosím, pomozte mi Kde je chyba ..a zároveň i stisknutím tlačítka 0 až 7, je to práce bez chyb, ale až 7, výstup vždy 1010

$ MOD2051
$ OBJECT

ROW0 EQU P1.0
ROW1 EQU P1.1
ROW2 EQU P1.2
ROW3 EQU P1.3

ALERT EQU P3.7

ORG 00h
AJMP START

START:
SETB ALERT
;------------------------------- Počkej, až KLÍčOVÉ propuštěn -------------- -----------------------------
MAIN1:
MOV P1, # 0F0H
MOV A, P1
ANL A, # 11110000B
CJNE A, # 11110000B, MAIN1
;------------------------------- Počkej, až KLÍčOVÉ Lisovaný -------------- ------------------------------
LOOP1:
ACALL PRODLENÍ
MOV A, P1
ANL A, # 11110000B
CJNE A, # 11110000B, CHECK_BOUNCE
AJMP LOOP1
CHECK_BOUNCE:
ACALL PRODLENÍ
MOV A, P1
ANL A, # 11110000B
CJNE A, # 11110000B, CHECK_BARIS
AJMP LOOP1
;------------------------------------- SCAN Baris ---------- ---------------------------------------
CHECK_BARIS:
CLR ROW0
SETB ROW1
SETB ROW2
SETB ROW3

MOV A, P1
ANL A, # 11111110B
CJNE A, # 11111110B, BARIS_0

;------------------------------------------------- -----------------------------------------------
SETB ROW0
CLR ROW1
SETB ROW2
SETB ROW3

MOV A, P1
ANL A, # 11111101B
CJNE A, # 11111101B, BARIS_1; CEK ROW 1
;------------------------------------------------- -----------------------------------------------
SETB ROW0
SETB ROW1
CLR ROW2
SETB ROW3

MOV A, P1
ANL A, # 11111011B
CJNE A, # 11111011B, BARIS_2; CEK ROW 2
;------------------------------------------------- -----------------------------------------------
SETB ROW0
SETB ROW1
SETB ROW2
CLR ROW3

MOV A, P1
ANL A, # 11110111B
CJNE A, # 11110111B, BARIS_3; CEK ROW 3
AJMP LOOP1
;------------------------------------------------- -----------------------------------------------
BARIS_0:
MOV DPTR, # ISI_ROW0
AJMP FIND_CLMN
BARIS_1:
MOV DPTR, # ISI_ROW1
AJMP FIND_CLMN
BARIS_2:
MOV DPTR, # ISI_ROW2
AJMP FIND_CLMN
BARIS_3:
MOV DPTR, # ISI_ROW3
AJMP FIND_CLMN
;------------------------------------------------- -----------------------------------------------

FIND_CLMN:
RLC A
JNC ZJIŠTĚNO
INC DPTR
AJMP FIND_CLMN
;------------------------------------------------- -----------------------------------------------
Nalezeno:
MOV A, # 00h
MOVC A, @ A DPTR
MOV P3, A
; MOV P0, A
CLR ALERT
ACALL PRODLENÍ
ACALL PRODLENÍ
ACALL PRODLENÍ
SETB ALERT
LJMP START
;------------------------------------- PRODLENÍ ----------- -------------------------------------------
Odklad:
MOV R0, # 36
DELAY1:
MOV R1, # 0FFH
DJNZ R1, $
DJNZ R0, DELAY1
RET
;------------------------------------ VYMEZENÍ ÚDAJŮ ----------- --------------------------------------

ORG 350H
ISI_ROW0:
DB 0H, 1H, 2H, 3H
ISI_ROW1:
DB 4H, 5H, 6H, 7H
ISI_ROW2:
DB 8H, 9H, 0Ah, 0BH
ISI_ROW3:
DB 0CH, 0Dh, 0EH, 0FH

END

 
Obecně lze říci,
že nemáte problém s software ..
Jak jste řekl, že pracoval s 89C52 pokuty ..
Někde v kódu používat P3 - nemyslím si, že můžete použít P3 jako PORT ..
Místo používání MOV P3, A zkuste posun bitů (přes C-vlajka) ACC.0 na P3.0, ACC.1 na P3.1 a tak dále ..

Pozdravy,
IanP

 
děkuji ti,
i změnil "mov p3, a" do těchto kódů pomocí carry flag:

Nalezeno:
MOV A, # 00h
MOVC A, @ A DPTR

BIT3A:
RRC A
JNC BIT3
SETB P3.0
JMP BIT2A
BIT3:
CLR P3.0
BIT2A:
RRC A
JNC BIT2
SETB P3.1
JMP BIT1A
BIT2:
CLR P3.1
BIT1A:
RRC A
JNC BIT1
SETB P3.2
JMP BIT0A
BIT1:
CLR P3.2
BIT0A:
RRC A
JNC BIT0
SETB P3.3
JMP ASDF
BIT0:
CLR P3.3

ASDF:

CLR ALERT
ACALL PRODLENÍ
ACALL PRODLENÍ
ACALL PRODLENÍ
SETB ALERT
LJMP START

ale výsledek je stále stejný, je to práce pokutu od 0 do 7, ale od 8 do F jsou některé chyby, ke kterým došlo.je to z důvodu pin portu 1,1 a 1,0 by mohlo být použití jako analogový komparátor, a je ovlivněn na můj řádek skenování okruhu?jak používat přístavu 1,1 (AIN1) a port 1.0 (AIN0) jako digitální vstupy / výstupy?

mockrát děkuji

 
Vypadá to, že to není problém, související software ..
So,
lets zkuste toto:
Port 1 je 8-bit bi-směrová I / O portu ..
Port pinů P1.2 až P1.7 stanovit vnitřní síla-upy ..
..

P1.0 a P1.1 vyžaduje vnější síla-upy

..
Máte je?
Pokud nemáte, připojte 4.7kΩ - 10kΩ Pull-up a zkuste to znovu ..

Pozdravy,
IanP

 
i dal vytáhnout rezistor těchto přístavů, a obvod funguje dobře,

mockrát děkuji

<img src="http://www.edaboard.com/images/smiles/icon_smile.gif" alt="Úsměv" border="0" />--- Vám žehnej

<img src="http://www.edaboard.com/images/smiles/icon_smile.gif" alt="Úsměv" border="0" />
 

Welcome to EDABoard.com

Sponsor

Back
Top