Saturday, September 26, 2009
8085 programming (part4)
Statement: Write a program to initialize 8255 in the configuration given below
Sample 1:
Write a program to initialize 8255 in the configuration given below:
1. Port A: Simple input
2. Port B: Simple output
3. Port CL: Output
4. Port Cu: Input
Assume address of the control word register of 8255 as 83H.
Solution:
SOURCE PROGRAM 1:
MVI A, 98H : Load control word
OUT 83H : Send control word
Sample 2:
Write a program to initialize 8255 in the configuration given below:
1. Port A: Output with handshake
2. Port B: Input with handshake
3. Port CL: Output
4. Port Cu: Input
Assume address of the control word register of 8255 as 23H.
SOURCE PROGRAM 2:
MVI A, AEH : Load control word
OUT 23H : Send control word
Source program:
BACK: MVI A, 0lH : Load bit pattern to make PCο high
OUT 83H : Send it to control word register
CALL DELAY : Call Delay subroutine
MVI A, 00H : Load bit pattern to make PCο Low
OUT 83H : Send it to control word register
CALL Delay : Call Delay subroutine
JMP BACK : Repeat
Delay subroutine:
Delay: LXI D, Count
Back: DCX D
MOV A, D
ORA E
JNZ Back
RET
FLOWCHART
Statement: Design a system (both Software and Hardware) that will cause 4 LEDs to flash 10 times when a push button switch is pressed. Use 8255. Assume persistence of vision to be 0.1 seconds.
Source program:
LXI SP, 2000 H : Initialize stack pointer
MVI A, 90H
OUT CR : Initialize 8255
BACK: IN PA : [Read status
ANI 01 : of push
JNZ BACK : button]
MVI B, 0AH : Initialize counter
AGAIN: MVI A, 00H : Load data to light LEDs
OUT PC : Send data on port C
CALL Delay : Call. Delay of 0.1 sec
MVI A, FFH : Load data to switch off LEDs
OUT PC : Send data on port C
CALL Delay : Call Delay of 0.1 sec
DCR B : Decrement count
JNZ AGAIN : If not zero repeat
JMP BACK : Jump back to read status
Delay subroutine:
Delay: LXI D, Count
Back: DCX D
MOV A, D
ORA E
JNZ Back
RET
INTERFACING SCHEME
Statement: Design a microprocessor system to control traffic lights. The traffic light arrangement is as shown in Fig. The traffic should be controlled in the following manner.
1) Allow traffic from W to E and E to W transition for 20 seconds. 2) Give transition period of 5 seconds (Yellow bulbs ON) 3) Allow traffic from N to 5 and 5 to N for 20 seconds 4) Give transition period of 5 seconds (Yellow bulbs ON) 5) Repeat the process.
Fig. shows the interfacing diagram to control 12 electric bulbs. Port A is used to control lights on N-S road and Port B is used to control lights on W-E road. Actual pin connections are listed in Table 1 below.
The electric bulbs are controlled by relays. The 8255 pins are used to control relay on-off action with the help of relay driver circuits. The driver circuit includes 12 transistors to drive 12 relays. Fig. also shows the interfacing of 8255 to the system.
INTERFACING DIAGRAM
SOFTWARE FOR TRAFFIC LIGHT CONTROL
Source program:
MVI A, 80H : Initialize 8255, port A and port B
OUT 83H (CR) : in output mode
START: MVI A, 09H
OUT 80H (PA) : Send data on PA to glow R1 and R2
MVI A, 24H
OUT 81H (PB) : Send data on PB to glow G3 and G4
MVI C, 28H : Load multiplier count (40ıο) for delay
CALL DELAY : Call delay subroutine
MVI A, 12H
OUT (81H) PA : Send data on Port A to glow Y1 and Y2
OUT (81H) PB : Send data on port B to glow Y3 and Y4
MVI C, 0AH : Load multiplier count (10ıο) for delay
CALL: DELAY : Call delay subroutine
MVI A, 24H
OUT (80H) PA : Send data on port A to glow G1 and G2
MVI A, 09H
OUT (81H) PB : Send data on port B to glow R3 and R4
MVI C, 28H : Load multiplier count (40ıο) for delay
CALL DELAY : Call delay subroutine
MVI A, 12H
OUT PA : Send data on port A to glow Y1 and Y2
OUT PB : Send data on port B to glow Y3 and Y4
MVI C, 0AH : Load multiplier count (10ıο) for delay
CALL DELAY : Call delay subroutine
JMP START
Delay Subroutine:
DELAY: LXI D, Count : Load count to give 0.5 sec delay
BACK: DCX D : Decrement counter
MOV A, D
ORA E : Check whether count is 0
JNZ BACK : If not zero, repeat
DCR C : Check if multiplier zero, otherwise repeat
JNZ DELAY
RET : Return to main program
Statement: Interface a Stepper Motor to the 8085 microprocessor system and write an 8085 assembly language program to control the Stepper Motor.
HARDWARE FOR STEPPER MOTOR CONTROL
A stepper motor is a digital motor. It can be driven by digital signal. Fig. shows the typical 2 phase motor rated 12V /0.67 A/ph interfaced with the 8085 microprocessor system using 8255. Motor shown in the circuit has two phases, with center-tap winding. The center taps of these windings are connected to the 12V supply. Due to this, motor can be excited by grounding four terminals of the two windings. Motor can be rotated in steps by giving proper excitation sequence to these windings. The lower nibble of port A of the 8255 is used to generate excitation signals in the proper sequence. These excitation signals are buffered using driver transistors. The transistors are selected such that they can source rated current for the windings. Motor is rotated by 1.80 per excitation.
INTERFACING SCHEME
SOFTWARE FOR STEPPER MOTOR CONTROL
As port A is used as an output port, control word for 8255 is 80H.
Stepper Motor Control Program:
6000H Excite code DB 03H, 06H,
09H, OCH : This is the code sequence for clockwise rotation
Subroutine to rotate a stepper motor clockwise by 360° - Set the counts:
MVI C, 32H : Set repetition count to 50ıο
START: MVI B, 04H : Counts excitation sequence
LXI H, 6000H : Initialize pointer
BACK1: MOV A, M : Get the Excite code
OUT PORTA : Send Excite code
CALL DELAY : Wait
INX H : Increment pointer
DCR B : Repeat 4 times
JNZ BACK1
Delay subroutine:
Delay: LXI D, Count
Back: DCX D
MOV A, D
ORA E
JNZ Back
RET
FLOWCHARTS
Source Program
Stepper motor subroutine
Delay routine
Statement: Interface an 8-digit 7 segment LED display using 8255 to the 8085 microprocessor system and write an 8085 assembly language routine to display message on the display.
HARDWARE FOR EIGHT DIGIT SEVEN SEGMENT DISPLAY INTERFACE
Fig. shows the multiplexed eight 7-segment display connected in the 8085 system using 8255. In this circuit port A and port B are used as simple latched output ports. Port A provides the segment data inputs to the display and port B provides a means of selecting a display position at a time for multiplexing the displays. A0-A7 lines are used to decode the addresses for 8255. For this circuit different addresses are:
PA = 00H PB = 01H
PC = 02H CR = 03H.
The register values are chosen in Fig. such that the segment current is 80 mA. This current is required to produce an average of 10 mA per segment as the displays are multiplexed. In this type of display system, only one of the eight display position is 'ON' at any given instant. Only one digit is selected at a time by giving low signal on the corresponding control line. Maximum anode current is 560 mA (7-segments x 80 mA = 560 mA), but the average anode current is 70 mA.
SOFTWARE FOR EIGHT DIGIT SEVEN SEGMENT DISPLAY INTERFACE
Source program:
SOFTWARE TO INITIALIZE 8255:
MVI A, 80H : Load control word in AL
OUT CR : Load control word in CR
SUBROUTINE TO DISPLAY MESSAGE ON MULTIPLEXED LED DISPLAY:
SET UP REGISTERS FOR DISPLAY:
MVI B, 08H : load count
MVI C, 7FH : load select pattern
LXI H, 6000B : starting address of message
DISPLAY MESSAGE:
DISP 1: MOV A, C : select digit
OUT PB
MOV A, M : get data
OUT PA : display data
CALL DELAY : wait for some time
DISP 1: MOV A, C
RRC
MOV C, A : adjust selection pattern
INX H
DCR B : Decrement count
JNZ DISP 1 : repeat 8 times
RET
Note: This "display message subroutine" must be called continuously to display the 7-segment coded message stored in the memory from address 6000H.
Delay subroutine:
Delay: LXI D, Count
Back: DCX D
MOV A, D
ORA E
JNZ Back
RET
Interfacing with IC 8279 (Keyboard and Display Controller)
Statement: Interface an 8 x 8 matrix keyboard to 8085 through 8279 in 2-key lockout mode and write an assembly language program to read keycode of the pressed key. The external clock frequency is 2MHz. Use I/O mapped I/O technique. (Dont use any Interrupts)
HARDWARE FOR 8 x 8 MATRIX KEYBOARD INTERFACE
SOFTWARE FOR 8 x 8 MATRIX KEYBOARD INTERFACE
The three steps needed to write the software are:
Step 3: Find Read FIFO/sensor RAM command word.
Source program:
MVI A, 00H : Initialize keyboard/display
OUT 81H : in encoded scan keyboard-2 keylockout mode
MVI A, 34H
OUT 81H : Initialize prescaler count
BACK: IN 81H : Read FIFO status word
ANI 07H : Mask bit B3 to B7
JZ BACK : If 0, key is not pressed wait for key press else read FIFO RAM
MVI A, 40H : Initialize 8279 in read
OUT 81H : FI FO RAM mode
IN 80H : Read FIFO RAM (keycode)
HLT : Stop program execution.
FLOWCHART
Statement: Interface an 8 x 8 matrix keyboard to 8085 through 8279 in 2-key lockout mode and write an assembly language program to read keycode of the pressed key. The external clock frequency is 2MHz. Use I/O mapped I/O technique.
HARDWARE FOR 8 x 8 MATRIX KEYBOARD INTERFACE(With Interrupt)
Fig. shows the interfacing of 8 x 8 matrix keyboard in interrupt driven keyboard mode. In the interrupt driven mode interrupt line from 8279 is connected to the one of the interrupt input of 8085 except INTR. Here, INT line from 8279 is connected to the interrupt RST 7.5 of 8085. Other signal connections are same as in the non interrupt mode.
SOFTWARE FOR 8 x 8 MATRIX KEYBOARD INTERFACE(With Interrupt)
The three steps needed to write the software are:
Step 1: Find keyboard/display command word.
Step 2: Find program clock command word
Step 3: Find Read FIFO/sensor RAM command word.
Source program:
MVI A, 00H : Initialize keyboard/display in encoded
OUT 81H : scan keyboard 2 key lockout mode
MVI A, 34H
OUT 81H : Initialize prescaler count
MVI A, 0BH : Load mask pattern to enable RST 7.5
SIM : mask other interrupts
EI : Enable Interrupt
HERE: JMP HERE : Wait for the interrupt
Interrupt Subroutine:
MVI A, 40H : Initialize 8279 in read FIFO
OUT 81H : RAM mode
IN 80H : Read FIFO RAM (keycode)
EI : Enable Interrupt
RET : Return to main program
Note: In the interrupt driven keyboard, when key is pressed, key code is loaded into FIFO RAM and interrupt is generated. This interrupt signal is used to tell CPU that there is a keycode in the FIFO RAM. CPU then initiates read command with in the interrupt service routine to read key code from the FIFO RAM.
FLOWCHART
Statement: Interface an 8 x 4 matrix keyboard to 8085 through 8279.
HARDWARE FOR INTERFACING 8x4 MATRIX KEYBOARD
Fig. Interfacing 8 x 4 keyboard matrix in decoded scan keyboard mode.
NOTE: As keyboard is having 8 rows and 4 columns, only 4 scan lines are required and we can avoid external decoder to generate scan lines by selecting decoded scan keyboard mode.
SOFTWARE FOR INTERFACING 8x4 MATRIX KEYBOARD
Source program:
MVI A, 00H : Initialize keyboard/display in encoded
OUT 81H : scan keyboard 2 key lockout mode
MVI A, 34H
OUT 81H : Initialize prescaler count
MVI A, 0BH : Load mask pattern to enable RST 7.5
SIM : mask other interrupts
EI : Enable Interrupt
HERE: JMP HERE : Wait for the interrupt
Interrupt Subroutine:
MVI A, 40H : Initialize 8279 in read FIFO
OUT 81H : RAM mode
IN 80H : Read FIFO RAM (keycode)
EI : Enable Interrupt
RET : Return to main program
Statement: Interface 8/7-segment digits (common cathode) to 8085 through 8279 and write an 8085 assembly language program to display 1 to 8 on the eight seven segment digits. External clock frequency is 3 MHz.
HARDWARE FOR EIGHT SEVEN SEGMENT DIGITS INTERFACE
Fig. shows the interfacing of eight 7-segment digits to 8085 through 8279. As shown in the figure eight display lines (Bo-B3 and Ao-A3) are buffered with the help of transistor and used to drive display digits. These buffered lines are connected in parallel to all display digits. So, Sl and S2 lines are decoded and decoded lines are used for selection of one of the eight digits.
SOFTWARE FOR EIGHT SEVEN SEGMENT DIGITS INTERFACE
To display 1 to 8 numbers on the eight 7-segment digits we have to load 7-segment codes for 1 to 8 numbers in the corresponding display locations.
The three steps needed to write the software are:
Step 1: Find keyboard/display command word.
Step 2: Find program clock command word
Step 3: Find display RAM command word.
Source program:
LXI B, 6200B : Initialize lookup table pointer
MVI C, 08H : Initialize counter
MVI A, 00H : Initialize keyboard/display
OUT 8IH : Mode
MVI A, 3EH : Initialize prescaler count
OUT 8IH
MVI A, 90H : Initial size 8279 in write Display
OUT 8IH : RAM-mode
BACK : MOV A, M : Get the 7-segment code
OUT 80H : Write 7-segment code in display RAM
INX H : Increment lookup table pointer
DCR C : Decrement counter
JNZ BACK : if count = 0 stop, otherwise go to back
HLT : Stop program execution
FLOWCHART
LOOK UP TABLE
Statement: Interface 4 x 4 matrix keyboard and 4 digit 7-segment display and write an tssembly language program to read keycode of the pressed key and display same key on :he 7 segment display.
HARDWARE FOR 4x4 MATRIX KEYBOARD & 4 DIGIT 7 SEGMENT DISPLAY INTERFACE
Fig. shows interfacing diagram. Here, 4 scan lines are sufficient to scan matrix keyboard and to select display digits. Hence decoded mode is used.
SOFTWARE FOR 4x4 MATRIX KEYBOARD & 4 DIGIT 7 SEGMENT DISPLAY INTERFACE
The three steps needed to write the software are:
Step 1: Find keyboard/display command word.
Step 2: Find program clock command word
Step 3: Find Read FIFO RAM command word.
Step 3: Find Write FIFO RAM command word.
Source program:
MVI A, 00H : Initialize keyboard/display in encoded
OUT 81H : scan keyboard 2 key lockout mode
MVI A, 34H
OUT 81H : Initialize prescaler count
MVI A, 0BH : Load mask pattern to enable RST 7.5
SIM : mask other interrupts
EI : Enable Interrupt
HERE: JMP HERE : Wait for the interrupt
Interrupt service routine
MVI A, 40H : Initialize 8279 in read FIFO RAM mode
OUT 81H
IN 80H : Get keycode
MVI H, 62H : Initialize memory pointer to point
MOV L, A : 7-Segment code
MVI A, 80H : Initialize 8279 in write display RAM mode
OUT 81H
MOV A, M : Get the 7 segment code
OUT 80H : Write 7-segment code in display RAM
EI : Enable interrupt
RET : Return to main program
FLOWCHARTS
Source Program and Interrupt Service Routine
Statement: Write an assembly language program to roll message 'HELL0123' from right to left
HARDWARE FOR ROLLING HELLO123
Fig. shows the interfacing of eight 7-segment digits to 8085 through 8279. As shown in the figure eight display lines (Bo-B3 and Ao-A3) are buffered with the help of transistor and used to drive display digits. These buffered lines are connected in parallel to all display digits. So, Sl and S2 lines are decoded and decoded lines are used for selection of one of the eight digits.
SOFTWARE FOR ROLLING HELLO123
The three steps needed to write the software are:
Step 1: Find keyboard/display command word.
Step 2: Find program clock command word
Step 3: Find display RAM command word.
Clear command word.
Source program:
LXI B, 6200B : Initialize lookup table pointer
MVI C, 08H : Initialize counter
MVI A, 10H : Initialize keyboard/display in right entry mode
OUT 8IH : Mode
MVI A, 3EH : Initialize prescaler count
OUT 8IH
MVI A, D0H : Clear Display
OUT 8IH
MVI A, 90H : Initialize 8279 in write display
OUT 81H : RAM mode
BACK : MOV A, M : Get the 7-segment code
OUT 80H : Write 7-segment code in display RAM
INX H : Increment lookup table pointer
DCR C : Decrement counter
JNZ BACK : if count = 0 stop, otherwise go to back
HLT : Stop program execution
FLOWCHART
LOOK UP TABLE
Statement: Write an assembly language program to your name from right to left
HARDWARE FOR ROLLING HELLO123
Fig. shows the interfacing of eight 7-segment digits to 8085 through 8279. As shown in the figure eight display lines (Bo-B3 and Ao-A3) are buffered with the help of transistor and used to drive display digits. These buffered lines are connected in parallel to all display digits. So, Sl and S2 lines are decoded and decoded lines are used for selection of one of the eight digits.
SOFTWARE FOR ROLLING THE NAME - J.BINU
To roll the above namewe have to load 7-segment codes for characters within the message and it is necessary to configure 8279 in right entry mode
The three steps needed to write the software are:
Step 1: Find keyboard/display command word.
Step 2: Find program clock command word
Step 3: Find display RAM command word.
Clear command word.
Source program:
LXI B, 6200B : Initialize lookup table pointer
MVI C, 08H : Initialize counter
MVI A, 10H : Initialize keyboard/display in right entry mode
OUT 8IH : Mode
MVI A, 3EH : Initialize prescaler count
OUT 8IH
MVI A, D0H : Clear Display
OUT 8IH
MVI A, 90H : Initialize 8279 in write display
OUT 81H : RAM mode
BACK : MOV A, M : Get the 7-segment code
OUT 80H : Write 7-segment code in display RAM
INX H : Increment lookup table pointer
DCR C : Decrement counter
JNZ BACK : if count = 0 stop, otherwise go to back
HLT : Stop program execution
FLOWCHART
LOOK UP TABLE
Labels: 8085, assembly language, microprocessors
Subscribe to Posts [Atom]