hex tombol decoder masalah

Z

zhi_yi

Guest
Hi there, please help me

i dimaksudkan untuk membuat 4x4 hex decoder menggunakan at89s2051, setelah saya membuat program, i tried it on at89s52, dan pekerjaan, tetapi ketika saya mencoba untuk menulis hex file ke at89s2051 dan mencoba pada sirkuit, tidak bekerja , i ASM menggunakan bahasa,
saya telah berubah menjadi kepala $ MOD2051, hasilnya masih terjadi beberapa kesalahan, sedangkan saya tekan tombol 0 sampai 7, itu bekerja, tetapi dari 8 sampai M kesalahan terjadi.please help me.

membantu apapun sangat dihargai.

terima kasih

<img src="http://www.edaboard.com/images/smiles/icon_smile.gif" alt="Senyum" border="0" />
 
Mungkin Anda menggunakan sesuatu yang ada dalam 89C52 dan tidak ada dalam 89C2051 ..Setelah semua 89C2051 adalah berkurangnya versi 51 - belum lagi 52 ..

Anda dapat mengirimkan kode?

Salam,
IanP

 
Tentu saja, di sini adalah kode, please help me ada yang salah ..pada saat saya tekan tombol 0 sampai 7, itu bekerja sama dengan tidak ada kesalahan, namun sampai 7, hasilnya selalu 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
;------------------------------- Wait till KEY Rilis -------------- -----------------------------
MAIN1:
MOV P1, # 0F0H
MOV A, P1
ANL A, # 11110000B
CJNE A, # 11110000B, MAIN1
;------------------------------- Wait till KEY ditekan -------------- ------------------------------
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
;------------------------------------- Pindai 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 FOUND
INC DPTR
AJMP FIND_CLMN
;------------------------------------------------- -----------------------------------------------
FOUND:
MOV A, # 00H
MOVC A, @ A DPTR
MOV P3, A
; MOV P0, A
CLR ALERT
ACALL Delay
ACALL Delay
ACALL Delay
SETB ALERT
LJMP START
;------------------------------------- Delay ----------- -------------------------------------------
Delay:
MOV R0, # 36
DELAY1:
MOV R1, # 0FFH
DJNZ R1, $
DJNZ R0, DELAY1
Ret
;------------------------------------ Define DATA ----------- --------------------------------------

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

 
Secara umum, Anda tidak ada masalah dengan perangkat lunak ..
Seperti yang mengatakan, dengan 89C52 it worked fine ..
Somewhere di kode Anda menggunakan P3 - I
don't think you can use P3 sebagai PORT ..
Daripada menggunakan MOV P3, A mencoba untuk beralih bit (melalui C-bendera) ACC.0 ke P3.0, ACC.1 ke P3.1 dan seterusnya ..

Salam,
IanP

 
terima kasih,
i mengubah "mov p3, yang menggunakan kode ini untuk membawa bendera:

FOUND:
MOV A, # 00H
MOVC A, @ A DPTR

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

Asdf:

CLR ALERT
ACALL Delay
ACALL Delay
ACALL Delay
SETB ALERT
LJMP START

tetapi hasilnya masih sama,
maka pekerjaan denda 0-7, tetapi dari 8 sampai M ada beberapa kesalahan terjadi.itu karena port pin 1,1 dan 1,0 bisa digunakan sebagai analog comparator, dan terpengaruh ke Kontak baris pemindaian sirkuit?bagaimana menggunakan port 1.1 (AIN1) dan port 1.0 (AIN0) sebagai digital input / output?

terima kasih banyak

 
Sepertinya ini bukan masalah yang berhubungan dengan perangkat lunak ..
Jadi, mari kita coba ini:
Port 1 adalah 8-bit bi-directional I / O port ..
Port pin P1.2 ke P1.7 menyediakan internal pull-up ..
..

P1.0 dan P1.1 memerlukan eksternal pull-up

..
Do you have them?
Jika tidak, koneksi 4.7kΩ - 10kΩ pull-up dan coba lagi ..

Salam,
IanP

 
i memberi resistor pull up ke pelabuhan ini, dan sirkuit bekerja dengan baik,

terima kasih banyak

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

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

Welcome to EDABoard.com

Sponsor

Back
Top