Vous êtes sur la page 1sur 15

Experiment No.

10
MATRIX KEYBOARD INTERFACE

Aim: To write an ALP to interface a 3x8 matrix keyboard to 8086 and display the key pressed

DATA SEGMENT

BASE_ADDRESS EQU 0E880H


PORTA EQU BASE_ADDRESS+00H
PORTB EQU BASE_ADDRESS+01H
PORTC EQU BASE_ADDRESS+02H
CTRL EQU BASE_ADDRESS+03H

PROMPT DB 'Press any key on computer keyboard to return to DOS', 13,10,'$'


MSG DB 'The key pressed on the keyboard interface is: '
ASKIRES DB ?,13,10,'$'
ASKICOD DB '0123456789+-*/=% ABCDEF'

DATA ENDS

CODE SEGMENT
ASSUME CS:CODE, DS:DATA

MAIN: MOV AX, DATA


MOV DS, AX

MOV AL, 90H ;Initialize Port A as input port and


MOV DX, CTRL ;Port B and C as output ports
OUT DX, AL

MOV AH, 09H ;Display PROMPT string


LEA DX, PROMPT
INT 21H

AGAIN: MOV AH, 06H ;If any key is pressed on computer keyboard,
MOV DL, 0FFH ;return to DOS
INT 21H
JNZ QUIT

CALL SCAN ; BH = row no. AH = col no. if SI = 1

MOV AX, 03FFH ;Debounce


HERE1: MOV CX, 0FFFFH
HERE: LOOP HERE
DEC AX
JNZ HERE1

CALL SCAN

CMP SI, 0 ;If no key pressed, jump to AGAIN


JE AGAIN

CMP BH, 0 ;For row 0


JNE NEXT1
LEA BX, ASKICOD
JMP DIS
NEXT1: CMP BH, 1 ;For row 1
JNE NEXT2
LEA BX, ASKICOD+8
JMP DIS
NEXT2: LEA BX, ASKICOD+16 ;For row 2

DIS: MOV AL, AH


XLAT ;Get the key pressed
MOV ASKIRES, AL

MOV AH, 09H


LEA DX, MSG
INT 21H

JMP AGAIN

QUIT: MOV AH, 4CH


INT 21H

SCAN PROC ;Procedure to scan the key


MOV SI, 0
MOV CX, 3
MOV BH, 0 ;BH indicates row number
MOV AL, 80H

NXTROW: ROL AL, 1


MOV BL, AL

MOV DX, PORTC


OUT DX, AL

SUB DX, 2 ;DX will now point to Port A


IN AL, DX
CMP AL, 0
JNZ KEYID

MOV AL, BL
INC BH
LOOP NXTROW
RET

KEYID: MOV SI, 1


MOV CX, 8
MOV AH, 0 ;AH indicates column number

AGAIN1: ROR AL, 1


JC SKIP

INC AH
LOOP AGAIN1

SKIP: RET
SCAN ENDP

CODE ENDS
END MAIN
Experiment No. 11
SEVEN SEGMENT DISPLAY INTERFACE

Aim: To write an ALP to interface a seven segment display to 8086 and display "HELLO-"

DATA SEGMENT

BASE_ADDRESS EQU 0E880H


PORTA EQU BASE_ADDRESS+00H
PORTB EQU BASE_ADDRESS+01H
PORTC EQU BASE_ADDRESS+02H
CTRL EQU BASE_ADDRESS+03H

DSP_TBL DB 40H,3FH,38H,38H,79H,76H

DATA ENDS

CODE SEGMENT
ASSUME CS:CODE, DS:DATA

MAIN: MOV AX,DATA


MOV DS,AX

MOV AL, 80H ;Initialize all ports as output ports


MOV DX, CTRL
OUT DX, AL

DISP05: MOV CX, 06H ;Initialize the counter with 06H


MOV BL, 00h ;BL indicates the selected digit
MOV SI, OFFSET DSP_TBL

DISP00: MOV DX, PORTC ;Disable all digits and erase previous data
MOV AL, 07H
OUT DX, AL

MOV DX, PORTC ;Select the digit


MOV AL, BL
OUT DX, AL

MOV DX, PORTA ;Send the data


LODSB
OUT DX, AL

PUSH CX
MOV AX, 01H ;Delay
HERE1: MOV CX, 0FFFFH
HERE: LOOP HERE
DEC AX
JNZ HERE1
POP CX

INC BL ;Select next digit


CMP BL, 05
JLE DISP20
MOV BL, 00

DISP20: LOOP DISP00


MOV AH, 0BH ;If any key is pressed on computer keyboard,
INT 21H ;return to DOS
OR AL, AL
JZ DISP05

QUIT: MOV AH, 4CH


INT 21H

