KEYBOARD INTERFACE
1
CONTENTS
PAGE NO
1.0 Introduction 2
2.0 Description of the Circuit 2
3.0 Installation 3
4.0 Demonstration Examples 4
4.1 Demonstration Program for MPS 85-3 Trainer 5
4.2 Demonstration Program for ESA 85-2 Trainer 6
4.3 Demonstration Program for ESA-80 Trainer 8
4.4 Demonstration Program for ESA-65 Trainer 10
4.5 Demonstration Program for ESA-31 Trainer 12
4.6 Demonstration Program for ESA-68K Trainer 13
4.7 Demonstration Program for ESA-196 Trainer 15
4.8 Demonstration Program for ESA 86/88-2 Trainer 17
4.9 Demonstration Program for ESA 68K-2 Trainer 19
4.10 Demonstration Program for ESA-51 Trainer 21
4.11 Demonstration Program for ESA 86/88-3 Trainer 24
4.12 Demonstration Program for ESA-51E Trainer 26
4.13 Demonstration Program for ESA 86/88E Trainer 29
5.0 Exercises 31
Appendix A : Component Layout Diagram
Appendix B : Schematic Diagram
KEYBOARD INTERFACE
2
CALCULATOR KEYPAD INTERFACE
1.0 INTRODUCTION
Electro Systems Associates Private Limited (ESA) manufactures trainers for most of the popular
microprocessors viz 8085, Z-80, 6502, 8031, 68000 and 8086/8088 . ESA offers a variety of
modules which can be interfaced to these trainers. These modules can be effectively used for
teaching/training in the laboratories.
In many microprocessor based systems, calculator keypad is used as an input device. A calculator
keypad can be interfaced to a microprocessor using a dedicated peripheral controller like INTEL
8279A Keyboard/Display controller. In this case, the controller can handle the interface problems
like key debounce, 2-key lock-out, N-key roll-over etc,. Further, such controllers can directly
encode the position of the depressed key. In an alternative approach, the calculator keypad interface
is passive and software is used for encoding the key positions and for handling problems like key
debounce, roll-over etc.
The present interface module provides a calculator style calculator keypad consisting of the keys 0
to 9, + ,-, x, =, %, ., C, CE and two spare keys. These 20 keys are arranged in a 3x8 matrix (the
third row has only 4 keys). The row lines can be driven through port C (Bits PC2, PC1 and PC0)
and the status of column lines can be read through port A. This interface allows the user to study
a number of techniques generally used in calculator keypad interfacing. User can write programs
for software debouncing of key closures, two-key lock out, keyboard encoding and parsing etc
to gain a good understanding of keyboard interface. Further, user can become familiar with the
arithmetic group of processor instructions by implementing the calculator functions like
Addition, Subtraction, Multiplication, Division, Percentage etc.
2.0 DESCRIPTION OF THE CIRCUIT
Please refer to the schematic of this interface presented in Appendix B.
It can be seen that the 20 keys are arranged in a 3x8 matrix fashion. The row lines are driven by
PC0, PC1 and PC2. The column lines are read through port A. When no key is pressed, all the
return lines are low. The rows are driven high one after another in sequence. When a row is
driven high, pressing a key in that row causes the corresponding return line to be read as high.
Then it scan for the column for which the key is depressed. The row and column positions can then
be used to encode the key. As the scanning of the rows occurs at very high speed compared to
human reaction times, there is no danger of missing a key depression. Further issues like
debounce etc have to be handled through appropriate software routines.
The sample program presented in the next section illustrates some of these techniques. User can
develop the software for other functions (for eg: calculator functions) and test the results.
KEYBOARD INTERFACE
3
3.0 INSTALLATION
The interface is housed in a plastic enclosure which has a locking mechanism. To open the cover,
push the locking mechanism with the finger and lift the cover to open.
The interface module has a 26-pin connector at one edge of the card. This is used for connecting the
interface to the trainer with a flat cable connector set. The +5V DC power required by this
interface is drawn from the trainer via the flat cable connector set.
Table 3-1 shows the connector on various trainers for which the interface can be connected. Some
trainers have two connectors and either may be used for connecting the interface to the trainer.
The demonstration programs presented in this manual assumes that the interface is connected to
connectors shown in column A. If the connector shown in column B is used, then user has to
change the port addresses appropriately. User may refer to the component layout diagrams of
respective ESA trainers to locate the connectors mentioned here.
TABLE-3.1
MICROPROCESSOR
TRAINER
A B
MPS85-3 J2 J1
ESA85-2 J2 J1
ESA-80 J2 J1
ESA-65 P4
ESA-68K P3 P4
ESA 68K-2 J2 J1
ESA 68-2 J1 J6
ESA 196 J1 J2
ESA-31 J2 J1
ESA-51 J10 J7
ESA-51E J5 J3
ESA-86/88-2 J4 J5
ESA-86/88-3 J8 J9
ESA-86/88E J4 J6
KEYBOARD INTERFACE
4
4.0 DEMONSTRATION EXAMPLES
A sample program to illustrate the operation of this interface is presented below:
This program encodes the key position as follows:
Key code = D7 D6 D5 D4 D3 D2 D1 D0
where
D7 = D6 = 0
D5 D4 D3 = row number (000 or 001 or 010)
D2 D1 D0 = column number (000 to 111)
Examples:
a) Key labeled 7 is in row 0 and column 7
so D5 D4 D3 = 000 and
D2 D1 D0 = 111
Code = 00 000 111 = 07H
b) Key labeled X is in row 1 and column 5
so D5 D4 D3 = 001 and
D2 D1 D0 = 101
Code = 00 001 101 = 0DH
c) Key labeled CE is in row2 and column 1
so D5 D4 D3 = 010 and
D2 D1 D0 = 001
code = 00 010 001 = 11H
The encoding of the other keys can be worked out in a similar way.
The program is written as an infinite loop. So, user must press the RESET key to allow the
monitor program to regain control.
KEYBOARD INTERFACE
5
4.1 DEMONSTRATION PROGRAM FOR MPS 85-3 TRAINER
; Assume the interface is connected over J2 of the trainer.
; The trainer can be in KEYBOARD MODE or SERIAL MODE.
UPDDT EQU 044CH
DISPM EQU 0B5BH
DISLOC EQU 8FF1H
NMOUT EQU 0C41H
ADDRESS OPCODE LABLE MNEMONIC COMMENTS
8C00 3E 92 MVI A,92H ;Configure 8255 for
;mode 0
8C02 D3 43 OUT 43H ;Port A as I/P,
;Port C as O/P.
8C04 21 5B 8C LXI H,MES ;Display the message
8C07 CD 5B 0B CALL DISPM ;for the serial mode
8C0A DB 50 BACK: IN 50H ;Read DIP switch
8C0C E6 08 ANI 08H
8C0E CA 1E 8C JZ SRL
8011 CD 30 8C CALL KESCN ;Wait for key enclose
8C14 79 MOV A,C
8C15 32 F1 8F STA DISLOC
8C18 CD 4C 04 CALL UPDDT ;Display key code
;in data field
8C1B C3 0A 8C JMP BACK ;Repeat the same
8C1E CD 30 8C SRL: CALL KESCN
8C21 79 MOV A,C
8C22 F5 PUSH PSW ;Push the scanned value
8C23 21 74 8C LXI H,DEL ;Delete old values
8C26 CD 5B 0B CALL DISPM
8C29 F1 POP PSW ;Get the scanned value
8C2A CD 41 0C CALL NMOUT ;Display the scanned
8C2D C3 0A 8C JMP BACK ;value.
8C30 16 02 KESCN: MVI D,02H ;3 Scan rows
8C32 0E 10 MVI C,10H ;keycode
8C34 06 04 MVI B,04H ;Scan lines high
8C36 78 NXTGRP: MOV A,B ;Make one of the
8C37 D3 42 OUT 42H ;Scan lines high
8C39 0F RRC
8C3A 47 MOV B,A
8C3B DB 40 IN 40H
8C3D FE 00 CPI 00H ;Any key pressed?
8C3F C2 50 8C JNZ NXTKEY ;Yes, Check for the
KEYBOARD INTERFACE
6
;corresponding key
8C42 79 MOV A,C ;No, Then make the
8C43 D6 08 SUI 08H ;next scan lines high
8C45 4F MOV C,A
8C46 15 DCR D
8C47 7A MOV A,D
8C48 FE FF CPI 0FFH ;Check again
8C4A C2 36 8C JNZ NXTGRP
8C4D C3 30 8C JMP KESCN ;Repeat the same
8C50 0F NXTKEY: RRC
8C51 D8 RC ;Key code is ok, return
8C52 F5 PUSH PSW
8C53 79 MOV A,C
8C54 C6 01 ADI 01H ;If not, Try next
8C56 4F MOV C,A ;keycode.
8C57 F1 POP PSW
8C58 C3 50 8C JMP NXTKEY
8C5B 0A 0D 20 50 52 MES DB 0AH,0DH,
8C60 45 53 53 45 44 ' PRESSED VALUE IS = ',00
8C65 20 56 41 4C 55
8C6A 45 20 49 53 20
8C6F 3D 20 20 20 00
8C74 08 08 00 DEL DB 08H,08H,00
4.2 DEMONSTRATION PROGRAM FOR ESA 85-2 TRAINER
; Assume the interface is connected over J2 of the trainer.
; The trainer can be in KEYBOARD MODE or SERIAL MODE.
UPDDT EQU 0578H
DISPM EQU 0B04H
DISLOC EQU FE75H
NMOUT EQU 0C11H
ADDRESS OPCODE LABLE MNEMONIC COMMENTS
8000 3E 92 MVI A,92H ;Configure 8255 for
;mode 0
8002 D3 43 OUT 43H ;Port A as I/P,
;Port C as O/P.
8004 21 5B 80 LXI H,MES ;Display the message
8007 CD 04 0B CALL DISPM ;for the serial mode
800A DB 70 BACK: IN 70H ;Read DIP switch
KEYBOARD INTERFACE
7
800C E6 08 ANI 08H
800E CA 1E 80 JZ SRL
8011 CD 30 80 CALL KESCN ;Wait for key enclose
8014 79 MOV A,C
8015 32 75 FE STA DISLOC
8018 CD 78 05 CALL UPDDT ;Display key code
;in data field
801B C3 0A 80 JMP BACK ;Repeat for ever
801E CD 30 80 SRL: CALL KESCN
8021 79 MOV A,C
8022 F5 PUSH PSW ;Push the scanned value
8023 21 74 80 LXI H,DEL ;Delete old values
8026 CD 04 0B CALL DISPM
8029 F1 POP PSW ;Get the scanned value
802A CD 11 0C CALL NMOUT ;Display the scanned
802D C3 0A 80 JMP BACK ;value.
8030 16 02 KESCN: MVI D,02H ;3 Scan rows
8032 0E 10 MVI C,10H ;keycode
8034 06 04 MVI B,04H ;Scan line high
8036 78 NXTGRP: MOV A,B ;Make one of the
8037 D3 42 OUT 42H ;scan lines high
8039 0F RRC
803A 47 MOV B,A
803B DB 40 IN 40H
803D FE 00 CPI 00H ;Any key pressed?
803F C2 50 80 JNZ NXTKEY ;Yes, Check for the
;corresponding key
8042 79 MOV A,C ;No, Then make the
8043 D6 08 SUI 08H ;next scan line high
8045 4F MOV C,A
8046 15 DCR D
8047 7A MOV A,D
8048 FE FF CPI 0FFH ;Check again
804A C2 36 80 JNZ NXTGRP
804D C3 30 80 JMP KESCN ;Repeat the same
8050 0F NXTKEY: RRC
8051 D8 RC ;Key code is ok, return
8052 F5 PUSH PSW
8053 79 MOV A,C
8054 C6 01 ADI 01H ;If not, Try next
8056 4F MOV C,A ;keycode.
8057 F1 POP PSW
8058 C3 50 80 JMP NXTKEY
805B 0A 0D 20 50 52 MES DB 0AH,0DH,
KEYBOARD INTERFACE
8
8060 45 53 53 45 44 ' PRESSED VALUE IS = ',00
8065 20 56 41 4C 55
806A 45 20 49 53 20
806F 3D 20 20 20 00
8074 08 08 00 DEL DB 08H,08H,00
4.3 DEMONSTRATION PROGRAM FOR ESA-80 TRAINER
; Assume the interface is connected over J2 of the trainer.
; The trainer can be KEYBOARD MODE or SERIAL MODE.
SCAN1 EQU 0624H
HEX7SG EQU 0678H
DISPM EQU 0B5BH
BYTE0 EQU 8100H
OUTBF EQU 8103H
NMOUT EQU 0C41H
ADDRESS OPCODE LABLE MNEMONIC COMMENTS
8000 3E 92 LD A,92H ;Configure 8255
;for mode 0
8002 D3 43 OUT (43H),A ;Port A as I/P
;Port C as O/P.
8004 21 6C 80 LD HL,MES ;Display the message
8007 CD 5B 0B CALL DISPM ;for the serial mode
800A DB 50 BACK: IN A,(50) ;Read DIP switch
800C E6 08 AND 08H
800E 20 12 JR NZ,KBDISPM
8010 CD 42 80 CALL KEYSCAN ;Get the keycode
8013 79 LD A,C
8014 F5 PUSH AF
8015 21 82 80 LD HL,DEL ;Delete old
8080 CD 5B 0B CALL DISPM ;value
801B F1 POP AF
801C CD 41 0C CALL NMOUT ;Display current
801F C3 0A 80 JP BACK ;value of the
;key pressed
8022 CD 42 80 KBDISPM: CALL KEYSCAN ;Get the keycode
8025 79 LD A,C
8026 32 00 81 LD (8100H),A ;Store it in
;location 8100H
8029 11 00 81 LD DE,BYTE0 ;Initialise DE
802C 21 03 81 LD HL,OUTBF ;pair 8100H & HL
KEYBOARD INTERFACE
9
;pair to 8103H.
802F 06 03 LD B,03H ;Count for DATA
8031 1A LOOP1: LD A,(DE) ;ADDRESS field.
8032 CD 78 06 CALL HEX7SG ;Display routine
8035 13 INC DE ;to display the
8036 10 F9 DJNZ LOOP1 ;value of
8038 DD 21 03 81 LD IX,OUTBF ;key pressed.
803C CD 24 06 CALL SCAN1
803F C3 0A 80 JP BACK
8042 16 02 KEYSCN: LD D,02H ;3 Scan rows
8044 0E 10 LD C,10H ;keycode
8046 06 04 LD B,04H ;Scan line high
8048 78 NXTGRP: LD A,B ;Make one of the
8049 D3 42 OUT (42H),A ;scan lines high.
804B 0F RRCA
804C 47 LD B,A
804D DB 40 IN A,(40H)
804F FE 00 CP 00H ;Any key pressed?
8051 20 0F JR NZ,NXTKEY ;Yes, Check for the
;corresponding key
8053 79 LD A,C ;No, Then make the
8054 D6 08 SUB 08H ;next scan line
8056 4F LD C,A ;high
8057 15 DEC D
8058 7A LD A,D
8059 FE FF CP 0FFH ;Check again
805B 20 EB JR NZ,NXTGRP
805D 0E FF LD C,0FFH
805F C3 42 80 JP KEYSCAN ;Repeat the same
8062 0F NXTKEY: RRCA ;Keycode is OK
8063 D8 RET C ;return
8064 F5 PUSH AF
8065 79 LD A,C
8066 C6 01 ADD A,01H ;If not, Try next
8068 4F LD C,A ;keycode.
8069 F1 POP AF
806A 18 F6 JR NXTKEY
806C 0A 0D 4B 45 59 MES: DB 0AH,0DH,
8071 20 50 52 45 53 'KEY PRESSED IS = ',00H
8076 53 45 44 20 49
807B 53 20 3D 20 20
8080 20 00
8082 08 08 00 DEL: DB 08H,08H,00H
KEYBOARD INTERFACE
10
4.4 DEMONSTRATION PROGRAM FOR ESA-65 TRAINER
; Assume the interface is connected over P4 of the trainer.
; The trainer can be in KEYBOARD MODE or SERIAL MODE.
CTRLPORT EQU A043H
UPDDT EQU FE59H
PORT C EQU A042H
PORT A EQU A040H
NMOUT EQU E015H
CRLF EQU E018H
DISPM EQU E039H
ADDRESS OPCODE LABLE MNEMONIC COMMENTS
0200 ORG 200H
0200 A9 92 LDA #$92H ;Configure 8255 in
;mode 0. port A,B
0202 8D 43 A0 STA CTRLPORT ;as I/P. & port C
;as O/P.
0205 AD 80 A4 BACK: LDA A480H ;Check for KB or
0208 10 0E BPL DISPSER ;serial mode.
020A 20 3F 02 JSR KEYDEP ;Display in
020D AD 50 10 LDA 1050H ;keyboard mode.
0210 A2 00 LDX #$00H
0212 20 59 FE JSR UPDDT ;Display the keycode
0215 4C 05 02 JMP BACK ;Repeat the
0218 A0 00 DISPSER: LDY #00H ;sequence.
021A B9 76 02 DSER: LDA MES,Y ;Display the value
021D 48 PHA ;of key pressed in
021E 20 39 E0 JSR DISPM ;the serial mode.
0221 C8 INY
0222 68 PLA
0223 C9 00 CMP #$00H
0225 D0 F3 BNE DSER
0227 20 3F 02 AGAIN: JSR KEYDEP ;Get the key
022A A9 08 LDA #08HH ;pressed value.
022C 20 39 E0 JSR 0E039H
022F A9 08 LDA #08H
0231 20 39 E0 JSR 0E039H
0234 AD 50 10 LDA 1050H
0237 20 15 E0 JSR NMOUT
023A EA NOP
023B EA NOP
023C 4C 27 02 JMP AGAIN
KEYBOARD INTERFACE
11
023F A2 03 KEYDEP: LDX #$03H ;No of scan lines
0241 A0 04 LDY #$04H
0243 A9 10 LDA #$10H ;Base code.
0245 8D 50 10 STA 1050H
0248 8C 42 A0 NXTGROUP: STY PORT C ;Make scan line
024B 98 TYA ;high
024C 4A LSR A
024D A8 TAY ;Next scan line
024E AD 40 A0 LDA PORT A ;Sample return
0251 C9 00 CMP #$00H ;lines.
0253 D0 0F BNE NXTKEY ;If No, go to
0255 AD 50 10 LDA 1050H ;sample next
0258 38 SEC ;return line?
0259 E9 08 SBC #$08H
025B 8D 50 10 STA 1050H ;Base code for
025E CA DEX ;next scan row.
025F D0 E7 BNE NXTGROUP ;If all the 3 scan
;rows are not
;scanned go back to
;scan the next row
0261 4C 3F 02 JMP KEYDEP ;Else, Start
;scanning from
;the first row.
0264 4A NXTKEY: LSR A ;Next return line
0265 90 01 BCC INCREMENT ;If no key is
;depressed in the
;present return
;line, go to sample
;next return line
0267 60 RTS ;Else, go to
0268 48 INCREMENT: PHA ;display the code
0269 AD 50 10 LDA 1050H ;of the key
026C 18 CLC ;depressed.
026D 69 01 ADC #$01
026F 8D 50 10 STA 1050H ;Code for next
0272 68 PLA ;key in the row.
0273 4C 64 02 JMP NXTKEY ;Go to check for
;next key is
;depressed.
0276 0A 0D 4B 45 59 MES: DB 0AH,0DH,
027B 20 50 52 45 53 'KEY PRESSED IS',00H
0280 53 45 44 20 49
0285 53 20 20 00
KEYBOARD INTERFACE
12
4.5 DEMONSTRATION PROGRAM FOR ESA-31 TRAINER
; Assume the interface is connected over J2 of the trainer.
; The trainer can be in KEYBOARD MODE or SERIAL MODE.
SEG EQU 0E8H
SEG1 EQU 0E1H
PARLOW EQU 60H
DISPD8 EQU 019BH
CRLOUT EQU 1787H
DISPM EQU 164BH
PUTBYTE EQU 185EH
P2 EQU 0A0H
ADDRESS OPCODE LABLE MNEMONIC COMMENTS
8000 ORG 8000H
8000 75 A0 E1 MOV P2,#E1H
8003 78 02 MOV R0,#02H ;3 Scan rows.
8005 E2 MOVX A,@R0
8006 20 E3 17 JB ACC.3,KBD
8009 12 17 87 LCALL CRLOUT
800C 90 80 62 MOV DPTR,#MESG
800F 12 16 4B LCALL DISPM
8012 12 80 5B BACK: LCALL DILIT
8015 12 80 2E LCALL KSCAN ;Wait for key
8018 EC MOV A,R4 ;closure
8019 F5 71 MOV 71H,A ;Get keycode for
801B 12 18 5E LCALL PUTBYTE ;key pressed.
801E 80 F2 SJMP BACK
8020 12 80 2E KBD: LCALL KSCAN
8023 EC MOV A,R4
8024 F5 60 MOV PARLOW,A
8026 75 F0 00 MOV B,#00H
8029 12 01 9B LCALL DISPD8
802C 80 F2 SJMP KBD
802E 75 A0 E8 KSCAN: MOV P2,#SEG
8031 78 03 MOV R0,#03H ;No of scan lines
8033 74 92 MOV A,#92H ;Configure 8255 in
;Mode 0. Port A,B
8035 F2 MOVX @R0,A ;as I/P ports.
;port C as O/P.
8036 AB 02 KSCN: MOV R3,02H ;3 Scan rows.
8038 7C 10 MOV R4,#10H ;Base code.
803A 79 04 MOV R1,#04H ;Scan line high.
KEYBOARD INTERFACE
13
803C E9 NXTGRP: MOV A,R1 ;Make one of the
803D 78 02 MOV R0,#02H ;scan lines high.
803F F2 MOVX @R0,A
8040 13 RRC A
8041 F9 MOV R1,A
8042 78 00 MOV R0,#00H
8044 E2 MOVX A,@R0 ;Any key pressed?
8045 70 0A JNZ NXTKEY ;Yes, check for the
8047 EC MOV A,R4 ;corresponding key.
8048 94 08 SUBB A,#08H ;No, then make the
804A FC MOV R4,A ;next scan line
804B 1B DEC R3 ;high.
804C EB MOV A,R3 ;Check again
804D DB ED DJNZ R3,NXTGRP
804F 80 E5 SJMP KSCN ;Repeat the same.
8051 13 NXTKEY: RRC A
8052 50 01 JNC NEXT1 ;Keycode is OK
8054 22 RET ;return.
8055 CC NEXT: XCH A,R4
8056 24 01 ADD A,#01H ;If not, try next
8058 CC XCH A,R4 ;keycode.
8059 80 F6 SJMP NXTKEY
805B
805B 90 80 77 DILIT: MOV DPTR,#DELET ;Delete old value
805E 12 16 4B LCALL DISPM
8061 22 RET
8062 4B 45 59 20 50 MESG: DB 'KEY PRESSEED IS = ',00H
8067 52 45 53 53 45
806C 44 20 49 53 20
8071 3D 20 20 20 20
8076 00
8077 08 08 08 00 DELET: DB 08H, 08H, 00H
4.6 DEMONSTRATION PROGRAM FOR ESA-68K TRAINER
; Assumes the interface is connected over P3 of the trainer.
ADDRESS OPCODE LABLE MNEMONIC COMMENTS
40600 4E B8 03 JSR $304 ;Call the monitor
04 ;routine `CRLF'
40604 13 FC 00 MOVE.B #$92,$80306 ;Configure 8255
92 00 08 ;for mode 0.
KEYBOARD INTERFACE
14
03 06 ;Port A as I/P,
;Port C as O/P.
4060C 32 3C 00 START: MOVE.B #03,D1 ;4 Rows of keys
03
40610 22 7C 00 MOVEA.L #$STRING,A1
04 06 80
40616 16 3C 00 MOVE.B #01,D3
01
4061A 13 C3 00 GROUPS: MOVE.B D3,$80304 ;Make one of the
08 03 04 ;scan lines high
;through Port C
40620 14 39 00 MOVE.B $80300,D2 ;Read the return
08 03 00 ;lines
40626 0C 02 00 CMPI.B #00,D2 ;Any key pressed?
00
4062A 67 3C BEQ NEXTGROUP ;No, go for scan-
;ing next row.
4062C 42 84 CLR.L D4 ;(D4)= key to be
;checked.
4062E 09 02 KEYSCAN: BTST D4,D2 ;Key depressed?
40630 67 2E BEQ NEXTKEY ;No, go for next
;key in the row
40632 2A 3C 00 MOVE.L #$A000,D5 ;Debounce delay
00 A0 00
40638 53 85 LOOP: SUBQ.L #01,D5
4063A 66 FC BNE LOOP
4063C 14 39 00 MOVE.B $80300,D2 ;Check after
08 03 00 ;debouncing
40642 09 02 BTST D4,D2
40644 67 C6 BEQ START ;If not depressed
;go back to
;beginning.
40646 33 D1 00 MOVE (A1),$406D4 ;Insert key in the
04 06 D4 ;MESSAGE+$14
;message
4064C 13 FC 00 MOVE.B #$0D,$406C0 ;Insert CR at the
0D 00 04 ;beginning of
06 C0 ;MESSAGE
40654 2C 7C 00 MOVE.L #MESSAGE,A6
04 06 C0
4065A 4E B8 13 JSR $1300 ;Call monitor sub-
00 ;routine to display
;message on console
4065E 60 AC BRA START ;Go to beginning
40660 D2 FC 00 NEXTKEY: ADDA #02,A1
KEYBOARD INTERFACE
15
02
40664 52 04 ADDQ.B #01,D4
40666 60 C6 BRA KEYSCAN
40668 53 41 NEXTGROUP: SUBQ #01,D1
4066A 67 A0 BEQ START ;If all rows are
;over go to
;beginning
4066C D2 FC 00 ADDA #$10,A1 ;Base code for
10 ;next row
40670 E3 1B ROL.B #01, D3
40672 60 A6 BRA GROUPS
40680 20 30 20 31 STRING: ASCII ` 0 1 2 3
20 32 20 33 4 5 6 7
20 34 20 35 8 9 . +
20 36 20 37 - x / %
20 38 20 39 CCEF1F2'
20 2E 20 2B
20 2D 20 58
20 2F 20 25
20 43 43 45
46 31 46 32
406C1 20 20 4B 45 MESSAGE+1:ASCII ` KEY DEPRESSED IS ',00
59 20 44 45
50 52 45 53
53 45 44 20
49 53 20 20
20 20 00
4.7 DEMONSTRATION PROGRAM FOR ESA 196 TRAINER
;Assume the interface is connected over J1 of the trainer.
;The trainer can be in KEYBOARD MODE or SERIAL MODE.
REG1 EQU 52H
REG2 EQU 54H
REG3 EQU 56H
REG4 EQU 58H
PORT_A EQU 200H
PORT_B EQU 202H
PORT_C EQU 204H
CMD_PORT EQU 206H
KEYBOARD INTERFACE
16
OUT_STRING EQU 22F5H
HEX_ASCII EQU 230FH
OUT_CHARI EQU 21FBH
GET_CH EQU 22F0H
CLR_LCD EQU 354BH
ADDRESS OPCODE LABLE MNEMONIC COMMENTS
8000 A1 00 E0 18 LD 18H,#0E000H ;Initialise Stack
8004 B1 92 52 LDB REG1,#92H ;Configure
8007 C7 01 06 02 STB REG1,CMD_PORT ;8255 for mode0
800B 52 ;Port A as I/P.
;Port C as O/P.
800C EF 3C B5 LCALL 354BH ;Clear LCD display.
800F A1 80 80 2A LD 2AH,#MSG ;Display the
8013 EF DF A2 LCALL OUT_STRING ;message.
8016 EF 19 00 SRL: LCALL KSCAN
8019 B0 56 52 LDB REG1,REG3
801C C8 52 PUSH REG1
801E B1 14 36 LDB 36H,#14
8021 A1 96 80 2A LD 2AH,#DEL
8025 EF CD A2 LCALL OUT_STRING
8028 CC 52 POP REG1
802A B0 56 22 LDB 22H,REG3
802D EF DF A2 LCALL HEX_ASCII
8030 27 E4 SJMP SRL
8032 B1 02 58 KSCAN: LDB REG4,#02H ;3 Scan rows
8035 B1 10 56 LDB REG3,#10H ;Keycode
8038 B1 04 54 LDB REG2,#04H ;Scan line.
803B B0 54 52 NXTGRP: LDB REG1,REG2 ;Make one of
803E C7 01 04 02 STB REG1,PORT_C ;the scan line
8042 52 ;high
8043 18 01 52 SHRB REG1,#01H
8046 B0 52 54 LOOP: LDB REG2,REG1
8049 B3 01 00 02 LDB REG1,PORT_A
804D 52
804E 99 00 52 CMPB REG1,#00H ;Any key pressed?
8051 D7 15 JNE NXTKEY ;Yes, check
8053 B0 56 52 LDB REG1,REG3 ;for the
8056 79 08 52 SUBB REG1,#08H ;corresponding
8059 B0 52 56 LDB REG3,REG1 ;key. No, then
805C 15 58 DECB REG4 ;make the next
805E B0 58 52 LDB REG1,REG4 ;scan line high.
8061 99 FF 52 CMPB REG1,#0FFH ;Check again.
8064 D7 D5 JNE NXTGRP
KEYBOARD INTERFACE
17
8066 27 CA SJMP KSCAN ;Repeat the same.
8068 18 01 52 NXTKEY: SHRB REG1,#01H
806B D3 04 JNC LOOP1 ;Keycode is ok
806D 91 80 52 ORB REG1,#10000000B;return.
8070 F0 RET
8071 C8 52 LOOP1: PUSH REG1
8073 B0 56 52 LDB REG1,REG3
8076 75 01 52 ADDB REG1,#01H ;If not, Try
8079 B0 52 56 LDB REG3,REG1 ;next keycode.
807C CC 52 POP REG1
807E 27 E8 SJMP NXTKEY
;ENTER THE FOLLOWING DATA IN DATA MEMORY-D1.
;DATA MEMORY LOC. FROM 8080H TO 8098H.
8080 54 48 45 20 MSG: DCB 'THE KEY PRESSED IS ',00H
8084 4B 45 59 20
8088 50 52 45 53
808C 53 45 44 20
8090 49 53 20 20
8094 20 00
8096 08 08 00 DEL: DCB 08H,08H,00H
4.8 DEMONSTRATION PROGRAM FOR ESA 86/88-2 TRAINER
; Assumes the interface is connected over J4 of the trainer.
; The trainer can be in KEYBOARD MODE or SERIAL MODE.
CS : 0
ADDRESS OPCODE LABLE MNEMONIC COMMENTS
MES: DB 0DH,0AH, ' PRESSED KEY VALUE IS = ',00
2000 0D 0A 20 20
2004 20 20 50 52
2008 45 53 53 45
200C 44 20 4B 45
2010 59 20 56 41
2014 4C 55 45 20
2018 49 53 20 3D
201C 20 20 20 00
2020 BA E6 FF MOVW DX,#0FFE6 ;Configure 8255 for
2023 B0 92 MOVB AL,#92 ;mode 0. Port A as
KEYBOARD INTERFACE
18
2025 EE OUTB DX ;I/P, Port C as O/P
2026 2E CS
2027 8D 16 00 LEA DX,MES ;Display the message
20 ;for the serial mode
202B 89 D0 MOVW AX,DX
202D 9A 55 1B CALLS 1B55,0FE00
00 FE
2032 BA ED FF START: MOV DX,#0FFED ;Read DIP switch
2035 EC INB DX
2036 24 80 ANDB AL,#80
2038 74 1B JE KBM
203A B0 08 SRL: MOVB AL,#08
203C 9A 50 1B CALLS 1B50,0FE00
00 FE
2041 B0 08 MOVB AL,#08
2043 9A 50 1B CALLS 1B50,0FE00
00 FE
2048 E8 19 00 CALL KSCAN ;Wait for key enclose
204B 88 F8 MOVB AL,BH
204D 9A 64 1B CALLS 1B64,0FE00 ;Display keycode
00 FE ;to console
2052 EB DE JMP START
2054 E8 0C 00 KBM: CALL KSCAN
2057 8A C7 MOVB AL,BH
2059 B4 00 MOVB AH,#00
205B 9A 0A 0B CALLS 0B0A,0FF00
00 FF
2060 EB DE JMP START
2062 B3 02 KSCAN: MOVB BL,#02 ;3 Scan rows keycode
2064 B7 10 MOVB BH,#10
2066 B1 04 MOVB CL,#04 ;Scan line high
2068 BA E4 FF NXTGRP: MOVW DX,#0FFE4
206B 88 C8 MOVB AL,CL ;Make one of the
206D EE OUTB DX ;Scan lines high
207E D0 D8 RCRB AL,1
2070 88 C1 MOVB CL,AL
2072 BA E0 FF MOVW DX,#0FFE0
2074 EC INB DX ;Any key pressed
2076 08 C0 ORB AL,AL
2078 75 0D JNE NXTKEY ;Yes check for the
207A 80 EF 08 SUBB BH,#08 ;corresponding key
207D FE CB DECB BL ;No then make the
207F 80 FB FF CMPB BL,#0FF ;next scan line high
;Check again
2082 75 E4 JNE NXTGRP
KEYBOARD INTERFACE
19
2084 EB DC JMP KSCAN ;Repeat the same
2086 D0 D8 NXTKEY: RCRB AL,1 ;Keycode is OK return
2088 73 01 JNB NZ
208A C3 RET
208B 80 C7 01 NZ: ADDB BH,#01 ;If not try next
208E E9 F5 FF JMP NXTKEY ;Keycode
4.9 DEMONSTRATION PROGRAM FOR ESA 68K-2 TRAINER
; Assume the interface is connected over J2 of the trainer.
; The trainer must be in SERIAL mode only.
ORG 400400H
PORTA EQU 800011H
PORTC EQU 800019H
PA_CT EQU 80000DH
PA_DI EQU 800005H
PC_DI EQU 800009H
PAAR EQU 800015H
ADDRESS OPCODE LABLE MNEMONICS COMMENTS
400400 13FC 00FF MOVE.B #$FF,PC_DI ;To initialise
0080 0009 ;Port C as O/P.
400408 2C7C 0040 MOVEA.L #MESSAGE,A6 ;Display message
04A6
40040E 4E4B TRAP #11
400410 00 06 DC.W $0006
400412 7203 START: MOVE.L #03H,D1 ;3 Scan rows.
400414 227C 0040 MOVEA.L #STRING,A1
047C
40041A 163C 0001 MOVE.B #01,D3
40041E 4643 NOT D3
400420 13C3 0080 GROUPS: MOVE.B D3,PORTC ;Make one of the
0019 ;Scan line high
400426 1439 0080 MOVE.B PAAR,D2
0015
40042C 4642 NOT D2
40042E 0C02 0000 CMPI.B #$00H,D2 ;Any key pressed?
400432 6736 BEQ.S NEXTGROUP ;Yes, Check for
400434 4284 CLR.L D4 ;corresponding
;key.
400436 0902 KEYSCAN: BTST D4,D2
400438 6728 BEQ.S NEXTKEY
KEYBOARD INTERFACE
20
40043A 2A3C 0000 MOVE.L #$A000,D5 ;Debounce delay
A000
400440 5385 LOOP: SUBQ.L #01,D5
400442 66FC BNE.S LOOP
400444 1439 0080 MOVE.B PAAR,D2 ;Check after
0015 ;debouncing
40044A 4642 NOT D2
40044C 0902 BTST D4,D2
40044E 67C2 BEQ.S START
400450 33D1 0040 MOVE (A1),MESSAGE+$14
04BA
400456 2C7C 0040 MOVEA.L #MESSAGE,A6
04A6
40045C 4E4B TRAP #11
40045E 00 06 DC.W $0006
400460 60B0 BRA.S START
400462 D2FC 0002 NEXTKEY:ADDA #02,A1 ;Check for the
400466 5204 ADDQ.B #01,D4 ;next key.
400468 60CC BRA.S KEYSCAN
40046A 5301 NEXTGROUP: SUBQ.B #01,D1
40046C 67A4 BEQ.S START
40046E D3FC 0000 ADDA.L #$10,A1
0010
400474 4643 NOT D3
400476 E31B ROL.B #01,D3
400478 4643 NOT D3
40047A 60A4 BRA.S GROUPS
40047C 20 30 20 31 STRING: DB " 0 1 2 3 4 5 6 7 8 9 . + - * /
20 32 % CCEF1F2"
400482 20 33 20 34
20 35
400488 20 36 20 37
20 38
40048E 20 39 20 2E
20 2B
400494 20 2D 20 58
20 2F
40049A 20 25 20 43
43 45
4004A0 46 31 46 32 20 00
4004A6 0D 20 20 20 MESSAGE: DB 0DH," KEY PRESSED IS " ,00H
4B 45
4004AC 59 20 50 52
45 53
4004B2 53 45 44 20
KEYBOARD INTERFACE
21
49 53
4004B8 20 20 20 20 00
4.10 DEMONSTRATION PROGRAM FOR ESA-51 TRAINER
;Assume the interface is connected over J10 of the trainer.
;The trainer can be in keyboard mode or in serial mode.
SCRLF EQU 13A7H
OUTPUT EQU 0404H
OUTSTG EQU 1200H
PUTBYTE EQU 13D2H
SEG EQU 0E8H
CLRLCD EQU 03BBH
ADDRESS OPCODE LABLE MNEMONIC COMMENTS
8000 ORG 8000H
8000 75 A0 E9 MOV P2,#0E9H
8003 78 04 MOV R0,#04H ;CHECK WHETHER
8005 E2 MOVX A,@R0 ;KEYBOARD OR
8006 20 E3 17 JB ACC.3,KBD ;SERIAL MODE
8009 12 13 A7 LCALL SCRLF
800C 90 80 88 MOV DPTR,#MESG
800F 12 04 04 LCALL OUTPUT
8012 12 80 81 BACK: LCALL DILIT ;WAIT FOR KEY
;CLOSURE
8015 12 80 54 LCALL KSCAN ;GET KEYCODE FOR
8018 EC MOV A,R4 ;KEY PRESSED
8019 F5 71 MOV 71H,A
801B 12 13 D2 LCALL PUTBYTE
801E 80 F2 SJMP BACK
8020 12 03 BB KBD: LCALL CLRLCD ;CLEAR THE LCD
;DISPLAY
8023 90 80 88 MOV DPTR,#MESG ;DISPLAY THE
;MESSAGE
8026 12 04 04 LCALL OUTPUT ;'KEY PRESSED'
8029 C0 03 KBD1: PUSH 3 ;SAVE THE R3 & R4
802B C0 04 PUSH 4 ;REGISTERS
802D 12 80 54 LCALL KSCAN ;GET THE KEYCODE
8030 EC MOV A,R4 ;FOR KEY PRESSED
8031 D0 04 POP 4 ;GET BACK R4 & R3
8033 D0 03 POP 3 ;REGISTER VALUES
8035 F5 71 MOV 71H,A ;DISPLAY THE
KEYBOARD INTERFACE
22
8037 12 13 D2 LCALL PUTBYTE ;KEYCODE
803A 74 10 MOV A,#10H ;MOVE THE CURSOR
803C 12 80 A3 LCALL LCDCMD ;LEFT THREE TIMES
803F 74 10 MOV A,#10H
8041 12 80 A3 LCALL LCDCMD
8044 74 10 MOV A,#10H
8046 12 80 A3 LCALL LCDCMD
8049 74 14 MOV A,#14H ;SHIFTS CURSOR
;POSITION
804B 12 80 A3 LCALL LCDCMD ;TO THE RIGHT
804E 7B 00 MOV R3,#0 ;TO WRITE INTO
;THE 14X1
8050 7C 0E MOV R4,#0EH ;POSITION OF THE
;LCD MODULE
8052 80 D5 SJMP KBD1
8054 75 A0 E8 KSCAN: MOV P2,#0E8H ;CONFIGURE 8255
;IN MODE 0.
8057 78 03 MOV R0,#03H ;PORT A&B AS I/P
;PORTS
8059 74 92 MOV A,#92H ;AND PORT C AS
;O/P PORT.
805B F2 MOVX @R0,A
805C AB 02 KSCN: MOV R3,02H ;3 SCAN ROWS
805E 7C 10 MOV R4,#10H ;BASE CODE
8060 79 04 MOV R1,#04H ;SCAN LINE HIGH
8062 E9 NXTGRP: MOV A,R1 ;MAKE ONE OF THE
;SCAN
8063 78 02 MOV R0,#02H ;LINES HIGH
8065 F2 MOVX @R0,A
8066 13 RRC A
8067 F9 MOV R1,A
8068 78 00 MOV R0,#00H
806A E2 MOVX A,@R0 ;ANY KEY PRESSED ?
806B 70 0A JNZ NXTKEY ;YES,CHECK FOR THE
;CORRESPONDING KEY
806D EC MOV A,R4 ;NO,THEN MAKE THE
806E 94 08 SUBB A,#08H ;NEXT SCAN LINE
8070 FC MOV R4,A ;HIGH
8071 1B DEC R3 ;CHECK AGAIN
8072 EB MOV A,R3
8073 DB ED DJNZ R3,NXTGRP
8075 80 E5 SJMP KSCN ;REPEAT THE
;PROCESS
8077 13 NXTKEY: RRC A ;KEYCODE IS OK
8078 50 01 JNC NEXT ;RETURN
KEYBOARD INTERFACE
23
807A 22 RET
807B CC NEXT: XCH A,R4 ;IF NOT TRY NEXT
807C 24 01 ADD A,#01H ;KEYCODE
807E CC XCH A,R4
807F 80 F6 SJMP NXTKEY
8081 90 80 97 DILIT: MOV DPTR,#BACKSP ;DELETE OLD VALUE
8084 12 04 04 LCALL OUTPUT
8087 22 RET
8088 4B 45 59 20 50 MESG: DB 'KEY PRESSED= ',00H
808D 52 45 53 53 45
8092 44 3D 20 20 00
8097 08 08 00 BACKSP: DB 08H,08H,00H
809A 7E 05 DLY: MOV R6,#5H
809C 7F FF DLY1: MOV R7,#FFH
809E DF FE DJNZ R7,$
80A0 DE FA DJNZ R6,DLY1
80A2 22 RET
;SUBROUTINE TO WRITE TO THE COMMAND PORT OF ON BOARD LCD
80A3 F5 F0 LCDCMD: MOV B,A
80A5 11 9A ACALL DLY
80A7 C0 F0 PUSH B
80A9 C0 83 PUSH DPH
80AB C0 82 PUSH DPL
80AD 90 E9 03 MOV DPTR,#0E903H
80B0 74 80 MOV A,#80H
80B2 F0 MOVX @DPTR,A
80B3 7E 7F MOV R6,#7FH
80B5 DE FE S0: DJNZ R6,S0
80B7 90 E9 02 MOV DPTR,#0E902H
80BA 74 04 MOV A,#04
80BC F0 MOVX @DPTR,A
80BD 90 E9 00 MOV DPTR,#0E900H
80C0 E5 F0 MOV A,B
80C2 F0 MOVX @DPTR,A
80C3 A3 INC DPTR
80C4 74 00 MOV A,#00H
80C6 F0 MOVX @DPTR,A
80C7 7E 7F MOV R6,#7FH
80C9 DE FE S1: DJNZ R6,S1
80CB D0 82 POP DPL
80CD D0 83 POP DPH
KEYBOARD INTERFACE
24
80CF D0 F0 POP B
80D1 22 RET
4.11 DEMONSTRATION PROGRAM FOR ESA 86/88-3 TRAINER
; Assume the interface is connected over J8 of the trainer.
; This program displays the value of the pressed key on the PC
; console
; in serial mode or LCD in stand-alone mode of operation.
; The program can be executed in STAND-ALONE MODE or SERIAL
; MODE of operation.
; The program starts at memory location 0:2000H
; Please refer ESA 86/88-3 user's manual for mnemonic syntax
; suitable to trainer
Code Segment :0000H
ADDRESS OPCODE LABEL MNEMONIC COMMENTS
2000 B8 00 00 MOVW AX,0000H ;Initialise Segment
2003 8E C8 MOVW CS,AX ;Registers
2005 8E C0 MOVW ES,AX
2007 BC 00 30 MOVW SP,3000H ;Initialise Stack
;Pointer
200A BA E6 FF MOVW DX,0FFE6H ;Configure 8255 Port
200D B0 92 MOVB AL,92H ;A as I/P & Port C
;as O/P
200F EE OUTB DX,AL
2010 EB 18 JMP GO ;Display message
;string
2012 20 50 52 45 53 53 MES: DB ' PRESSED KEY VALUE = ',0H
2018 45 44 20 4B 45 59
201E 20 56 41 4C 55 45
2024 20 3D 20 20 20 00
202A 9A 31 00 00 FB GO: CALLS 0FB00:0031H ;Newline routine
202F 2E CS
2030 8D 16 12 20 LEA DX,@MES
2034 8B C2 MOVW AX,DX
2036 9A 13 00 00 FB CALLS 0FB00:0013H ;Display message
; Routine for scanning which key has been pressed
203B B1 04 KSCAN: MOVB CL,04H ;Scanning 3 rows
KEYBOARD INTERFACE
25
203D BB 00 00 MOVW BX,00H ;Initialise count
2040 E8 62 00 NXTGRP: CALL DELAY
2043 BA E4 FF MOVW DX,0FFE4H
2046 8A C1 MOVB AL,CL ;Make one of the
2048 EE OUTB DX,AL ;scan lines high
2049 BA E0 FF MOVW DX,0FFE0H
204C EC INB AL,DX ;Check for key
;pressed
204D 3C 00 CMPB AL,00
204F 75 09 JNE KEYCODE ;If yes, detect key
2051 D0 E9 SHRB CL,1 ;code Else, make
2053 80 F9 00 CMPB CL,0H ;next scan line
;high and repeat
2056 75 E8 JNE NXTGRP
2058 EB E1 JMP KSCAN ;Repeat key scanning
205A 8A D8 KEYCODE: MOVB BL,AL ;Detect column
205C D0 EB KEY: SHRB BL,1
205E 80 FB 00 CMPB BL,0H
2061 74 04 JE NEXT
2063 FE C7 INCB BH ;Increment column
;count
2065 EB F5 JMP KEY ;Repeat continuously
2067 80 F9 01 NEXT: CMPB CL,01H ;Detect row
206A 74 06 JE DISP
206C D0 E1 SHLB CL,1
206E D0 E1 SHLB CL,1
206D 8A D9 MOVB BL,CL ;Save row code
2072 BA ED FF DISP: MOVW DX,0FFEDH ;Check mode of trainer
2075 EC INB AL,DX ;operation
2076 24 10 ANDB AL,10H ;If trainer is in
2078 74 11 JZ SRL ;stand-alone mode,
207A 9A 35 01 00 FB CALLS 0FB00:0135H ;clear display
207F 2E cs
2080 8D 16 12 20 LEA DX,@MES ;on LCD and display
2084 8B C2 MOVW AX,DX ;fresh message
2087 9A 13 00 00 FB CALLS 0FB00:0013H
208B B0 08 SRL: MOVB AL,08H ;Else, output keycode
208D 9A 00 00 00 FB CALLS 0FB00:0000H ;on console.
2092 9A 00 00 00 FB CALLS 0FB00:0000H
2097 0A FB ORB BH,BL ;Compute key value
2099 8A C7 MOVB AL,BH ;from row code &
;column count
209B 9A 52 00 00 FB CALLS 0FB00:0052H ;Display key
;value
20A0 BB 00 00 MOVW BX,00H
KEYBOARD INTERFACE
26
20A3 EB 96 JMP KSCAN ;Repeat continuously
20A5 51 DELAY: PUSH CX
20A6 B9 FF FF MOVW CX,0FFFFH ;Delay routine
20A9 E2 FE LOOP 20A9
20AB 59 POP CX
20AC C3 RET
4.12 DEMONSTRATION PROGRAM FOR ESA-51E TRAINER
;ASSUME THE INTERFACE IS CONNECTED OVER J5 OF THE TRAINER.
;THE TRAINER CAN BE IN KEYBOARD MODE OR IN SERIAL MODE.
SCRLF EQU 1373H
OUTPUT EQU 03FAH
PUTBYTE EQU 139EH
SEG EQU 0E8H
CLRLCD EQU 03B1H
ADDRESS OPCODE LABEL MNEMONIC COMMENTS
8000 ORG 8000H
8000 75 A0 E1 MOV P2,#0E1H
8003 78 02 MOV R0,#02H ;CHECK WHETHER
8005 E2 MOVX A,@R0 ;KEYBOARD OR
8006 20 E3 17 JB ACC.3,KBD ;SERIAL MODE
8009 12 13 73 LCALL SCRLF
800C 90 80 88 MOV DPTR,#MESG
800F 12 03 FA LCALL OUTPUT
8012 12 80 81 BACK: LCALL DILIT ;WAIT FOR KEY
;CLOSURE
8015 12 80 54 LCALL KSCAN ;GET KEYCODE FOR
8018 EC MOV A,R4 ;KEY PRESSED
8019 F5 71 MOV 71H,A
801B 12 13 9E LCALL PUTBYTE
801E 80 F2 SJMP BACK
8020 12 03 B1 KBD: LCALL CLRLCD ;CLEAR THE LCD
;DISPLAY
8023 90 80 88 MOV DPTR,#MESG ;DISPLAY THE
;MESSAGE
8026 12 03 FA LCALL OUTPUT ;'KEY PRESSED'
8029 C0 03 KBD1: PUSH 3 ;SAVE THE R3 &R4
802B C0 04 PUSH 4 ;REGISTERS
802D 12 80 54 LCALL KSCAN ;GET THE KEYCODE
8030 EC MOV A,R4 ;FOR KEY PRESSED
KEYBOARD INTERFACE
27
8031 D0 04 POP 4 ;GET BACK THE R4&
8033 D0 03 POP 3 ;R3 REGISTER VALUES
8035 F5 71 MOV 71H,A ;DISPLAY THE
8037 12 13 9E LCALL PUTBYTE ;KEYCODE
803A 74 10 MOV A,#10H ;MOVE THE CURSOR
803C 12 80 A3 LCALL LCDCMD ;LEFT 3 TIMES
803F 74 10 MOV A,#10H
8041 12 80 A3 LCALL LCDCMD
8044 74 10 MOV A,#10H
8046 12 80 A3 LCALL LCDCMD
8049 74 14 MOV A,#14H ;SHIFTS CURSOR
804B 12 80 A3 LCALL LCDCMD ;POSITION TO THE
804E 7B 00 MOV R3,#0 ;RIGHT TO WRITE
;INTO THE 14X1
8050 7C 0E MOV R4,#0EH ;POSITION OF THE
;LCD MODULE
8052 80 D5 SJMP KBD1
8054 75 A0 E8 KSCAN: MOV P2,#0E8H ;CONFIGURE 8255 IN
;MODE 0.
8057 78 03 MOV R0,#03H ;PORT A&B AS I/P
8059 74 92 MOV A,#92H ;AND PORT C AS O/P
805B F2 MOVX @R0,A
805C AB 02 KSCN: MOV R3,02H ;3 SCAN ROWS
805E 7C 10 MOV R4,#10H ;BASE CODE
8060 79 04 MOV R1,#04H ;SCAN LINE HIGH
8062 E9 NXTGRP: MOV A,R1 ;MAKE ONE OF THE
8063 78 02 MOV R0,#02H ; SCAN LINES HIGH
8065 F2 MOVX @R0,A
8066 13 RRC A
8067 F9 MOV R1,A
8068 78 00 MOV R0,#00H
806A E2 MOVX A,@R0 ;ANY KEY PRESSED ?
806B 70 0A JNZ NXTKEY ;YES,CHECK FOR THE
;CORRESPONDING KEY
806D EC MOV A,R4 ;NO,THEN MAKE THE
806E 94 08 SUBB A,#08H ;NEXT SCAN LINE
8070 FC MOV R4,A ;HIGH
8071 1B DEC R3 ;CHECK AGAIN
8072 EB MOV A,R3
8073 DB ED DJNZ R3,NXTGRP
8075 80 E5 SJMP KSCN ;REPEAT THE PROCESS
8077 13 NXTKEY: RRC A ;KEYCODE IS OK
8078 50 01 JNC NEXT ;RETURN
807A 22 RET
KEYBOARD INTERFACE
28
807B CC NEXT: XCH A,R4 ;IF NOT TRY NEXT
807C 24 01 ADD A,#01H ;KEYCODE
807E CC XCH A,R4
807F 80 F6 SJMP NXTKEY
8081 90 80 97 DILIT: MOV DPTR,#BACKSP ;DELETE OLD
;VALUE
8084 12 03 FA LCALL OUTPUT
8087 22 RET
8088 4B 45 59 20 50 MESG: DB 'KEY PRESSED= ',00H
808D 52 45 53 53 45
8092 44 3D 20 20 00
8097 08 08 00 BACKSP: DB 08H,08H,00H
809A 7E 05 DLY: MOV R6,#5H
809C 7F FF DLY1: MOV R7,#FFH
809E DF FE DJNZ R7,$
80A0 DE FA DJNZ R6,DLY1
80A2 22 RET
;SUBROUTINE TO WRITE TO THE COMMAND PORT OF ON BOARD LCD
80A3 F5 F0 LCDCMD: MOV F0,A
80A5 11 9A ACALL DLY
80A7 C0 F0 PUSH F0
80A9 C0 83 PUSH DPH
80AB C0 82 PUSH DPL
80AD 90 E1 00 MOV DPTR,#0E100H
80B0 74 0D MOV A,#0DH
80B2 F0 MOVX @DPTR,A
80B3 7E 7F MOV R6,#7FH
80B5 DE FE S0: DJNZ R6,S0
80B7 90 E1 03 MOV DPTR,#0E103H
80BA 74 04 MOV A,#04H
80BC F0 MOVX @DPTR,A
80BD 90 E1 01 MOV DPTR,#0E101H
80C0 E5 F0 MOV A,F0
80C2 F0 MOVX @DPTR,A
80C3 A3 INC DPTR
80C4 A3 INC DPTR
80C5 74 00 MOV A,#00
80C7 F0 MOVX @DPTR,A
80C8 7E 7F MOV R6,#7FH
80CA DE FE S1: DJNZ R6,S1
80CC D0 82 POP DPL
KEYBOARD INTERFACE
29
80CE D0 83 POP DPH
80D0 D0 F0 POP F0
80D2 22 RET
4.13 DEMONSTRATION PROGRAM FOR ESA 86/88E TRAINER
; Assume the interface is connected over J4 of the trainer.
; This program displays the value of the pressed key on the PC
; console
; in serial mode or LCD in stand-alone mode of operation.
; The program can be executed in STAND-ALONE MODE or SERIAL
; MODE of operation.
; The program starts at memory location 0:2000H
; Please refer ESA 86/88E user's manual for mnemonic syntax
; suitable to trainer
Code Segment :0000H
ADDRESS OPCODE LABEL MNEMONIC COMMENTS
2000 B8 00 00 MOVW AX,0000H ;Initialise Segment
2003 8E C8 MOVW CS,AX ;Registers
2005 8E C0 MOVW ES,AX
2007 BC 00 30 MOVW SP,3000H ;Initialise Stack
;Pointer
200A BA E6 FF MOVW DX,0FFE6H ;Configure 8255 Port
200D B0 92 MOVB AL,92H ;A as I/P & Port C
;as O/P
200F EE OUTB DX,AL
2010 EB 18 JMP GO ;Display message
;string
2012 20 50 52 45 53 53 MES: DB ' PRESSED KEY VALUE = ',0H
2018 45 44 20 4B 45 59
201E 20 56 41 4C 55 45
2024 20 3D 20 20 20 00
202A 9A 31 00 00 FB GO: CALLS 0FB00:0031H ;Newline routine
202F 2E CS
2030 8D 16 12 20 LEA DX,@MES
2034 8B C2 MOVW AX,DX
2036 9A 13 00 00 FB CALLS 0FB00:0013H ;Display message
; Routine for scanning which key has been pressed
203B B1 04 KSCAN: MOVB CL,04H ;Scanning 3 rows
203D BB 00 00 MOVW BX,00H ;Initialise count
KEYBOARD INTERFACE
30
2040 E8 62 00 NXTGRP: CALL DELAY
2043 BA E4 FF MOVW DX,0FFE4H
2046 8A C1 MOVB AL,CL ;Make one of the
2048 EE OUTB DX,AL ;scan lines high
2049 BA E0 FF MOVW DX,0FFE0H
204C EC INB AL,DX ;Check for key
;pressed
204D 3C 00 CMPB AL,00
204F 75 09 JNE KEYCODE ;If yes, detect key
2051 D0 E9 SHRB CL,1 ;code Else, make
2053 80 F9 00 CMPB CL,0H ;next scan line
;high and repeat
2056 75 E8 JNE NXTGRP
2058 EB E1 JMP KSCAN ;Repeat key scanning
205A 8A D8 KEYCODE: MOVB BL,AL ;Detect column
205C D0 EB KEY: SHRB BL,1
205E 80 FB 00 CMPB BL,0H
2061 74 04 JE NEXT
2063 FE C7 INCB BH ;Increment column
;count
2065 EB F5 JMP KEY ;Repeat continuously
2067 80 F9 01 NEXT: CMPB CL,01H ;Detect row
206A 74 06 JE DISP
206C D0 E1 SHLB CL,1
206E D0 E1 SHLB CL,1
206D 8A D9 MOVB BL,CL ;Save row code
2072 BA ED FF DISP: MOVW DX,0FFEDH;Check mode of trainer
2075 EC INB AL,DX ;operation
2076 24 10 ANDB AL,10H ;If trainer is in
2078 74 11 JZ SRL ;stand-alone mode,
207A 9A 35 01 00 FB CALLS 0FB00:0135H ;clear display
207F 2E cs
2080 8D 16 12 20 LEA DX,@MES ;on LCD and display
2084 8B C2 MOVW AX,DX ;fresh message
2087 9A 13 00 00 FB CALLS 0FB00:0013H
208B B0 08 SRL: MOVB AL,08H ;Else, output keycode
208D 9A 00 00 00 FB CALLS 0FB00:0000H ;on console.
2092 9A 00 00 00 FB CALLS 0FB00:0000H
2097 0A FB ORB BH,BL ;Compute key value
2099 8A C7 MOVB AL,BH ;from row code &
;column count
209B 9A 52 00 00 FB CALLS 0FB00:0052H ;Display key
;value
20A0 BB 00 00 MOVW BX,00H
20A3 EB 96 JMP KSCAN ;Repeat continuously
KEYBOARD INTERFACE
31
20A5 51 DELAY: PUSH CX
20A6 B9 FF FF MOVW CX,0FFFFH ;Delay routine
20A9 E2 FE LOOP $
20AB 59 POP CX
20AC C3 RET
5.0 EXERCISES
The user can further implement the following functions with proper software.
1. All mathematical operations like ADD, SUBTRACT MULTIPLY & DIVIDE. The result can
displayed with an '=' sign. For -ve nos, a -ve sign has to be displayed.
2. The program can be modified such that both C & CE keys are recognized. CE clears the data
just entered where as C clears the complete result.
3. Combination of all the above mathematical functions. For eg, it can be made to solve the
following problem.
Find the value of (5+4) x 3 - 7
The following table gives the corresponding HEX value for the keys
LABLE ON
THE
KEYTOP
HEX CODE
LABLE ON
THE
KEYTOP
HEX
CODE
0 0 - 0C
1 1 X 0D
2 2 / 0E
3 3 / 0F
4 4 AC 10
5 5 CE 11
6 6 CHK 12
7 7 = 13
8 8 MC 14
9 9 MR 15
. 0A M 16
+ 0B M+ 17