hex tastaturet dekoder problem

Z

zhi_yi

Guest
Hei, behage hjelpe meg

jeg skal lage en 4x4 hex-dekoder med AT89S2051, etter at jeg laget programmet, jeg prøvde den på AT89S52, og det er arbeid, men når jeg prøvde å skrive inn hex-filen til AT89S2051 og prøvde det på krets, gjorde det ikke fungere , jeg bruk asm språk, har jeg endret overskriften til $ MOD2051, er resultatet fortsatt noen feil oppstod mens jeg trykker på knappen 0 til 7, det er arbeid, men fra 8 til F feilene oppstod.behage hjelpe meg.

noen hjelper er meget verdsatt.

takk

<img src="http://www.edaboard.com/images/smiles/icon_smile.gif" alt="Smil" border="0" />
 
Niedawno media poinformowały o sklepie internetowym Euro-24.com.pl, który inkasuje pieniądze, ale nie realizuje zamówień. W serwisie Opineo.pl klienci publikowali pełne emocji wpisy, prześcigając się w ostrzeżeniach przed zakupami w tym sklepie. Sprawą zajęła się policja, ale strona internetowa Euro-24.com.pl wciąż jest aktywna.

Read more...
 
Kanskje du brukte noe som eksisterer i 89C52 og finnes ikke i 89C2051 ..Etter at alle 89C2051 er redusert versjon av 51 - for ikke å glemme 52 ..

Kan du legge inn koden?

Hilsen,
IanP

 
selvsagt, her er koden, kan du hjelpe meg der er feil ..mens jeg trykker på tastaturet 0 til 7, er det arbeid med ingen feil, men opp til 7, utdataene alltid 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
;------------------------------- Vent til KEY LANSERT -------------- -----------------------------
MAIN1:
MOV P1, # 0F0H
MOV A, P1
ANL A, # 11110000B
CJNE A, 11110000B, # MAIN1
;------------------------------- Vent til tasten nede -------------- ------------------------------
LOOP1:
ACALL DELAY
MOV A, P1
ANL A, # 11110000B
CJNE A, 11110000B, # CHECK_BOUNCE
AJMP LOOP1
CHECK_BOUNCE:
ACALL DELAY
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 rad 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 FOUND
INC DPTR
AJMP FIND_CLMN
;------------------------------------------------- -----------------------------------------------
Funnet:
MOV A, # 00t
MOVC A, @ A DPTR
MOV P3, A
; MOV P0, A
CLR ALERT
ACALL DELAY
ACALL DELAY
ACALL DELAY
SETB ALERT
LJMP START
;------------------------------------- DELAY ----------- -------------------------------------------
FORSINKELSE:
MOV R0, # 36
DELAY1:
MOV R1, # 0FFH
DJNZ R1, $
DJNZ R0, DELAY1
RET
;------------------------------------ Definere data ----------- --------------------------------------

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

END

 
Vanligvis trenger du ikke ha problem med programvaren ..
Som du har sagt, med 89C52 det fungerte fint ..
Et sted i koden du bruker P3 - Jeg tror ikke du kan bruke P3 som en port ..
I stedet for å bruke MOV P3, A prøve å skifte bits (via C-flagget) ACC.0 til P3.0, ACC.1 til P3.1 og så videre ..

Hilsen,
IanP

 
takk,
Jeg har forandret "p3 mov, en" til disse koden ved hjelp bære flagget:

Funnet:
MOV A, # 00t
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 DELAY
ACALL DELAY
ACALL DELAY
SETB ALERT
LJMP START

men resultatet er fortsatt den samme, det fungere fint 0 til 7, men fra 8 til F er det noen feil oppstod.er det grunn av pinners port 1.1 og 1.0 kan brukes som analog komparator, og det påvirkes rad min skanning krets?hvordan du bruker port 1.1 (AIN1) og port 1.0 (AIN0) som digital inngang / utgang?

mange takk

 
Det ser ut som det ikke er software relatert problem ..
Så kan du prøve denne:
Port 1 er en 8-bits toveis I / O-port ..
Port pins P1.2 å P1.7 gi interne pull-ups ..
..

P1.0 og P1.1 krever eksterne pull-ups

..
Har du dem?
Hvis du ikke gjør det, kobler 4.7kΩ - 10kΩ pull-ups og prøv igjen ..

Hilsen,
IanP

 
Jeg ga trekker opp motstand til disse porten, og krets fungerer godt,

mange takk

<img src="http://www.edaboard.com/images/smiles/icon_smile.gif" alt="Smil" border="0" />--- Bless You

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

Welcome to EDABoard.com

Sponsor

Back
Top