CODE ENDS
END MAIN
Experiment No. 12
LOGIC CONTROLLER INTERFACE

Expt. No. 12(a)


Ring Counter using Logic Controller

Aim: To write an ALP to interface a logic controller to 8086 and implement a ring counter

DATA SEGMENT

BASE_ADDRESS EQU 0E880H


PORTA EQU BASE_ADDRESS+00H
PORTB EQU BASE_ADDRESS+01H
PORTC EQU BASE_ADDRESS+02H
CTRL EQU BASE_ADDRESS+03H

DATA ENDS

CODE SEGMENT
ASSUME CS:CODE, DS:DATA

MAIN: MOV AX,DATA


MOV DS,AX

MOV AL, 80H ;Initialize all ports as output ports


MOV DX, CTRL
OUT DX, AL

MOV DX, PORTA ;Send 01H to Port A


MOV AL, 01h
OUT DX, AL

RPT: ROR AL, 1 ;Rotate AL to left once


OUT DX, AL

MOV BX, 0FFFH ;Delay


HERE1: MOV CX, 0FFFFH
HERE: LOOP HERE
DEC BX
JNZ HERE1

PUSH AX
MOV AH, 0BH ;If any key is pressed on computer keyboard,
INT 21H ;return to DOS
OR AL, AL
POP AX
JZ RPT

QUIT: MOV AH, 4CH


INT 21H

CODE ENDS
END MAIN
Expt. No. 12(b)
Binary Up/Down Counter using Logic Controller

Aim: To write an ALP to interface a logic controller to 8086 and implement a binary up/down counter

DATA SEGMENT

BASE_ADDRESS EQU 0E880H


PORTA EQU BASE_ADDRESS+00H
PORTB EQU BASE_ADDRESS+01H
PORTC EQU BASE_ADDRESS+02H
CTRL EQU BASE_ADDRESS+03H

DATA ENDS

CODE SEGMENT
ASSUME CS:CODE, DS:DATA

MAIN: MOV AX,DATA


MOV DS,AX

MOV AL, 80H ;Initialize all ports as output ports


MOV DX, CTRL
OUT DX, AL

MOV DX, PORTA ;Send 00H to Port A


MOV AL, 00H
OUT DX, AL

RPT: ADD AL, 01 ;for up counter


; SUB AL, 01 ;for down counter
OUT DX, AL

MOV BX, 0FFFH ;Delay


HERE1: MOV CX, 0FFFFH
HERE: LOOP HERE
DEC BX
JNZ HERE1

PUSH AX
MOV AH, 0BH ;If any key is pressed on computer keyboard,
INT 21H ;return to DOS
OR AL, AL
POP AX
JZ RPT

QUIT: MOV AH, 4CH


INT 21H

CODE ENDS
END MAIN
Experiment No. 13
STEPPER MOTOR INTERFACE

Aim: To write an ALP to interface a stepper motor to 8086 and rotate it in clockwise/anticlockwise direction

DATA SEGMENT

BASE_ADDRESS EQU 0E880H


PORTA EQU BASE_ADDRESS+00H
PORTB EQU BASE_ADDRESS+01H
PORTC EQU BASE_ADDRESS+02H
CTRL EQU BASE_ADDRESS+03H

NSTEPS DB 200 ;for one full rotation

DATA ENDS

CODE SEGMENT
ASSUME CS:CODE, DS:DATA

MAIN: MOV AX,DATA


MOV DS,AX

MOV AL, 80H ;Initialize all ports as output ports


MOV DX, CTRL
OUT DX, AL

MOV AL, 33H ;Send 33H to Port C


STEP: MOV DX, PORTC
OUT DX, AL

MOV BX, 0FFH ;Delay


HERE1: MOV CX, 0FFFFH
HERE: LOOP HERE
DEC BX
JNZ HERE1

ROR AL, 01h ;for clockwise rotation


; ROL AL, 01h ;for anticlockwise rotation

DEC NSTEPS ;Decrement NSTEPS and


JNZ STEP ;jump to STEP if not zero

QUIT: MOV AH, 4CH


INT 21H

CODE ENDS
END MAIN
Experiment No. 14
ADC INTERFACE

Aim: To write an ALP to interface an ADC to 8086 and display the digital value

DATA SEGMENT

BASE_ADDRESS EQU 0E880H


PORTA EQU BASE_ADDRESS+00H
PORTB EQU BASE_ADDRESS+01H
PORTC EQU BASE_ADDRESS+02H
CTRL EQU BASE_ADDRESS+03H

CH_ADDR DB 0
MSG1 DB 10,13,'ENTER CHANNEL NUMBER (0-7) --> ','$'
MSG2 DB 10,13,'WRONG ENTRY',0DH,0AH,'$'

DATA ENDS

CODE SEGMENT
ASSUME CS:CODE, DS:DATA

