| ??? 09/29/05 14:40 Modified: 09/29/05 14:43 Read: times Msg Score: +1 +1 Good Answer/Helpful |
#101724 - Compiles & Lined OK with CAS.EXE Responding to: ???'s previous message |
Hello Pritam,
Below is your code and hex file compiled with CAS.EXE (a public domain 8051 compiler program). Regards, Charles Bannister
;; hi all,
;; I hav written one code for interfacing 4X4 matrix keypad which is as follows
;; Keyboard subroutine. This program sends the ASCII code
;; for pressed key to P0
;; P1.0-P1.3 connected to rows, P2.0-P2.3 connected to columns
;;
;; After assembling the code i m getting erros as "Undefined opcode"
;; for the 4-lines of look up table. I m not able to correct my
;; mistakes. so plz can anybody help me out to correct these errors.
;; Also tel me what mistake is been done exactly.
;; Waiting for reply.
;;
;; Pritam
ORG 0x00
MOV P2,#0FFH ;;make P2 an input port
K1: MOV P1,#0 ;;ground all rows at once
MOV A,P2 ;;read all col. (ensure all keys open)
ANL A,00001111B ;;masked unused bits
CJNE A,#00001111B,K1 ;;check til all keys released
K2: ACALL TIME
ACALL DELAY ;;call 20 msec delay
MOV A,P2 ;;see if any key is pressed
ANL A,#00001111B ;;mask unused bits
CJNE A,#00001111B,OVER ;;key pressed, await closure
SJMP K2 ;;check il key pressed
OVER: ACALL TIME
ACALL DELAY ;;wait 20 msec debounce time
MOV A,P2 ;;check key closure
ANL A,#00001111B ;;mask unused bits
CJNE A,#00001111B,OVER1;;key pressed, find row
SJMP K2 ;;if none, keep polling
OVER1: MOV P1,#11111110B ;;ground row 0
MOV A,P2 ;;read all columns
ANL A,#00001111B ;;mask unused bits
CJNE A,#00001111B,ROW_0;;key row 0, find the col.
MOV P1,#11111101B ;;ground row 1
MOV A,P2 ;;read all columns
ANL A,#00001111B ;;mask unused bits
CJNE A,#00001111B,ROW_1;;keyrow 1, find the col.
MOV P1,#11111011B ;;ground row 2
MOV A,P2 ;;read all columns
ANL A,#00001111B ;;mask unused bits
CJNE A,#00001111B,ROW_2;;key row 2, find the col.
MOV P1,#11110111B ;;ground row 3
MOV A,P2 ;;read all columns
ANL A,#00001111B ;;mask unused bits
CJNE A,#00001111B,ROW_3;;keyrow 3, find the col.
LJMP K2 ;;if none, false input, repeat
ROW_0: MOV DPTR,#KCODE0 ;;set DPTR=start of row 0
SJMP FIND ;;find col. key belongs to
ROW_1: MOV DPTR,#KCODE1 ;;set DPTR=start of row 1
SJMP FIND ;;find col. key belongs to
ROW_2: MOV DPTR,#KCODE2 ;;set DPTR=start of row 2
SJMP FIND ;;find col. key belongs to
ROW_3: MOV DPTR,#KCODE3 ;;set DPTR=start of row 3
FIND: RRC A ;;see if any CY bit low
JNC MATCH ;;if zero, get the ASCII code
INC DPTR ;;point to next col. address
SJMP FIND ;;keep searching
MATCH: CLR A ;;set A=0 (match is found)
MOVC A,@A+DPTR ;;get ASCII code from table
MOV P0,A ;;display pressed key
LJMP K1
TIME: MOV TMOD,#01
MOV TL0,#0FEH
MOV TH0,#0B7H
RET
DELAY: SETB TR0
AGAIN: JNB TF0,AGAIN
CLR TR0
CLR TF0
RET
;;ASCII LOOK-UP TABLE FOR EACH ROW
ORG 0x3000
KCODE0: DB 'A','9','8','7' ;;ROW 0
KCODE1: DB 'B','6','5','4' ;;ROW 1
KCODE2: DB 'C','3','2','1' ;;ROW 2
KCODE3: DB 'D','#','0','*' ;;ROW 3
END
:1000000075A0FF759000E5A0550FB40FF6117111A2
:100010007BE5A0540FB40F0280F31171117BE5A0B2
:10002000540FB40F0280E67590FEE5A0540FB40F94
:10003000217590FDE5A0540FB40F1C7590FBE5A051
:10004000540FB40F177590F7E5A0540FB40F1202B8
:10005000000D903000800D903004800890300880B2
:100060000390300C135003A380FAE493F580020050
:1000700003758901758AFE758CB722D28C308DFD8F
:05008000C28CC28D22BC
:103000004139383742363534433332314423302A5C
:00000001FF
|
| Topic | Author | Date |
| Help for 4X4 matrix keypad interface | 01/01/70 00:00 | |
| What assembler are you using? | 01/01/70 00:00 | |
| it would be impossible to identify the e | 01/01/70 00:00 | |
| What's the last address? | 01/01/70 00:00 | |
Compiles & Lined OK with CAS.EXE | 01/01/70 00:00 |