MAIN: MOV AX,DATA


MOV DS,AX

MOV AL, 90H ;Initialize Port A as input port and


MOV DX, CTRL ;Port B and C as output ports
OUT DX, AL

AGAIN: MOV AH, 09H ;Display MSG1


LEA DX, MSG1
INT 21H

MOV AH, 01H ;get channel number


INT 21H
SUB AL, 30H
MOV CH_ADDR,AL

CMP AL, 08
JC COR_IP

MOV AH, 09H ;Display MSG2


LEA DX, MSG2
INT 21H

JMP AGAIN

COR_IP: MOV DL, 2DH ;display '-'


MOV AH, 2
INT 21H

MOV DL, 3EH ;display '>'


MOV AH, 2
INT 21H

AD00: MOV AL, CH_ADDR


MOV DX, PORTC ;output channel number
OUT DX, AL
;start conversion

MOV AL, 0FH ;PC7 (START/ALE) set


MOV DX, CTRL
OUT DX, AL

MOV CX, 20H


CALL DELAY

MOV AL, 0EH ;PC7 reset


MOV DX, CTRL
OUT DX, AL

;look for EOC

MOV AL, 0CH ;reset PC6 to read EOC


MOV DX, CTRL
OUT DX, AL

AD01: MOV DX, PORTA


IN AL, DX ;poll the EOC line which
AND AL, 80H ;is connected to PA7 line
CMP AL, 80H
JNZ AD01

;if EOC (PA7) is high read the digital value otherwise


;again check for EOC (PA7) line

MOV AL, 0DH ;set OE (PC6) to read value


MOV DX, CTRL
OUT DX,AL

;before reading data from ADC set PC6 line

MOV DX, PORTA


IN AL, DX ;read digital value
MOV AH, 0
MOV SI, AX

MOV AX, SI ;display adc value


MOV CH, AL
AND AL, 0F0H
MOV CL, 04H
ROR AL, CL
CMP AL, 0AH
JNC DN1
ADD AL, 30H
JMP DN2
DN1: SUB AL, 0AH
ADD AL, 41H
DN2: MOV DL, AL
MOV AH, 02H
INT 21H

MOV AL, CH
AND AL, 0FH
CMP AL, 0AH
JNC DN3
ADD AL, 30H
JMP DN4
DN3: SUB AL, 0AH
ADD AL, 41H
DN4: MOV DL, AL
MOV AH, 2
INT 21H

MOV DL, 08H ;backspace


MOV AH, 2
INT 21H

MOV DL, 08H ;backspace


MOV AH,2
INT 21H

MOV AH,0BH ;check for key


INT 21H
OR AL, AL
JNZ DN5

MOV CX, 035H


CALL DELAY

JMP AD00

DN5: MOV AH, 4CH


INT 21H

DELAY PROC ;Delay procedure

LUP2: PUSH CX
MOV CX, 0FFFFH
LUP1: LOOP LUP1
POP CX
LOOP LUP2
RET

DELAY ENDP

CODE ENDS
END MAIN
Experiment No. 15
DAC INTERFACE

Expt. No. 15(a)


Sine Wave Generation using DAC

Aim: To write an ALP to interface an DAC to 8086 and generate a sine wave

DATA SEGMENT

BASE_ADDRESS EQU 0E880H


PORTA EQU BASE_ADDRESS+00H
PORTB EQU BASE_ADDRESS+01H
PORTC EQU BASE_ADDRESS+02H
CTRL EQU BASE_ADDRESS+03H

;Look-up table for sine values at a range of 15 degrees

LUT DB 80H,0A1H,0C0H,0DAH,0EEH,0FBH
DB 0FFH,0FBH,0EEH,0DAH,0C0H,0A1H
DB 80H,5FH,40H,26H,12H,05H
DB 00H,05H,12H,26H,40H,5FH

DATA ENDS

CODE SEGMENT
ASSUME CS:CODE, DS:DATA

MAIN: MOV AX,DATA


MOV DS,AX

MOV AL, 80H ;Initialize all ports as output ports


MOV DX, CTRL
OUT DX, AL

RPT: MOV CX, 24 ;No. of values in look-up table


LEA SI, LUT
AGAIN: MOV AL, [SI]
MOV DX, PORTA ;Send to Port A (output1)
OUT DX, AL
MOV DX, PORTB ;Send to Port B (output2)
OUT DX, AL

PUSH CX
MOV BX, 0FH ;Delay
HERE1: MOV CX, 0FFH
HERE: LOOP HERE
DEC BX
JNZ HERE1
POP CX

INC SI
LOOP AGAIN

PUSH AX
MOV AH, 0BH ;If any key is pressed on computer keyboard,
INT 21H ;return to DOS
OR AL, AL
POP AX
JZ RPT
QUIT: MOV AH, 4CH
INT 21H

CODE ENDS
END MAIN

Expt. No. 15(b)


Square Wave Generation using DAC

Aim: To write an ALP to interface an DAC to 8086 and generate a square wave

DATA SEGMENT

BASE_ADDRESS EQU 0E880H


PORTA EQU BASE_ADDRESS+00H
PORTB EQU BASE_ADDRESS+01H
PORTC EQU BASE_ADDRESS+02H
CTRL EQU BASE_ADDRESS+03H

DATA ENDS

CODE SEGMENT
ASSUME CS:CODE, DS:DATA

MAIN: MOV AX,DATA


MOV DS,AX

MOV AL, 80H ;Initialize all ports as output ports


MOV DX, CTRL
OUT DX, AL

RPT: MOV AL, 0FFH ;Send FFH to output ports


CALL OUTPUT
CALL DELAY

MOV AL, 00H ;Send 00H to output ports


CALL OUTPUT
CALL DELAY

PUSH AX
MOV AH, 0BH ;If any key is pressed on computer keyboard,
INT 21H ;return to DOS
OR AL, AL
POP AX
JZ RPT

QUIT: MOV AH, 4CH


INT 21H

OUTPUT PROC ;Procedure to output data


MOV DX, PORTA
OUT DX, AL
MOV DX, PORTB
OUT DX, AL
RET
OUTPUT ENDP

DELAY PROC ;Delay procedure


MOV CX, 0FFFFH
HERE: LOOP HERE
RET
DELAY ENDP

CODE ENDS
END MAIN

Expt. No. 15(c)


Triangular Wave Generation using DAC

Aim: To write an ALP to interface an DAC to 8086 and generate a triangular wave

DATA SEGMENT

BASE_ADDRESS EQU 0E880H


PORTA EQU BASE_ADDRESS+00H
PORTB EQU BASE_ADDRESS+01H
PORTC EQU BASE_ADDRESS+02H
CTRL EQU BASE_ADDRESS+03H

DATA ENDS

CODE SEGMENT
ASSUME CS:CODE, DS:DATA

MAIN: MOV AX,DATA


MOV DS,AX

MOV AL, 80H ;Initialize all ports as output ports


MOV DX, CTRL
OUT DX, AL

RPT: MOV AL, 00H ;Output 00 for 0V level


UP: CALL OUTPUT
INC AL
CMP AL,0FFH
JNZ UP

UP1: CALL OUTPUT


DEC AL
CMP AL, 00H
JNZ UP1

PUSH AX
MOV AH, 0BH ;If any key is pressed on computer keyboard,
INT 21H ;return to DOS
OR AL, AL
POP AX
JZ RPT

QUIT: MOV AH, 4CH


INT 21H

OUTPUT PROC ;Procedure to output data


MOV DX, PORTA
OUT DX, AL
MOV DX, PORTB
OUT DX, AL
CALL DELAY
RET
OUTPUT ENDP
DELAY PROC ;Delay procedure
MOV CX, 06H
HERE: LOOP HERE
RET
DELAY ENDP

CODE ENDS
END MAIN
Experiment No. 16
LDR, RELAY and BUZZER INTERFACE

Aim: To write an ALP to interface an LDR, relay and buzzer to 8086 and implement light operated switch

DATA SEGMENT

BASE_ADDRESS EQU 0E880H


PORTA EQU BASE_ADDRESS+00H
PORTB EQU BASE_ADDRESS+01H
PORTC EQU BASE_ADDRESS+02H
CTRL EQU BASE_ADDRESS+03H

DATA ENDS

CODE SEGMENT
ASSUME CS:CODE, DS:DATA

MAIN: MOV AX,DATA


MOV DS,AX

MOV AL, 81H ;Initialize Port CL as input port and


MOV DX, CTRL ;other ports as output ports
OUT DX, AL

;PC1 connected to LDR I/P


;PC4 connected to Buzzer-Relay

MOV AL, 08H ;Buzzer-Relay OFF


MOV DX, CTRL
OUT DX, AL

CHKLDR: MOV DX, PORTC


IN AL, DX
AND AL, 02H
JNZ BZRLYON

MOV AL, 08H ;Buzzer-Relay OFF


MOV DX, CTRL
OUT DX, AL
JMP CHKLDR

BZRLYON: MOV AL, 09H ;Buzzer-Relay ON


MOV DX, CTRL
OUT DX, AL

MOV CX, 0FFFFH ;Delay


HERE: LOOP HERE

PUSH AX
MOV AH, 0BH ;If any key is pressed on computer keyboard,
INT 21H ;return to DOS
OR AL, AL
POP AX
JZ CHKLDR

QUIT: MOV AH,4CH


INT 21H
CODE ENDS
END MAIN

Vous aimerez peut-être aussi