MP8085 Lab Manual
MP8085 Lab Manual
MP8085 Lab Manual
Prepared By
C.Kalaivani
INDEX
S.No. Date Name of the Experiment Page No. Marks Remarks
S.No.
Date
Page No.
Marks
Remarks
8085 ARCHITECTURE:
2. INPUT/OUTPUT: Parallel: 48TTL I/O lines using two no.s of 8255 Series: One no.of Rs 232C compatible serial interfaces using 8251A VSARI Timer : 3-channel 16 bit programmable timer using 8253 . channel - 0 : Banel rate clock generater for 8251 A 5 . USARI . Channel - 1 : Single stepping user program Channel - 2 : Hardware single stepping user programming . 4. DISPLAY : 6 digit , 0.3, 7 segment RED ( E1 ) display with filter . 4 - digit - address display 2 - digit - data display 5 . DISPLAY KEYBOARD : 21 keys ( soft keys including command keys and hexadecimal keys ) 6.POWER SUPPLY : 5V @ 1A
8
5V @ 500 ma - EB1 + 12 V @ 200 ma - EB2 - 12 V @ 100 ma 7 . POWER SUPPLY CONNECTION : ( EXTERNAL ) EB2 i/p - 230 v AC @ 50 HZ o/p - 5v @ 3A EB1 230 V AC @ 50 HZ 5V @ 600 mA . SOFTWARE SPECIFICATION : Moniter program - 8 K Hex key function 1. Hex key . 2. Register key 3. Command key . 21 KEYS : 16 keys - hex , command , register keys remaining are stored alone keys . KEY : 1 . Hex keys 0 , 1 ,2 , . F 2 . SUB - substituting the memory contents . when NEXT key is pressed , immediately press after this key it makes the user program . ( user RAM 4100 )
9
3 . Register key E Examine 8085 register keys . TW - Writes data from memory on to the audio tape . TR - Retries data from an audio tape to memory . BLOC - Block serch for a byte . FILL - Fill a block of RAM memory with desired data. SER - Transmit / receive data to/ from the serial port . F2 Function key. GO Start running a particular program. SNG Single step a program instruction by instruction PL Register key PCL. PH - Register key PCH. PC program counter. H high L low F3 Function key F[0] Input a byte from a port. F[1] - Output a byte from a port. F3 with SNG For hardware single steeping Sl Register key SPL Sh - Register key SPL. Bc-check a particular block for blank. Sp Stack pointer MOV Move a block of memory to another block CMP-Compare 2 memory blocks INS Insert a byte with memory DEL- Delete a byte with memory
10
INPUT OUTPUT ALLOCATION TABLE: USER DEVELOPMENT 2nd parallel port (8255) 1st parallel port (8255) 8253 HARDWARE SINGLE STEP CONTROL KEYBOARD/DISPLAY CONTROLLER JUMPER KEYS: J3 &J4 RAM J5 EPROM
11
BATTERY BACK UP: 3.6V @ 60mA Nickel cadmium battery is used which provides power to RAM during power OFF and gets charged during power -ON. The data in RAM can be retained to a maximum of 12 hours if the battery has been charged to its maximum extent.
2. REGISTER COMMAND :
To examine the register content . Reset - reg - b - 45 - NEXT - . - INT
12
This command execute a block of program whose start address are specified . It is equivalent to pressing INTR key while the program is being executed . GO - starting address - NEXT - break point address - EXEC - content will be displayed - reg - b ( or ) - content will be displayed
5. SINGLE STEP:
This command helps the user to execute programs in steps ( ie ., ) instruction by instruction Useful while debugging SNG - address - NEXT
6. FILL COMMAND :
FILL - starting address - NEXT - final address - data - INT This command moves permits a block of RAM memory to be filled with desired data type .
8. COMPARE COMMAND :
This command compares the contents of two blocks of memory locations and display address whose contents are not identical
13
CMP - starting add - NEXT - ending add - NEXT - destination address - NEXT - INT
9. INSERT COMMAND :
This command inserts the specified bytes in desired memory location INS - ending add - NEXT - insert add - NEXT - data - NEXT - INT
14
byte . BLOC - starting add - NEXT - end add -b NEXT - byte - NEXT INT
technology using TTL & comprises of 1130,000 transistor. 8085 microprocessor consists of a 1. 16 bit address bus. 2. 8 bit data bus. The sped of 8085 microprocessor is 3.07 MHz. SIGNAL: ADDRESS BUS: The 8085 has 8 signal lines. A15-A8 which are unidirectional & are used as higher order address bus. MULTIPLEXED ADDRESS/DATA BUS: The signals AD7-AD0 are bidirectional. They are used for both lower order address bus as well as data bus which is separated using a latch. CONTROL & STATUS SIGNALS; The signals read & write are control signal and io/m, S0,S1 are status signal. ALT is a special signal that indicates if the AD7-AD0 is a data /address lines. TIMING & CONTROL UNIT: This unit synchronizes all the microprocessor operation with the clock & generates the control signal necessary for the communication between microprocessor and peripherals . A RITHMETIC AND LOGIC UNIT :
16
ALU performs the computing function .It includes the accumulator and temporary register held data during the calculations . Accumulator stores the result obtained . It is a 8 bit register . FLAGS : SIGN FLAGS : The flag is reset if the result in the accumulator is negative . If it is reset to zero the result is positive . ZEROFLAG : The flag is set if the result is zero else result is not zero . AUXILLIARY CARRY : If it is set , if the carry exists for D3 digits to be passed to the D4 digit . Otherwise the AC flag is result to zero . PARITY FLAG : It is set if there are even nos of ones in the result else the flag is reset . REGISTERS : There are 6 general purpose register storing 8 bit of data . They are combined in pair to store 16 bits of data . There are two temporary registers W & Z . They are internal registers and not available to the user . PROGRAM COUNTER :
17
This 16 bit of register deals with the sequencing of execution . It is a memory pointer to memory location from which the next byte is to be fetched . STACK POINTER : It is also a 16 bit registers which is a memory pointes to the memory location called stack . It defines where the program has to continue after the call of a subroutine. DISPLAY DRIVE: The segment drive output of 8279 from a signal 8 bit parallel output driving the display element segments . The correspondence between the data bus segment outputs of 8279 and the display element is shown . DISPLAY POSITION : To display character in the address field 8279 must be instructed to start from display positions O and to display character in the data field . 8279 must be instructed to start from display position by sending 94H to the command port of 8279. KEY BOARD: Keyboard display interface is responsible for all the operations. The keyboard is of a alphanumeric type. The input is sent to the process through the keyboard. First is the control keyboard which has control keys. The hexadecimal keys are of 16 that is from 0 to 9 & from A to F keys. Some of control keys are given. RES:
18
This key allows to terminate any present activity and to return to SDA to the initial state. CRYSTAL OSCILATOR: It is basically a tuned oscillator. The crystal is made of quartz material and provides a high degree of frequency stability & accuracy. Therefore, the crystal oscillator is used where frequency stability is needed. INTERUPTS CONTROLLER: It is a programmable interrupts managing device specifying designed for use with the interrupt signal of 8085 microprocessor. PROGRAMMABLE PERIPHERAL INTERFACE: The 8255 has 3 parts A,B & C. The ports A&B are 8 bit parallel ports. Port A can be programmed to work in any one of the three operating modes as input or output port . CONTROL LOGIC : The control section has six lines . Their functions and connections are as follows : READ This control signal enables the read operation when the signal is low , the MPU reads data from a selected I/O port of the 8255A WRITE This control signal enables the write operation when the signal goes low , the MPU write into a selected IO port or the control register.
19
RESET : This is an active high signal , it clears the control register and sets all ports in the input mode . CS , AO AND A1 : These are devices select signals . CS is connected to a decoded address , and AO& A1.. The CS signals in the master chip select , AO& A1 specify one port or the control register . CONTROL WORD : To communicate with peripherals through the 8255, three steps are necessary Determine the addresses of port A , B and C & of the control register according to the chip select logic and address lines AO & A1 . Write a control word in the control register . Write I/O instructions to communicate with peripherals through ports A , B and C . KEYBOARD DISPLAYINTERFACE ( 8279 ) The keyboard / display section of the MPs 85.3 is controlled by 8279 . The 8279 is configured for the following operation . Encode scan keyboard with 2 keys lock out 8 digits , 8 bits , left entry display . KEYBOARD SECTION : This section has eight lines ( RL0 RL7 ) That can be connected to eight columns of a key board .
20
SCAN SECTION : The scan section has a scan counter and four scan lines can ( SL0 SL3 ) .These four scan lines can be decoded using 4 to 16 decoder to generate 16 lines for scanning . DISPLAY SECTION: The display section has eight output lines divided unto two groups A0-A3 & B0-B3. These lines can be used, either a group of eight lines or two groups of four,in conjuction with the scan lines for a multiplexed display. PROGRAMMING THE 8279: The initialization commands can specify: left or right entry & key rollover. Clock frequency prescaler Starting address &incrementing mode of FIFO RAM Blanking formate BLOCK DIAGRAM OF 8253: DATA BUS BUFFER: This tri-state,8-bit,bidirectional buffer is connected buffer is connected to the data bus of the MPU. CONTROL LOGIC: The control section has five signals: Read
21
Write Chip select A0-A1 In the peripheral I/O mode,the read &write signal are peripheral I/O mode, connected to IOR respectively. CONTROL WORD REGISTER: This register is accessed when lines A0&A1 are at logic1.It is used to write a common word which specifies the counter to be used its mode and either a read or a write operation. 8251A(USART) The function requirements for the software approach are summarized below: An input port & an output port are required for interfacing .In data transmission, the MPU converts a parallel word into a stream of serial ports. READ WRITE AND CONTROL LOGIC: This selection includes R/W control logic six input signals, control logic and these buffer register Data register Control register Status register INPUT SIGNALS: CHIP SELECT: When this signal goes low, the 8251A is selected by the MPU for communication. CONTROL DATA:
22
When this signal is high, the control register or the status register is addressed. READ: When this signal goes low, the microprocessor either reads a status from the status register accepts data from the data buffer. RESET A high on this input resets the 8251A & forces it into idle mode. CLOCK: This is the clock input usally connected to the system clock. This clock does not control either the transmission or the reception rate.
DATA BUFFER: This bidirectional register can be addressed as an input port and an output port when the C/D pin . TRANSMITTER CLOCK: This input signal controls the rate at which bits are transmitted by the USART. The clock frequency can be 1,16 or 64 times the band. RECEIVER DATA Bits are received serially in this line and converted into a parallel byte in the receiver input register. RECEVIER CLOCK: This is a clock signal the convert the rate at which bits are received by the USART. The asynchronous mode, the clock can be set to 1,16 or 64 timer the band. POWER SUPPLY:
23
5V, 3A +12V, 250mA -12V, 100mA 30V, 100mA BATTERY OPTION: Holder is backed up by an optional battery, holder is provided for two A A type cells with quick charges circuit . User may use Ni cd or dry cells. Carie must be taken to remove the discharged cells
RESULT : Thus the entire structure , port 2IC of the microprocessor kit has been studied .
24
25
26
27
Exp.No:1.a Date:
Aim: To write assembly language programs for Intel 8085 microprocessor to perform the following
functions; (a) (b) (c) (d) (e) (f) 8 bit addition with carry 8 bit addition without carry 8 bit subtraction with carry 8 bit subtraction without carry 8 bit multiplication and 8 bit by 8 bit division.
Apparatus Required:
1.8085 Trainer 2. Operation Code sheet
28
FLOW CHART:
START
YES
If zero NO Store the accumulator NOthe content of D to C Move Store the accumulator
NO
Load the accumulator Move accumulator to C Move data to accumulator Move data to register C YES Add A to B NO 1
STOP
A 29
source code:
ADDRESS 8100 8103 8106 8107 8109 810B 810E 810F 8112 8113 8116 LABEL MNEMONICS LDA 9001 MOV B, A LDA 9002 ADD B MVI D, 00 JNC LOOP INR D OPCODE COMMENT
3A, 01, 90 Load the first 8 bit data in the accumulator 47 Move the 8 bit data in the accumulator to register B
3A, 02, 90 Load the second 8 bit data in the accumulator 80 16,00 Add the two 8 bit datas. Initialize a register for carry
D2, 0F, 81 Jump to store the result if there is no carry 14 32,10,90 7A 32,11,90 76 Else increment the carry register Store the result in memory. Move the carry in the register D to accumulator. Store carry bit in memory. Stop the program.
LOOP
30
Input and output: Before Execution Address Data 9000 8C 9001 9E 9002 00 9003 00 After Execution Address 9000 9001 9002 9003
Data 8C 9E 2A 01
31
Program code:
ADDRESS LABEL MNEMONICS OPCODE COMMENTS
32
3A 00 90 47 3A 01 90 80 32 02 90 76
Load first 8-bit data to accumulator. Move the 8-bit number to B register. Load second 8-bit data to accumulator. Add the two 8 bit data. Store the result in memory. Stop the program
33
Data 2A 5B 00
Data 2A 5B 85
35
FLOW CHART:
START
Move C to accumulator
Move accumulator to B
STOP
A 36
Program code:
ADDRESS 8000 8002 8005 8006 8009 800A 800D 800E 800F 8011 8014 8015 8018 LOOP LABEL MNEMONICS MVI D, 00 LDA 9000 MOV B, A LDA 9001 SUB B JNC LOOP INR D CMA ADI 01 STA 9000 MOV A, D STA 9003 HLT OPCODE 16 00 3A 00 90 47 3A 01 90 90 D2 80 11 14 2F C6 01 32 00 90 7A 32 03 90 76 COMMENTS Initialize a register for borrow Load the accumulator with minuend Move the 8 bit data in the accumulator to register B. Load the subtrahend data in the accumulator. Subtract the two 8 bit numbers. Jump to LOOP if no carry is set. Increment the accumulator content to obtain 2s Complement the accumulator content. Increment by 01 Store the result in address. Move the borrow bit in the register D to the accumulator. Store the borrow in memory. Stop the program
37
INPUT &OUTPUT
Data 04 06 0E 01
38
Program code:
ADDRESS 8000 8003 8004 LABEL MNEMONICS LDA 9000 MOV B, A LDA 9001 OPCODE 3A 00 90 47 3A 01 90 COMMENTS Load the first subtrahend data in the accumulator. Move the 8-bit data to B register. Load the minuend data to the accumulator.
39
90 32 02 90 76
Subtract the two 8 bit numbers. Store the result in memory. Stop the Program
40
Data 09 05 00
Data 09 05 04
41
FLOW CHART:
Programcode:
42
ADDRESS 8000 8003 8004 8007 8008 8009 800B 800C 800F 8010 8011 8014 8017 8018 801B
LABEL
MNEMONICS LDA 9000 MOV B, A LDA 9001 MOV C, A MVI A, 00 MVI D, 00 ADD B JNC LOOP INR D DCR C JNZ LOOP1
OPCODE 3A 00 90 47 3A 01 90 4F 3E 00 16 00 80 D2 10 80 14 0D C2 0B 80 32 02 90 7A 32 03 90 76
COMMENTS Load the first 8-bit number in accumulator. Move the 8-bit number to B register. Load the second 8-bit number in accumulator. Move the second 8-bit number to C register. Clear the contents of A register. Clear the contents of D register. Add the first 8-bit number to accumulator. Jump, decrement the count C if no carry. Else increment carries register by 1. Decrement counter register. Add the number again if count is not zero. Store the result in address. Move the carry to accumulator. Store the carry in address. Stop the program.
LOOP1
LOOP
HLT
43
FLOW CHART:
NO
NO
Move C to accumulator
44
INPUT &OUTPUT
Data 04 06 18 00
45
Algorithm:
STEP 1: Start the program. STEP 2: Load the accumulator from a specified address. STEP 3: Move the content of accumulator to register B. STEP 4: Then again load the accumulator from a specified address. STEP 5: Move immediately the content of register C to zero. STEP 6: Then increment the content of register B. STEP 7: Then subtract the content of register B from the accumulator. STEP 8: Then check for carry. STEP 9: If carry is not present then add the content of B with the accumulator. STEP10: If carry is present the content of register c is increased and the process repeated. STEP 11: Then decrement the content of register C. STEP12: Store the content of accumulator to a address. STEP 13: Then move the content of register C to accumulator A. STEP 14: Then store the content of accumulator in address. STEP 15: Stop the program.
46
Program code:
ADDRESS 8000 8002 8005 8006 8009 800A 800B 800E 800F 8010 8013 8014 8017 INPUT &OUTPUT LOOP LABEL MNEMONICS MVI D, 00 LDA 9000 MOV B, A LDA 9001 SUB B INR D JNC LOOP ADD B DCR D STA 9002 MOV A, D STA 9003 HLT OPCODE 16 00 3A 00 90 47 3A 01 90 90 14 D2 09 80 80 15 32 02 90 7A 32 03 90 76 COMMENTS Clear the contents of C register to store quotient. Load the first 8-bit number into accumulator. Move the 8-bit number to B register. Load the second 8-bit number into accumulator. Subtract 8 bit data from accumulator. Increment quotient register by 1 Subtract repeatedly till carry is set. Add the content of B register. Decrement the quotient by 1. Store the remainder in address. Move the quotient in C register to accumulator. Store the quotient to address. End of program.
Before Execution
After Execution
47
Data 02 08 00 00
Data 02 08 00 04
48
Result:Thus assembly language programs are written for Intel 8085 microprocessor to perform
the following functions; (a) (b) (c) (d) (e) (f) 8 bit addition with carry 8 bit addition without carry 8 bit subtraction with carry 8 bit subtraction without carry 8 bit multiplication and 8 bit division.
49
Exp.No:1.b Date:
Aim:To write assembly language programs for Intel 8085 microprocessor to perform the
following functions; (a) (b) (c) (d) 16 bit addition 16 bit subtraction 16 bit multiplication and 16 bit division.
Apparatus Required:
1.8085 Trainer 2. Operation Code sheet
STEP 8: Move the content of accumulator to register L. STEP 9: Load the accumulator from specified address . STEP 10: Move the content of accumulator to H register . STEP 11: Move the content of C register to accumulator. STEP 12: Add L register to the content of accumulator. STEP 13: Store the accumulator in specified address. STEP 14: Move the content of B register to accumulator. STEP 15: Add register H to the content of accumulator in to carry. STEP 16: Store the accumulator in specified address. A STEP 17: Jump on no carry to LOOP. STEP 28: Increment the register E. Move data to E register STEP 19: Move the content of E register to accumulator. FLOW CHART: Store the accumulator STEP 20: Store the content of accumulator. STEP 21: Stop the program. Load the accumulator Move B to accumulator Move accumulator to C A=A+H+CARRY Load the accumulator Store the accumulator
Move accumulator to B
YES
If no carry NO E=E+1
NO
Move accumulator to H
STOP 51 A
ADDRESS 8000 8003 8004 8007 8008 800B 800D 800F 8012
LABEL
MNEMONICS OPCODE LHLD 9000 XCHG LHLD 9002 DAD D SHLD 9004 MVI A, 00 ACI 00 STA 9006 HLT 2A 00 90 EB 2A 02 90 19 22 04 90 3E 00 CE 32 06 90 76
COMMENTS Load the first 16 bit data to HL register pair. Exchange the contents of HL and DE register pairs. Load the second 16 bit data to HL register pair. Add the two 16 bit numbers and store in HL. Store the result in address. Clear the contents of A register to store carry. Add the carry bit if available, to accumulator with 00 H. Store the carry bit in address. End of program.
INPUT &OUTPUT
52
Before Execution
After Execution
Data AE EB AC 6B 00 00 00 00
Data AE EB AC 6B 56 5B 01 00
STEP 10: Move the content of accumulator to H register . STEP 11: Move the content of C register to accumulator. STEP 12: Subtract L register to the content of accumulator. STEP 13: Store the accumulator in specified address. STEP 14: Move the content of B register to accumulator. STEP 15: Subtract register H to the content of accumulator with carry. STEP 16: Store the accumulator in specified address. STEP 17: Jump on no carry to LOOP. STEP 28: Move immediate data to register E. STEP 19: Move the content of E register to accumulator. STEP 20: Store the content of accumulator. STEP 21: Stop the program.
54
FLOW CHART:
A Move data to E register Store the accumulator Load the accumulator Move B to accumulator Move accumulator to C A= A-H-Carry Load the accumulator
Move accumulator to B
YES
NO
Move accumulator to H
55
ADDRESS 8000
LABEL
OPCODE 2A 00 90 EB 2A 02 90 7B 95 6F 7A 9C 67 0E 00 D2 1A 80 7D 2F 6F 7C 2F 67 23 0C 56
COMMENTS Load the first 16 bit data to HL register pair. Exchange the contents of HL and DE register pairs. Load the second 16 bit data to HL register pair. Move lower order bit to accumulator. Subtract the lower order bit of second number. Move the result in L register. Move the higher order bit to accumulator. Subtract the higher order bit of second number. Store the result in H register. Clear the C register for storing carry register. Jump to storing the result if no carry. Move the lower order bit to accumulator. Complement accumulator. Move the complemented bit to L register. Move the higher order bit to accumulator. Complement accumulator. Move the complemented bit to H register. Add one to the HL register pair. Increment Carry register.
JUMP 8003 8004 8007 8008 8009 800A 800B 800C 800D 800F 8012 8013 8014 8015 8016 8017 8018 8019 XCHG LHLD 9002 MOV A, E SUB L MOV L, A MOV A, D SBB H MOV H, A MVI C, 00 JNC JUMP MOV A, L CMA MOV L, A MOV A, H CMA MOV H, A INX H INR C
22 05 90 79 32 07 90 76
Store the result in address Move the carry bit to accumulator. Store the carry bit in address. End of program
INPUT &OUTPUT
Before Execution Address Data 9000 78 9001 65 9002 51 9003 43 9004 00 9005 00 9006 00 9007 00
57
After Execution Address Data 9000 78 9001 65 9002 51 9003 43 9004 27 9005 22 9006 00 9007 00
58
59
FLOW CHART:
START
Load the HL reg pair Exchange the HL to DE Load immediate data to HL reg pair Load immediate data to BC reg pair
YES NO
If no zero
NO
A 60
Program code:
ADDRESS LABEL MNEMONICS 8000 8003 8006 8007 800A 800B 800E 800F 8012 8013 8014 8015 8016 8019 801C 801D 801E 8021 STEP LOOP LXI B, 0000 LHLD 9000 XCHG LHLD 9002 SPHL LXI H, 0000 DAD SP JNC STEP INX B DCX D MOV A, E ORA D JNZ LOOP SHLD 9004 MOV L, C MOV H, B SHLD 9006 HLT OPCODE 01 00 00 2A 00 90 EB 2A 02 90 F9 23 00 00 39 D2 13 80 03 1B 7B B2 D2 0E 80 22 04 90 69 60 22 06 90 76 COMMENTS Clear the contents of B register to store carry. Load the first 16-bit number to accumulator. Exchange the contents of HL and DE register pairs. Load the second 16-bit number to accumulator. Store the 16 bit data in SP. Clear the contents of HL register pairs. Add the contents of SP with HL register pair. Jump to decrement the count if no carry Else increment carry register. Decrement counter Move the lower order bit in E register to accumulator. Perform OR with higher order bit in D register to check for zero count. Add SP again to HL if count in not zero. Store the result in address Move the lower order carry bit to accumulator. Move the higher order carry bit to accumulator. Store the carry in address. End of program.
61
INPUT &OUTPUT
Before Execution Address Data 9000 11 9001 12 9002 11 9003 12 9004 00 9005 00 9006 00 9007 00
62
After Execution Address Data 9000 11 9001 12 9002 11 9003 12 9004 21 9005 65 9006 46 9007 01
STEP 15: Move the C to H register. STEP 16: Store the HL register pair. STEP 17: Stop the program. Get immediate value of BC reg pair FLOW CHART: Load the HL reg pair A=A-D-Carry Move the value of H to accumulator Move accumulator to H OR L with accumulator YES NO NO Exchange the HL content to DE pair Load the HL reg pairNO Move the value of H to accumulator Store the HL reg pair content YES If zero NO Move the value of B to H If zero carry YES Move accumulator to L Move H to accumulator
NO
OR L with accumulator
Program code:
ADDRESS 8100 8103 8104 8105 8108 8109 810C 810D 810E 8111 8114 8115 8116 LOOP LABEL MNEMONICS LHLD 9100 MOV A, L ORA H JZ STEP XCHG LHLD 9102 MOV A, L ORA H JZ STEP LXI B, 0000 MOV A, L SUB E MOV L, A OPCODE 2A 00 91 7D B4 CA 21 81 EB 2A 02 91 7D B4 CA 21 81 01 00 00 7D 93 6F 65 COMMENTS Load the 16 bit divisor in HL register pair Move the lower order bit to accumulator. Perform OR operation with higher order bit to check if the divisor is zero Jump to store the result if zero flag is set Exchange the contents of HL and DE register pairs. Load the 16 bit dividend into HL register pair. Move the lower order bit to accumulator. Perform OR operation with higher order bit to check for zero. Jump to store the result if zero flag is set. Clear the BC register pair for storing the quotient. Move the lower order bit of dividend to accumulator. Subtract the lower order bit of divisor. Move the result to L register.
7C 9A 67
Move the higher order bit of dividend to accumulator. Subtract the higher bit of divisor with borrow if present. Move the result to H register.
INPUT &OUTPUT
Before Execution Address Data 9100 22 9101 22 9102 44 9103 44 9104 00 9105 00 9106 00 9107 00
After Execution Address Data 9100 22 9101 22 9102 44 9103 44 9104 00 9105 00 9106 02 9107 00
66
Result: Thus assembly language programs are written for Intel 8085 microprocessor to perform
the following functions; (a) (b) (c) (d) 16 bit addition 16 bit subtraction 16 bit multiplication and 16 bit division
67
Exp.No:2 Date:
Aim:To write assembly language programs for Intel 8085 microprocessor to perform the following
functions; (a) (b) BCD addition BCD subtraction
Apparatus Required:
1.8085 Trainer 2. Operation Code sheet
68
Program Code:
ADDRESS 8000 8003 8004 8007 8009 800A 800B 800E 800F 8012 8013 8016 LOOP LABEL MNEMONICS LDA 9000 MOV B, A LDA 9001 MVI C, 00 ADD B DAA JNC LOOP INR C STA 9002 MOV A, C STA 9003 HLT OPCODE 3A, 00,90 47 3A, 01,90 0E, 00 80 27 D2, 0F, 80 0C 32,02,90 79 32,03,90 76 COMMENTS Load the first BCD number into accumulator Move the 8 bit BCD to B register. Load the second BCD number to accumulator. Clear the contents of C register to store carry. Add the two BCD numbers. Convert the unpacked BCD to packed BCD form Jump to store the result if no carry. Increment carry register. Store the result in address. Move the Carry bit to accumulator. Store the carry bit in address. End of program.
69
70
FLOW CHART:
Start
A
Load the accumulator WITH THE SUBTRAHEND Move the ACCUMULATOR CONTENTto B Load the accumulator WITH MINUEND Move the accumulator to C register CLEAR THE e FOR COUNT CHECK FOR CARRY
NO
YES
Increment the regISTER E TO COUNT THE CARRY
MOVE THE ACCUMULATOR WITH 99 TO FIND 99S COMPLEMENT. Subtract REGISTER C from accumulator Move THE RESULT TO REGISTERC Add reg C with accumulator
Stop
Result: ThusA assembly language programs are written for Intel 8085 microprocessor to perform
the following functions; (a) Bcd addition (b) Bcd subtraction 71
72
Aim:To write assembly language programs for Intel 8085 microprocessor to perform the
following functions; (a) (b) (c) (d) BCD to Binary Binary to BCD Binary to octal Octal to Binary.
Apparatus Required:
1.8085 Trainer 2. Operation Code sheet
Step 9: Move the content of b reg to acc Step 10: Logical and Operation with C reg Step 11: Move the content of the accumulator to reg E Step 12: Then Move immediate data to acc Step 13: Then Move immediate data to reg C Step 14: Start a loop Step 15: Add the content of reg D to accumulator Step 16: Decrement the content of reg C Step 17: Jump on no zero to loop Step 18: Add the content of reg E to acc Step 19: Store the contents of the accumulator Step 20: Stop the program
74
FLOW CHART:
75
Program code:
ADDRESS 8000 8002 8004 8007 8009 800A 800B 800E 800F 8012 8013 8014 8016 8017 8018 801B STEP LABEL JUMP MNEMONIC MVI E,0A MVI C,04 LDA 9000 ANI F0 RRC DCR C JNZ JUMP MOV B,A LDA 9000 ANI 0F MOV D,A MVI A,00 ADD B DCR E JNZ STEP ADD D OP CODE 1E OA OE 04 3A 00 90 E6 F0 0F 0D C2 09 80 47 3A 00 90 E6 0F 57 3E 00 80 10 C2 16 80 82 COMMENTS Move 0A to E register to multiply the upper nibble of BCD number by 10. Move 04 to C register to rotate the upper nibble four times. Load the BCD number to acc. Perform AND operation with 0F to separate upper nibble. Rotate content to right side without carry. Decrement the value of C register. Rotate content to right side if copunt not zero. Else move the upper nibble to reg B. Load the original BCD number to acc. Perform AND operation with F0 to separate lower nibble. Move the lower nibble to D register. Clear the contents of accumulator. Add the upper nibble to BCD number to accumulator. Decrement the E register value by 1. Jump to add the upper nibble to accumulator if count not zero. Add the lower nibble of BCD number with accumulator.
76
801C 801F
32 01 90 76
After Execution
Data 56 00
Data 56 38
77
Step 20: Subtract the content of D reg Step 21: Jump on no carry to loop 2 Step 22: Add the content of accumulator with D reg Step 23: Decrement the content of C reg Step 24: Store the content of accumulator Step 25: Move the content of C reg to accumulator Step 26: Store the content of acc in specified address. Step 27: Stop the program.
79
FLOW CHART:
Program code:
ADDRESS 8050 8052 8053 8056 8058 805B 805D 805E 8061 UNIT 8063 8066 8068 8069 806C 806D JC UNIT SUI 0A INR D JMP TEN MOV C,A MOV A,D DA 6C 80 D6 0A 14 C3 61 80 4F 7A 80 Jump to check the units place if carry is set. Subtract 0A immediately from binary number. Increment the value of tens digit. Jump to check again if number is less than 10. Move content of accumulator with register C. Move the number of tens to accumulator. TEN HUND LABEL MNEMONIC MVI E,00 NIV D,E LDA 9050 CPI 9050 JC TEN SUI 64 INR E JMP HUND CPI 0A OP CODE 1E OO 53 3A 50 90 FE 64 DA 61 80 D6 64 1C C3 56 80 FE 0A COMMENTS Clear the contents of E register. Clear the contents of D register. Load the binary number to accumulator. Check if binary number is less than 100. Jump to check the tens place if carry is set. Subtract 64 immediately from binary number. Increment the value of hundreds digit. Jump to check if number is less than hundred. Check if the binary number is less than ten.
RLC RLC RLC RLC ADD C STA 9051 MOV A,E STA 9052 HLT
07 07 07 07 81 32 51 90 7B 32 52 90 76
Rotate the content of acc to left without carry. Rotate the content of acc to left without carry. Rotate the content of acc to left without carry. Rotate the content of acc to left without carry. Add the units place to the tens place. Store the content of accumulator. Move the content of register E with acc. Store the content of accumulator. Stop the program
After Execution
Data 45 00
Data 45 69 00
FLOW CHART:
83
Program code:
84
ADDRESS 8000 8003 8004 8006 8009 800A 800C 800D 800E 800F
LABEL
MNEMONIC LDA 9000 MOV B,A ANI 07 STA 9001 MOV A,B ANI 38 RRC RRC RRC
COMMENTS Load the binary number to be converted into A register. Move the original binary number to B register. Perform AND Operation of acc with 07. Store the first digit of octal number to address. Move the original binary number to accumulator. Perform AND operation of accumulator with 38. Rotate content of accumulator to right side without carry. Rotate content of accumulator to right side without carry. Rotate content of accumulator to right without carry. Store the second digit of octal number to memory address. Move the original binary number to accumulator. Perform AND operation of accumulator with C0. Rotate the content of accumulator to left without carry. Rotate the content of accumulator to left without carry.
STA 9002 8012 MOV A,B 8013 8015 8016 ANI C0 RLC RLC
32,02,90 78 E6,C0 07 07
8017
STA 9003
32,03,90 85
After Execution
Data 57 00
Data 7 2 1
86
87
FLOW CHART:
Start
READ THEoctal number Perform AND operation with 07 & store in C regISTER
Perform AND operation with 10H and rotate accumulator right once
STOP
88
After Execution
Address 9050
Data 45
Data 45 25
89
Step 2: Load the contents of accumulator from the specified address Step 3: Add the content of accumulator with immediate data Step 4: Compare the content of accumulator with the immediate data Step 5: Jump on no carry to loop Step 6: Start a loop Step 7: Store the contents of accumulator Step 8: Stop the program
FLOW CHART:
90
91
FLOW CHART:
92
ADDRESS LABEL 8100 8103 8105 8107 810A 810C 810F Loop
MNEMONICS LDA 9100 SUI 30 CPI 0A JC LOOP SUI 07 STA 9101 HLT
OPCODE 3A 00 91 D6 30 FE 0A DA 0C 81 D6 07 32 01 91 76
COMMENTS Load the ASCII value to accumulator. Subtract 30 H immediately both for the Numbers 0-9 as well as characters A-F. Check if result is less than 0A H. If the value is less than 0A i.e. if the Numerals are between 0-9 store the result in address. Else subtract 07 H immediately with Accumulator for characters A-F. Store the corresponding binary value in address. Stop the program.
Program code:
93
Result: Thus assembly language programs are written for Intel 8085 microprocessor to perform
the following functions; (a) (b) (c) (d) (e) (f) BCD to Binary Binary to BCD Binary to octal Octal to Binary Binary to Ascii Ascii to Binary
94
95
Exp.No:4Generating series Date: Aim: To interface the following peripherals with 8085 microprocessor and perform simple operations;
(a) Fibonacci series
Apparatus Required:
1. 8085 Trainer 2. Operation Code sheet
Algorithm:
Step 1: Get the count up to which the series has to be generated and also the starting memory address where the series has to stored. Step 2: Initialize the first and second values in registers. Step 3: Store the content of accumulator in memory. Step 4: Add the second number with the first number. Step 5: Increment memory pointer. Step 6: Interchange values in the register. Step 7: Decrement count by 1 Step 8: Check for zero, if zero flag is set, go to next step. Else go to step 3. Step 9: Stop execution.
96
FLOW CHART:
START
LOAD THE STARTING MEMORY ADDRESS WHERE THE SERIES HAS TO BE STORED.
NO
YES
STOP
97
program code:
ADDRESS 8000 8003 8005 8007 800A 800B 800C 800D 800E 800F 8010 8011 8012 8015
LABEL
MNEMONIC LXI D,FA02 MVI B,00 MVI C,01 LDA FAOO MOV H,A MOV A,B
OPCODE 11 02 FA 06 00 0E 01 3A 00 00 67 78 12 13 81 41 4F 25 C2 0C 80 76
COMMENTS LoadDE pair immediately Move immediate 00 to B register Move immediate 01 to C register Directly load accumulator Move content of acc. To H register Move content of B register to acc. Store accumulator indirect IncrementDE pair by 01 Add content of C register to acc. Move content of C to B register Move content of acc. To C register Decrement H register by 01 Jump on no zero loop Stop the program
LOOP
STAX D INX D ADD C MOV B,C MOV C,A DCR H JNZ LOOP HLT
98
Result: Thus assembly language programs are written for Intel 8085 microprocessor to perform
the following functions; (a) Fibonacci series
99
Exp.No:5Sorting Date: Aim:To interface the following peripherals with 8085 microprocessor and perform simple
operations; (a) (b) Ascending Descending
Apparatus Required:
1. 8085 Trainer 2. Operation Code sheet
(a)Ascending Algorithm:
1. Start the program 2. Move immediate data to C register 3. Move the data C to B register. 4. Load HL register pair to accumulator. 5. Move the data M to D register 6. Jump on no carry. 7. Move the data M to D register. 8. Decrement the HL registers pair. 9. Increment the HL registers pair. 10. Decrement the B register. 11. Jump on no carry. 12. Decrement the C register. 13. Jump on no zero. 14. Stop the program.
100
101
FLOW CHART:
START
LOAD THE STARTING ADDRESS OF THE BLOCK INTO REGISTER PAIR AND THAT OF A COUNT TO A REGISTER
MOVE THE CONTENT OF MEMORY POINTED BY HL REGISTER TO ANY REGISTER INCREMENT THE MEMORY POINTER
NO
YES
NO
YES
DECREMENT THE OUTER COUNT REGISTER.
YES STOP
NO
Program code:
ADDRESS 8000 8002 8003 8006 8007 8008 8009 800A 800D 800E 800F 8010 8011 8012 8015 8016 8019 CONT INX H DCR B JNZ LOOP DCR C JNZ LOOP1 HLT 23 05 C2 04 80 0D C2 02 80 76 JNC CONT MOV M, D DCX H MOV M, A D2 0F 80 72 2B 17 LOOP MOV D, M INX H MOV A, M CMP D 56 23 7E BA LOOP1 MOV B, C LXI H, 9100 41 21 00 91 LABEL MNEMONICS MVI C, OA OPCODE OE OA COMMENTS Move immediate data to C register. Move the data C to B register Load HL register pair to accumulator Move the data D to M register. Increment the H register pair Move the data A to M register. Compare D register to accumulator. Jump on no carry Move the data M to D register Decrement the HL register pair. Move the data M to accumulator. Increment the HL register pair. Decrement the B register. Jump on no zero. Decrement the C register. Jump on no zero. Stop the program.
103
(b)Descending Algorithm:
1. Start the program. 2. Move the immediate data to c register. 3. Move the data C to B register. 4. Load HL register pair to accumulator. 5. Move the data D to M register. 6. Increment the H register pair. 7. Move the data A to M register. 8. Compare D register to Accumulator. 9. Jump on carry. 10. Move the data M to D register. 11. Decrement the HL register pair. 12. Increment the HL register pair. 13. Jump on no zero. 14. Decrement the C register. 15. Jump on no zero. 16. Stop the program.
104
FLOW CHART:
START
LOAD THE STARTING ADDRESS OF THE BLOCK INTO REGISTER PAIR AND COUNT TO A REGISTER MOVE THE CONTENT OF MEMORY POINTED BY HL REGISTER TO ANY REGISTER INCREMENT THE MEMORY POINTER
YES
NO
NO
YES
DECREMENT THE OUTER COUNT REGISTER.
YES STOP
NO 105
Program code: ADDRESS LABEL 8000 8002 8003 LOOP 8006 8007 8008 LOOP1
OPCODE OE OA 41 21 00 91
COMMENTS Move immediate data to C register. Move the data C to B register Load HL register pair to accumulator Move the data D to M register.
MOV D, M
56
INX H MOV A, M
23 7E
CMP D 8009 800A 800D 800E MOV M, A 800F INX H 8010 8011 8012 8015 8016 8019 CONT DCR B JNZ LOOP DCR C JNZ LOOP1 HLT JNC CONT MOV M, D DCX H
BA
Compare D register to accumulator. Jump on no carry Move the data M to D register Decrement the HL register pair. Move the data M to accumulator. Increment the HL register pair. Decrement the B register. Jump on no zero. Decrement the C register. Jump on no zero. Stop the program.
D2 0F 80 72 2B
17
23
05 C2 04 80 0D C2 02 80 76
106
Result: Thus assembly language programs are written for Intel 8085 microprocessor to perform the following functions; (a) (b) Ascending Descending
107
108
Apparatus Required:
1. 8085 Trainer 2. Operation Code sheet
Algorithm:
BLINKING OF LEDS Step 1: Load the control word to the accumulator to indicate that 8255 is in I/O mode and port A is enabled. Step 2: Send the control word to the control port of 8255. Step 3: Load the accumulator with FF to make all the LEDs glow. Step 4: Send the accumulator content to the port A of 8255. Step 5: Call the delay program to have time delay between change in output state. Step 6: Complement the accumulator content to change the state of output. Step 7: Repeat the step 4 to 6 to obtain continuous blinking of LEDs. MOVING LEDS Step 1: Load the control word to the accumulator to indicate that 8255 is in I/O mode and port A is enabled. Step 2: Send the control word to the control port of 8255. Step 3: Load the accumulator with high value for the bit whose corresponding LED has to glow. For making the left most LED to glow load the accumulator with 80. Step 4: Send the accumulator content to the port A of 8255. Step 5: Call the delay program to have time delay between change in output state. 109
Step 6: Rotate the accumulator content left to right without carry according to the sequence required. DELAY: STEP 1: Load the outer loop count to any register. STEP 2: Load the first inner loop count. STEP 3: Load the second inner loop count. STEP 4: Decrement the second inner loop count. STEP 5: Check for zero. If zero is reached go to next step else go to step 4. STEP 6: Decrement the first inner loop count. STEP 7: Check for zero, if zero is reached go to next step else go to step 3. STEP 8: Decrement the outer loop count. STEP 9: Check for zero. If Zero is set go to next step else go to step 2. STEP 10: Return to main program.
110
START
NO
YES
RETURN
111
DISPLAY:
START
HAVE THE FIELD ADDRESS IN ACCUMULATOR AND MOVE IT TO CONTROL REGISTER ADDRESS OF 8279
NO
CHECK FOR ZERO
YES
RETURN
112
CLEAR:
START
HAVE THE FIELD ADDRESS IN ACCUMULATOR AND MOVE IT TO CONTROL REGISTER ADDRESS OF 8279
NO
YES
RETURN
113
MAIN PROGRAM:
ADDRESS 8000
LABEL
OPCODE 21 00 91 CD 00 90 CD 00 81 CD 00 92 CD 00 81 C3 00 80
COMMENTS Load the starting address where the message display control words are stored. CALL the subroutine DISPLAY to display the characters. CALL the subroutine DELAY to display the characters for a particular time. CALL the function CLEAR to clear the display. CALL the function DELAY to display blank for particular time. Jump unconditionally to LOOP to have continuous flashing.
LOOP
8003
CALL DISPLAY
8006
CALL DELAY
MNEMONICS MVI C, 06
OPCODE 0E 06 06 87 78 D3 D1 7E 114
DISPLAY
9002
MVI B, 87
REPEAT
COMMENTS Move immediately the count required for number of characters required to C register Move immediately the starting field address of the display device to B register Copy the content of the B register to accumulator. Move the accumulator content to 8279-control register address. Move the display control word stored in memory to
D3 D0 23 05 0D C2 04 90 C9
accumulator. Move the content of accumulator to display/keyboard interface data register Increment the memory pointer. Decrement the display field address content. Decrement the count for number of characters required. Check for Zero flag, if is not set goto REPEAT. Return to main function.
CLEAR: ADDRESS 9200 LABEL MNEMONICS MVI C, 06 OPCODE 0E 06 06 87 78 D3 D1 3E FF 115 COMMENTS Move immediately the count required for number of characters required to C register Move immediately the starting field address of the display device to B register Copy the content of the B register to accumulator. Move the accumulator content to 8279-control register address. Move immediately FF to make all the segments
CLEAR
9202
MVI B, 87
REPEAT
D3 D0 23 05 0D C2 04 92 C9
dark. Move the content of accumulator to display/keyboard interface data register Increment the memory pointer. Decrement the display field address content. Decrement the count for number of characters required. Check for Zero flag, if is not set go REPEAT. Return to main function.
116
Apparatus Required:
1. 8085 Trainer 2. Operation Code sheet ALGORITHM: STEP 1: Initialize the hour register with 00H. STEP 2: Store the content of hour register to input address of UPDAD FFF7 STEP 3: Call the function UPDAD to display the hour value. 117
STEP 4: Initialize the minute register with 00 H. STEP 5: Store the content of minute register to input address FFF8 of UPDAD. STEP 6: Call the function UPDAD to display the minute value. STEP 7: Initialize the second register as 00 H. STEP 8: Store the content of seconds register to input address FFF9 UPDDT. STEP 9: Call the function UPDDT to display the seconds value. STEP 10: Call the delay subroutine. STEP 11: Increment the content of seconds register. STEP 12: Check if seconds = 60, if yes go to next step else go to step 8 STEP 13: Increment the content of minute register. STEP 14: Check if minute = 60, if yes go to next step else go to step 5. STEP 15: Increment the hours register content. STEP 16: Check if hours = 24. If yes go to next step, else go to 2. STEP 17: Go to step 1.
DELAY: STEP 1: Load the outer loop count to any register. STEP 2: Load the first inner loop count. STEP 3: Load the second inner loop count. STEP 4: Decrement the second inner loop count. STEP 5: Check for zero. If zero is reached go to next step else go to step 4. STEP 6: Decrement the first inner loop count. STEP 7: Check for zero, if zero is reached go to next step else go to step 3. STEP 8: Decrement the outer loop count. STEP 9: Check for zero. If Zero is set go to next step else go to step 2. STEP 10: Return to main program.
118
119
FLOW CHART:
START E
D
STORE THE CONTENT OF HOUR REGISTER TO INPUT ADDRESS FFF7 OF UPDAD
B
STORE THE CONTENT OF SECOND REGISTER TO INPUT ADDRESS FFF9 OF UPDDT
120
NO
CHEC K FOR 60
B YES
NO
CHEC K FOR 60
YES
INCREMENT THE CONTENT OF HOUR COUNT REGISTER
NO
CHECK FOR 24
YES E
121
ADDRESS 8000 8002 8003 8006 8009 800B 800C 800F 8012 8014 8015 8018 801B 801E
LABEL
OPCODE 16 00 7A 32 F8 FF CD BC 06 0E 00 79 32 F7 FF CD BC 06 06 00 78 32 F9 FF CD D3 06 CD 00 90 3A F9 FF 122
COMMENTS Clear the D register for having the hour count. Move the hour count to the accumulator. Store the hour value in the input address of UPDAD utility subroutine CALL the function UPDAD to display the hour value. Clear the minute count register C. Copy the minute count to the accumulator. Store the minute value in the input address of UPDAD utility subroutine CALL the function UPDAD to display the minute value. Clear the seconds count register contents. Copy the content of the seconds register to accumulator. Store the seconds value in the input address of UPDDT utility subroutine. CALL the function UPDDT to display the seconds value. CALL the delay function to have a 1 second delay in seconds count. Load the accumulator with the previous count of seconds register.
LOOP 3
LOOP2
LOOP 1
LOOP
8021
ADI 01
C6 01
8023 8024 8025 8027 802A 802D 802F 8030 8031 8033 8036 8039 803B 803C 803D 803F
DAA MOV B, A CPI 60 JNZ LOOP LDA FFF7 ADI 01 DAA MOV C, A CPI 60 JNZ LOOP 1 LDA FFF8 ADI 01 DAA MOV D, A CPI 24 JNZ LOOP 2
27 47 FE 60 C2 14 80 3A F7 FF C6 01 27 4F FE 60 C2 OB 80 3A F8 FF C6 01 27 57 FE 24 C2 123
Decimal adjust the accumulator to convert the count to packed BCD. Copy the accumulator to seconds register. Compare the count with terminal count 60 to start the minutes count. Check for zero flag; if it is not set goto increment the second again If 60 is reached in seconds count, load the previous count of minute to accumulator. Add immediately the content by 01 to increment the minute. Decimal adjust the accumulator to convert the count to packed BCD. Copy the content of minute register to accumulator. Compare it with 60 the terminal count. If 60 is not reached goto LOOP1 seconds initialization step. If 60 is reached in minute count, Load the previous value of hour to accumulator. Add immediately the content by 01 to increment the hour. Decimal adjust the accumulator to convert the count to packed BCD. Copy the content of hour register to accumulator. Compare immediate it with 24 the terminal count. Check for zero flag, if it is not
8042
JMP LOOP
02 80 C3 00 80
set goto minute initialization step. Jump unconditionally to hour initialization step i.e. clear the count and restart the clock.
1 SECOND DELAY:
ADDRESS 9000 9002 9005 9006 9007 9008 900B 900C 900F
LABEL
MNEMONICS MVI D, 02 LXI B, FFFF DCX B MOV A C ORA B JNZ LOOP DCR D JNZ LOOP 1 RET
OPCODE 16 02 01 FF FF 0B 79 B0 C2 05 90 15 C2 02 90 C9
COMMENTS Move the outer count required to the D register. Load the inner loop count to the BC register pair. Decrement the inner loop count. Move the content of C register to accumulator. OR the content of B register with Accumulator content. Check for the Zero flag if it is not set goto LOOP. Decrement the outer loop count. Check for Zero flag, if it is not set goto LOOP 1 (the initialization of inner loop) Return to calling main program.
LOOP 1 LOOP
124
Apparatus Required:
1. 8085 Trainer 2. Operation Code sheet
125
FLOW CHART:
START
CALL the function DELAY to have the required time delay between the counts.
check FOR TC
NO
YES
126
DELAY:
START
NO
CHECK FORZE RO
YES
DECREMENT THE OUTER LOOP COUNT
NO
YES
RETURN
127
PROGRAM: MOD 9 COUNTER ADDRESS 8000 8002 8005 8008 800B 800E 8010 8012 8015 LABEL MNEMONICS MVI A, 00 STA FFF9 CALL 06D3 CALL DELAY LDA FFF9 ADI 01 CPI 0A JNZ LOOP JMP LOOP 1 OPCODE 3E 00 32 F9 FF CD D3 06 CD 00 90 3A F9 FF C6 01 FE 0A C2 02 80 C3 00 80 COMMENTS Move immediately the value 00 to accumulator to initialize the count. Store the content of accumulator to input address of UPDDT. CALL the function update data field (UPDDT) to display the count in data field LED. CALL the function delay to have a 1-second delay between the counts. Load the accumulator with previous count value from the memory. Add 01 to the accumulator content. Compare the terminal count 0A with the accumulator content. If the terminal count is not reached continue to display the count. Else, jump unconditionally to LOOP to reinitialize the count
LOOP 1
LOOP
1 SECOND DELAY: ADDRESS 9000 LABEL MNEMONICS MVI D, 02 LXI B FFFF DCX B OPCODE 16 02 01 FF FF 0B 128 COMMENTS Move the outer count required to the D register. Load the inner loop count to the BC register pair. Decrement the inner loop count.
9002 9005
LOOP1
LOOP 9006 9007 9008 900B 900C 900F MOV A C ORA B JNZ LOOP DCR D JNZ LOOP 1 RET 79 B0 C2 05 90 15 C2 02 90 C9 Move the content of C register to accumulator. OR the content of B register with Accumulator content. Check for the Zero flag if it is not set go to LOOP. Decrement the outer loop count. Check for Zero flag, if it is not set go to LOOP 1 (the initialization of inner loop) Return to main program.
STEP 5: Add the two numbers. Convert them into packed BCD and store in the input address of UPDAD & UPDDT and go to step 8 STEP 6: Load the numbers to be added into the registers from the memory. STEP 7: Perform BCD subtraction and store in the input address of UPDAD & UPDDT STEP 8: Call the utility subroutines UPDAD and UPDDT to display the result. STEP 9: Stop execution
130
FLOW CHART:
START
A
Load the accumulator with hex equivalent of the operation to be performed. STORE THE RESULT IN MEMEORY COMPARE THE LOADED VALUE WITH ADDITION EQUIVALENT. MOVE THE STORED RESULTS TO REGISTERS AND STORE THEM TO THE INPUT ADDRESS OF DATA UPDATE AND ADDRESS UPDATE SUBROUTINES YES CHECK FOR ZERO CALL THE UPDAD AND NO UPDDT SUBROUTINES TO DISPLAY THE VALUES. COMPARE THE LOADED VALUE WITH SUBTRACTION EQUIVALENT. STOP
YES
CHECK FOR ZERO
NO
PERFORM THE BCD ADDITION OF ENTERED NUMBERS WITH CARRY
131
PROGRAM: ADDRESS 8000 8003 8005 8008 800A 800D 8010 8012 8015 8016 8019 801B 801C 801D 8020 LABEL MNEMONIC LDA 9000 CPI 0B JZ ADD CPI 0C JZ SUB JMP END MVI A, 00 LDA 9100 MOV B, A LDA 9101 MVI C, 00 ADD B DAA JNC LOOP 1 INR C OPCODE 3A 00 90 FE 0B CA 10 80 FE 0C CA 2B 80 C3 69 80 3E 00 3A 00 91 47 3A 01 91 0E 00 80 27 D2 21 80 0C COMMENTS Load the accumulator with hex equivalent to choose the operation to be performed. Compare whether the loaded value is equivalent to that of addition operation. Check for zero flag, if it is set goto loop ADD to perform addition. Compare whether the loaded value is equivalent to that of subtraction operation. Check for zero flag, if it is set goto loop SUB to perform subtraction. If no related hex equivalent is loaded jump unconditionally to END. Clear the content of accumulator to load the numbers Load the first number to be added from memory to accumulator. Copy the number to B register Load the second number to be added from memory to accumulator. Clear the content of C register to hold the carry. Add the numbers. Decimal adjust the accumulator to convert the answer into packed BCD. Check for the carry flag, if it is not set goto LOOP 1. Else increment the content of C register to hold the carry.
ADD
132
ADDRESS 8021 8024 8025 8028 802B 802D 802F 8032 8033 8036 8037 8039 803A 803D 803E 803F 8042
LABEL
MNEMONIC STA 9102 MOV A, C STA 9103 JMP DISPLAY MVI A, 00 MVI D, 00 LDA 9100 MOV C, A LDA 9101 MOV B, A MVI A, 99 SUB B ADI 01 ADD C DAA JC OUT 1 MOV B, A
OPCODE 32 02 91 79 32 03 91 C3 52 80 3E 00 16 00 3A 00 91 4F 3A 01 91 47 3E 99 90 C6 01 81 27 DA 4B 80 47 133
COMMENTS
Store the result of addition to the memory Copy the content of carry register to accumulator. Store the carry in memory. Jump unconditionally to DISPLAY to display the result. Clear the content of accumulator to load the values. Clear the D register to hold the borrow value. Load the minuend into the accumulator from the memory. Copy the minuend accumulator to C register. Load the subtrahend into the accumulator from memory. Copy the subtrahend value to B register. Move immediately 99 to accumulator to perform 99s complement. Subtract the subtrahend value from 99. Add 01 to the subtracted value to obtain 100s complement. Add the minuend value to the 100s complement value. Decimal adjust the accumulator to obtain packed BCD of the resultant. Check for the carry (borrow). If it is set go to loop OUT 1. Copy the content of accumulator to B register.
LOOP 1
SUB
ADDRESS 8043 8045 8046 8048 8049 804B 804E 804F 8052 8055 8058 805B 805E 8061 8063
LABEL
MNEMONIC MVI A, 99 SUB B ADI 01 DAA MVI D, 01 STA 9102 MOV A, D STA 9104 LDA 9102 STA FFF9 CALL 06D3 LDA 9103 STA FFF7 MVI A, 00 STA FFF8
OPCODE 3E 99 90 C6 01 27 16 01 32 02 91 7A 32 03 91 3A 02 91 32 F9 FF CD D3 06 3A 03 91 32 F7 FF 3E 00 32 F8 FF
COMMENTS Move immediately 99 to accumulator to perform 99s complement. Subtract the subtrahend value from 99. Add 01 to the subtracted value to obtain 100s complement Decimal adjust the accumulator to obtain packed BCD of the resultant. Move immediately 01 to D register to indicate borrow. Store the subtracted value to memory. Move the borrow value to accumulator. Store the carry (borrow) to the memory. Load the accumulator with the stored value of resultant of operation performed. Store the resultant in the input address location of UPDDT utility subroutine. CALL the function UPDDT to display the result in data field LED. Load the accumulator with the stored value of carry of operation performed. Store the carry to the input address of UPDAD utility subroutine. Clear the accumulator content. Store the accumulator content to the input address of UPDAD utility subroutine..
OUT 1
DISPLAY
8066
CALL 06BC
CD 134
BC 06 8069 HLT 76
Date: Aim:
To develop an assembly language program to produce a square wave output using Output lines of 8255 SOD lines of 8085 microprocessor. . 1. 8085 Trainer 2. Operation Code sheet ALGORITHM: USING 8255 Step 1: Load the appropriate control word to accumulator and more it to control part of 8255 Step 2: Load the appropriate control word to the generating logical high in accumulator. Step 3: Move the content the accumulator to output port of 8255. Step 4: Call the delay sub routine to generate a time delay between different states. Step 5: Complement accumulator content to get logical LOW. Step 6: Go to step 3. USING 8085 SOD LINES Step 1: Load the appropriate control word to the accumulator having HIGH values for SOD. Step 2: Using SIM instruction, move the control word to output line of 8085. Step 3: Call the delay subroutine to generate time delay between states. Step 4: Load the control word to accumulator for having low values for SOD. Step 5: Calculate the delay subroutine to generate time delay between states. Step 6: Go to step 1. DELAY 136
Apparatus Required:
Step 1: Load the outer loop count to any register. Step 2: Load the first inner loop count. Step 3: Load the second inner loop count. Step 4: Decrement the second inner loop count. Step 5: Check for zero. If zero is set, go to next step. Else, goto step 3. Step 6: Decrement the outer loop count. Step 7: Check for zero. If zero is set, go to next step. Else, goto step 2. Step 8: Return to main program.
USING 8255:
START
LOAD THE CONTROL WORD TO THE ACCUMULATOR AND MOVE IT TO CONTROLPORT OF 8255
LOAD THE INITIAL CONTROL WORD TO GENERATE LOGICAL HIGH IN THE ACCUMULATOR
138
START
LOAD THE CONTROL WORD TO THE ACCUMULATOR HAVING HIGH VALUE FOR SOD
USE THE SIM INSTRUCTION TO MOVE THE ACCUMULATOR CONTENT TO OUTPUTPORT OF 8085
LOAD THE CONTROL WORD TO THE ACCUMULATOR HAVING LOW VALUE FOR SOD
139
DELAY:
START
NO
YES
DECREMENT THE INNER LOOP 1 COUNT
NO
YES
DECREMENT THE OUTER LOOP COUNT
NO
YES
RETURN
PROGRAM: USING 8255 PORTS ADDRESS 8000 8002 8004 8006 8008 800B 800C LABEL MNEMONICS MVI A, 80 OUT F3 MVI A, FF OUT F0 CALL DELAY CMA JMP LOOP ODCODE 3E 80 C3 F3 3E FF D3 F0 CD 00 90 2F C3 06 80 COMMENTS Move the control word immediately to the accumulator to indicate 8255 is in I/O mode. Move the control word to the control port . Move FF immediately to the accumulator to activate all the lines of the selected port of 8255. Move the accumulator content to port A of 8255. CALL the delay program to generate a pulse of required width. Complement the accumulator content to change the output state. Jump unconditionally to obtain continuous square waveform.
LOOP
USING SOD LINES OF 8085 ADDRESS 8000 8002 8003 8006 8008 8009 LABEL MNEMONICS OPCODE MVI A, C0 SIM CALL DELAY MVI A, 40 SIM CALL DELAY 3E C0 30 CD 00 90 3E 40 30 CD 00 90 141 COMMENTS Move the control word immediately to the accumulator to enable a high output from the serial output data pin of 8085. Invoke the SIM instruction to have a high output at SOD. CALL the delay program to generate the pulse of required width. Move the control word immediately to the accumulator to enable a low output from the serial output data pin of 8085. Invoke the SIM instruction to have a low output at SOD. CALL the delay program to generate the time interval of required width.
LOOP
800C 10 ms DELAY: ADDRESS 9000 9002 9004 9005 9008 9009 900C LABEL
JMP LOOP
C3 00 80
MNEMONICS MVI E, 0A MVI C, FF DCR C JNZ LOOP DCR E JNZ LOOP1 RET
OPCODE 1E 0A 0E FF 0D C2 04 90 1D C2 09 90 C9
COMMENTS Move immediately the outer loop count 0A to the E register. Move immediately the inner loop count FF to the C register. Decrement the inner loop count i.e. C register content. Check for Zero flag, if it is not set goto Loop. Otherwise goto next step. Decrement the outer loop count i.e. the E register content. Check for Zero flag, if it is not set goto LOOP1. Otherwise goto next step. Return to the main function.
LOOP1 LOOP
Date: Aim:
To develop an assembly language program for traffic light control using programmable peripheral interface 8255.
Apparatus Required:
1. 8085 Trainer 2. Operation Code sheet
ALGORITHM: MAIN PROGRAM STEP 1: Load the control word to accumulator, to indicate that the 8255 is in I/O mode. STEP 2: Send the control word to the control port of 8255. STEP 3: Call the subroutine NORTH. STEP 4: Call the subroutine EAST. STEP 5: Call the subroutine SOUTH. STEP 6: Call the subroutine WEST. STEP 7: Repeat the steps from step 3 to step 6 to control the signal. SUB- ROUTINES NORTH: STEP 1: Get the output control word for the schedule I of traffic lights. STEP 2: Move the control word to the output port of the 8255. STEP 3: Call delay program for 3 sec to change from amber to red and amber to green. STEP 4: Get the output control word for the schedule II and move to the output port of the 8255. STEP 5: Call the delay subroutine for generating a time delay of 30 sec between the schedules. STEP 6: Return to main program. EAST: 143
STEP 1: Get the output control word for the schedule III of traffic lights. STEP 2: Move the control word to the output port of the 8255. STEP 3: Call delay program for 3 sec to change from amber to red and amber to green. STEP 4: Get the output control word for the schedule IV and move to the output port of the 8255. STEP 5: Call the delay subroutine for generating a time delay of 30 sec between the schedules. STEP 6: Return to main program. SOUTH: STEP 1: Get the output control word for the schedule V of traffic lights. STEP 2: Move the control word to the output port of the 8255. STEP 3: Call delay program for 3 sec to change from amber to red and amber to green. STEP 4: Get the output control word for the schedule VI and move to the output port of the 8255. STEP 5: Call the delay subroutine for generating a time delay of 30 sec between the schedules. STEP 6: Return to main program. WEST: STEP 1: Get the output control word for the schedule VII of traffic lights. STEP 2: Move the control word to the output port of the 8255. STEP 3: Call delay program for 3 sec to change from amber to red and amber to green. STEP 4: Get the output control word for the schedule VIII and move to the output port of the 8255. STEP 5: Call the delay subroutine for generating a time delay of 30 sec between the schedules. STEP 6: Return to main program.
MAIN PROGRAM:
START
145
SUB-ROUTEINS:
EAST
CALL DELAY I
CALL DELAY 1
CALL DELAY 2
CALL DELAY 2
RETURN
RETURN
146
SOUTH
WEST
CALL DELAY I
CALL DELAY I
CALL DELAY 2
CALL DELAY 2
CONTROL WORD
PORT A 4A 4C 52 61 91 09 89 49 PORT B 04 02 02 02 02 03 04 08
MAIN PROGRAM:
147
ADDRESS
LABEL
OPCODE 3E 80 D3 F3 CD 30 80 CD 50 80 CD 70 80 CD 90 80 C3 04 80
COMMENTS Move the control word immediately to the accumulator to indicate 8255 is in I/O mode. Send the control word through port A. Call the subroutine for North direction. Call the subroutine for East direction. Call the subroutine for South direction. Call the subroutine for West direction. Repeat the subroutine calls unconditionally.
CALL NORTH CALL EAST CALL SOUTH CALL WEST JMP LOOP
NORTH:
ADDRESS
LABEL
MNEMONICS
OPCODE
COMMENTS
148
8030 8032 8034 8036 8038 803B 803D 803F 8041 8043 8046
MVI A, 4A OUT F0 MVI A, 04 OUT F1 CALL DELAY 1 MVI A, 4C OUT F0 MVI A, 02 OUT F1 CALL DELAY 2 RET
3E 4A D3 F0 3E 04 D3 F1 CD 00 90 3E 4C D3 F0 3E 02 D3 F1 CD 50 90 C9
Move the appropriate control word to accumulator. Send the control word through port A. Move the appropriate control word to accumulator Send the control word through port B. Call the 3 sec delay for Amber light control. Move the appropriate control word to accumulator. Send the control word through port A. Move the control word to accumulator. Send the control word through port B. Call the 30 sec delay for green signal control. Return to main program.
149
8050 8052 8054 8056 8058 805B 805D 805F 8061 8063 8066
MVI A, 52 OUT F0 MVI A, 02 OUT YY CALL DELAY1 MVI A, 61 OUT F0 MVI A, 02 OUT F1 CALL DELAY 2 RET
3E 52 D3 F0 3E 02 D3 F1 CD 00 90 3E 61 D3 F0 3E 02 D3 F1 CD 50 90 C9
Move the appropriate control word to accumulator. Send the control word through port A. Move the appropriate control word to accumulator Send the control word through port B. Call the 3 sec delay for Amber light control. Move the appropriate control word to accumulator. Send the control word through port A. Move the control word to accumulator. Send the control word through port B. Call the 30 sec delay for green signal control. Return to main program.
WEST:
150
ADDRESS
LABEL
MNEMONICS MVI A, 89 OUT F0 MVI A, 04 OUT F1 CALL DELAY 1 MVI A, 49 OUT F0 MVI A, 08 OUT F1 CALL DELAY 2 RET
OPCODE 3E 89 D3 F0 3E 04 D3 F1 CD 00 90 3E 49 D3 F0 3E 08 D3 F1 CD 50 90 C9
COMMENTS Move the appropriate control word to accumulator. Send the control word through port A. Move the appropriate control word to accumulator Send the control word through port B. Call the 3 sec delay for Amber light control. Move the appropriate control word to accumulator. Send the control word through port A. Move the control word to accumulator. Send the control word through port B. Call the 30 sec delay for green signal control. Return to main program.
8090 8092 8094 8096 8098 809B 809D 809F 80A1 80A3 80A6
8070 8072 8074 8076 8078 807B 807D 807F 8081 8083 8086
MVI A, 89 OUT F0 MVI A, 02 OUT F1 CALL DELAY 1 MVI A, 09 OUT F0 MVI A, 03 OUT F1 CALL DELAY 2 RET
3E 91 D3 F0 3E 02 D3 F1 CD 00 90 3E 09 D3 F0 3E 03 D3 F1 CD 50 90 C9
Move the appropriate control word to accumulator. Send the control word through port A. Move the appropriate control word to accumulator Send the control word through port B. Call the 3 sec delay for Amber light control. Move the appropriate control word to accumulator. Send the control word through port A. Move the control word to accumulator. Send the control word through port B. Call the 30 sec delay for green signal control. Return to main program.
152
ADDRESS
LABEL
MNEMONICS
OPCODE
COMMENTS
9000 9002 9004 9006 9008 9009 900C 900D 9010 9011 9014 9015 9018 LOOP3 LOOP2 LOOP1 LOOP
MVI H, 03 MVI C, 03 MVI D, FF MVI E, FF DCR E JNZ LOOP DCR D JNZ LOOP1 DCR C JNZ LOOP 2 DCR H JNZ LOOP 3 RET
26 03 0E 03 16 FF 1E FF 1D C2 08 90 15 C2 06 90 0D C2 04 90 25 C2 02 90 C9
Initialize counter value to 03 H Initialize counter value to 03 H Load FF H to D register immediately. Load FF H to E register immediately. Decrement counter E by 1. Move to next counter if count is zero. Decrement counter D by 1 Jump to counter E if count not zero. Decrement counter C by 1. Jump to counter D if count not zero. Decrement counter H by 1. Jump to LOOP 3 if count not zero. Return to main program.
153
ADDRESS
LABLE
MNEMOCIS
OPCODE
COMMENTS
9050 9052 9054 9056 9058 9059 905C 905D 9060 9061 9064 9065 9068 LOOP3 LOOP2 LOOP1 LOOP
MVI H, 1E MVI C, 03 MVI D, FF MVI E, FF DCR E JNZ LOOP DCR D JNZ LOOP 1 DCR C JNZ LOOP 2 DCR H JNZ LOOP 3 RET
26 1E 0E 03 16 FF 1E FF 1D C2 58 90 15 C2 56 90 0D C2 54 90 25 C2 52 90 C9
Initialize counter value to 1E H Initialize counter value to 03 H Load FF H to D register immediately. Load FF H to E register immediately. Decrement counter E by 1. Move to next counter if count is zero. Decrement counter D by 1 Jump to counter E if count not zero. Decrement counter C by 1. Jump to counter D if count not zero. Decrement counter H by 1. Jump to counter C if count not zero. Return to main program.
154
Aim:
To interface a stepper motor with the 8085 microprocessor to control the speed using the programmable peripheral interface 8255.
Apparatus Required:
1. 8085 Trainer 2. Operation Code sheet ALGORITHM: CLOCKWISE ROTATION: STEP 1: Load the control word to accumulator and move it to the control port of 8255 to operate in I/O mode. STEP 2: Load the initial excitation word to accumulator. STEP 3: Move the accumulator content to the output lines of 8255. STEP 4: Call the delay function. STEP 5: Rotate the accumulator right to excite the next pair of coils in clockwise direction. STEP 6: Go to step 3. ANTICLOCKWISE ROTATION: STEP 1: Load the control word to accumulator and move it to the control port of 8255 to operate in I/O mode. STEP 2: Load the initial excitation word to accumulator. STEP 3: Move the accumulator content to the output lines of 8255. STEP 4: Call the delay function. STEP 5: Rotate the accumulator left to excite the next pair of coils in clockwise direction. STEP 6: Go to step 3.
DELAY: STEP 1: Load the outer loop count to any register. STEP 2: Load the first inner loop count. 155
STEP 3: Load the second inner loop count. STEP 4: Decrement the second inner loop count. STEP 5: Check for zero. If zero is reached go to next step else go to step 4. STEP 6: Decrement the first inner loop count. STEP 7: Check for zero, if zero is reached go to next step else go to step 3. STEP 8: Decrement the outer loop count. STEP 9: Check for zero. If Zero is set go to next step else go to step 2. STEP 10: Return to main program.
156
START
LOAD THE CONTROL WORD TO THE ACCUMULATOR AND MOVE IT TO CONTROL PORT OF 8255
ROTATE THE ACCUMULATOR RIGHT TO EXCITE NEXT PAIR OF COILS IN CLOCKWISE DIRECTION.
ANTI-CLOCKWISE ROTATION:
157
START
LOAD THE CONTROL WORD TO THE ACCUMULATOR AND MOVE IT TO CONTROL PORT OF 8255
ROTATE THE ACCUMULATOR LEFT TO EXCITE NEXT PAIR OF COILS IN ANTICLOCKWISE DIRECTION.
DELAY:
158
START
NO
YES
DECREMENT THE INNER LOOP 1 COUNT
NO
YES
DECREMENT THE OUTER LOOP COUNT
NO
YES
RETURN
PROGRAM: 159
CLOCKWISE ROTATION ADDRESS 8000 8002 8004 LABEL MNEMONICS MVI A, 80 OUT F3 MVI A, 88 OPCODE 3E 80 D3 F3 3E 88 D3 F0 CD 00 90 0F C3 06 86 COMMENTS Move the control word immediately to the accumulator to indicate 8255 is in I/O mode. Move the accumulator content to the control port. Move 88 immediately to the accumulator to activate A and A poles of the motor through 8255 selected port. Move the accumulator content to port A of 8255. CALL the delay program to generate time delay before the excitation of next pair of coils Rotate accumulator content right without carry to excite next pair of coils. Jump unconditionally to obtain continuous rotation.
LOOP
LABEL
OPCODE 3E 80 D3 F3 3E 88 D3 F0 CD 00 90 0F C3 06 86
COMMENTS Move the control word immediately to the accumulator to indicate 8255 is in I/O mode. Move the control word to the control port . Move 88 immediately to the accumulator to activate A and A poles of the motor through 8255 selected port. Move the accumulator content to port A of 8255. CALL the delay program to generate time delay before excitation of next pair of coils. Rotate accumulator content left without carry to excite next pair of coils. Jump unconditionally to obtain continues rotation.
8006 8008 800B 800C DELAY: ADDRESS 9000 9002 9004 9005 9008 9009
LOOP
LABEL
OPCODE 1E 0A 0E FF 0D C2 04 90 1D C2 161
COMMENTS Move immediately the outer loop count 0A to the E register. Move immediately the inner loop count FF to the C register. Decrement the inner loop count i.e. C register content. Check for Zero flag, if it is not set goto Loop. Decrement the outer loop count i.e. the E register content. Check for Zero flag, if it is
LOOP1 LOOP
09 90 900C RET C9
Exp.No:13ADC/DAC Interface
162
Date: Aim:
To interface a digital to analog converter (DAC) to 8085 microprocessor using programmable peripheral interface 8255 to create Square Waveform. Trapezoidal Waveform. Saw tooth Waveform.
Apparatus Required:
1. 8085 Trainer 2. Operation Code sheet ALGORITHM: SQUARE WAVEFORM: STEP 1: Move the control word to the control port to operate 8255 in I/O to the accumulator. STEP 2: Send the accumulator content to the port of 8255. STEP 3: Load the binary value corresponding to the maximum digital input to the accumulator. STEP 4: Send the accumulator content to the port of 8255. STEP 5: Call the delay program to generate time delay between states. STEP 6: Complement the accumulator content to change the output state. STEP 7: Go to step 4. SAW TOOTH WAVEFORM: STEP 1: Load the control word to the control port of 8255 to operate in I/O mode. STEP 2: Load 00 and move to output lines of 8255. STEP 3: Move the content of accumulator to output port of 8255. STEP 4: Increment the digital input value, i.e., the accumulator content till it becomes FF. STEP 5: Compare with FF. Check for zero, if yes go to step 2 else step 3. TRAPEZOIDAL WAVEFORM: 163
STEP 1: Load the control word to accumulator and move to control port of 8255. STEP 2: Move the initial digital to the accumulator and out to output port of 8255. STEP 3: Increment the digital input value and move to output line of 8255. STEP 4: Compare the digital input with FF. Check for zero, if zero is set go to next step, else go to step 3. STEP 5: Call delay to generate a constant output of required width. STEP 6: Decrement the digital input value. STEP 7: Move the value to the output line of 8255. STEP 8: Check for zero, if zero is set go to step 2, else go to step 6. DELAY: STEP 1: Load the outer loop count to any register. STEP 2: Load the first inner loop count. STEP 3: Load the second inner loop count. STEP 4: Decrement the second inner loop count. STEP 5: Check for zero. If zero is reached go to next step else go to step 4. STEP 6: Decrement the first inner loop count. STEP 7: Check for zero, if zero is reached go to next step else go to step 3. STEP 8: Decrement the outer loop count. STEP 9: Check for zero. If Zero is set go to next step else go to step 2. STEP 10: Return to main program.
START
LOAD THE CONTROL WORD TO THE ACCUMULATOR AND MOVE IT TO CONTROL PORT OF 8255
LOAD THE BINARY VALUE CORRESPONDING TO THE MAXIMUM DIGITAL INPUT TO THE ACCMULATOR
COMPLEMENT THE CONTENT OF ACCUMULATOR TH SWITCH BETWEEN HIGH AND LOW STATES OF OUTPUT WAVEFORM
START
LOAD THE CONTROL WORD TO THE ACCUMULATOR AND MOVE IT TO CONTROL PORT OF 8255
INCREMENT THE DIGITAL INPUT VALUE. i.e. THE ACCUMULATOR CONTENT TILL IT BECOMES 00
NO
YES
166
TRAPEZOIDAL:
START
LOAD THE CONTROL WORD TO THE ACCUMULATOR AND MOVE IT TO CONTROL PORT OF 8255
START
MOVE THE INITIAL DIGITAL VALUE TO ACCUMULATOR AND OUT THE CONTENT OF ACCUMULATOR TO OUTPUT PORT OF 8255
MOVE THE CORRESPONDING DIGITAL VALUE IN THE ACCUMULATOR TO THE OUTPUT PORT OF 8255
COMPARE THE INPUT DIGITAL VALUE WITH LARGEST POSIBLE DIGITAL VALUE. i.e. FF
NO
CHEC K FOR ZERO
YES
CALL DELAY TO GENERATE A CONSTANT OUTPUT OF REQUIRED WIDTH.
MOVE THE DIGITAL INPUT VALUE i.e. CONTENT OF ACCUMULATOR TO ANY OUTPUT PORT ADDRESS OF 8255
Delay:
YES
CHEC K FOR ZERO
167 NO
NO
CHEC K FOR ZERO
YES
DECREMENT THE OUTER LOOP COUNT
NO
YES
RETURN
PROGRAM: 168
SQUARE WAVE GENERATION ADDRESS LABEL MNEMONICS MVI A, 80 OUT F3 MVI A, FF OPCODE 3E 80 D3 F3 3E FF D3 F0 CD 00 90 2F C3 06 80 COMMENTS Move the control word immediately to the accumulator to indicate 8255 is in I/O mode. Move the control word to the control port of 8255. Move FF immediately to the accumulator to activate all the lines of selected port of 8255. Move the accumulator content to port A address of 8255. CALL the delay program to have the pulse of required width. Complement the accumulator content to change the output state. Jump unconditionally to LOOP to obtain continuous square waveform.
LOOP
10 ms DELAY: ADDRESS 9000 9002 9004 9005 9008 LABEL MNEMONICS MVI E, 0A MVI C, FF DCR C JNZ LOOP DCR E OPCODE 1E 0A 0E FF 0D C2 04 90 1D 169 COMMENTS Move immediately the outer loop count 0A to the E register. Move immediately the inner loop count FF to the C register. Decrement the inner loop count i.e. C register content. Check for Zero flag, if it is not set goto Loop. Decrement the outer loop count i.e. the E register content.
LOOP1
LOOP
9009 900C
C2 09 90 C9
Check for Zero flag, if it is not set goto LOOP1. Return to the main function.
SAW TOOTH WAVEFORM GENERATION ADDRESS 8000 8002 8004 8006 8008 8009 800C LABEL MNEMONICS MVI A, 80 OUT F3 MVI A, 00 OUT F0 INR A JNZ LOOP JMP LOOP1 OPCODE 3E 80 D3 F3 3E 00 D3 F0 3C C2 06 80 C3 04 80 COMMENTS Move the control word immediately to the accumulator to indicate 8255 is in I/O mode. Move the control word to the control port. Move 00 immediately to the accumulator to have low value at all the lines of 8255 selected port. Move the accumulator content to port A of 8255. Increment the content of accumulator. Check for Zero flag, if is set goto LOOP otherwise goto next instruction. Jump unconditionally to LOOP 1 to obtain continues waveform.
LOOP 1
LOOP
LABEL
OPCODE 3E 80 D3 F3 3E 00 D3 F0 3C D3 F0 FE FF C2 08 80 CD 00 90 3D D3 F0 C2 13 80 C3 04 80
COMMENTS Move the control word immediately to the accumulator to indicate 8255 is in I/O mode. Move the control word to the control port. Move 00 immediately to the accumulator to have low value at all the lines of 8255 selected port. Move the accumulator content to port A of 8255. Increment the content of accumulator to have the increasing slope. Move the accumulator content to port A of 8255. Compare immediate the content of accumulator with the highest output voltage digital equivalent i.e. FF Check for Zero flag, if is set goto LOOP 1, otherwise goto next instruction CALL the delay to have the required width of the waveform. Decrement the accumulator content to have the decreasing slope of waveform Move the accumulator content to port A of 8255. Check for Zero flag, if is set goto LOOP 2. Jump unconditionally to LOOP 1 to obtain continuous waveform.
LOOP
LOOP 1
800D 8010
LOOP 2
171
Date: Aim:
To interface a seven segment LED to display a MOD 9 counter using 8085 Microprocessor.
Apparatus Required:
1. 8085 Trainer 2. Operation Code sheet
ALGORITHM: MAIN PROGRAM: STEP 1: Load the control word to the accumulator and move it to control port of 8255. STEP 2: More the value of initial count to accumulator and send to output port of 8255. STEP 3: Call delay subroutine to have a time delay between counts. STEP 4: Increment the count value. STEP 5: Compare the count value with the terminal count. STEP 6: Check for zero, if zero is reached go to step 2, else go to step 4. DELAY: STEP 1: Load the outer loop count to any register. STEP 2: Load the first inner loop count. STEP 3: Load the second inner loop count. STEP 4: Decrement the second inner loop count. STEP 5: Check for zero. If zero is reached go to next step else go to step 4. STEP 6: Decrement the first inner loop count. STEP 7: Check for zero, if zero is reached go to next step else go to step 3. STEP 8: Decrement the outer loop count. STEP 9: Check for zero. If Zero is set go to next step else go to step 2. STEP 10: Return to main program.
173
FLOW CHART:
START
LOAD THE CONTROL WORD TO THE ACCUMULATOR AND MOVE IT TO CONTROLPORT OF 8255
YES
CHEC K FOR ZERO
NO
174
START
NO
YES
DECREMENT THE INNER LOOP 1 COUNT
NO
YES
DECREMENT THE OUTER LOOP COUNT
NO
YES
RETURN
175
PROGRAM: ADDRESS 8000 8002 8004 LABEL MNEMONICS MVI A, 80 OUT F3 MVI A, 00 OPCODE 3E 80 D3 F3 3E 00 D3 F0 CD 00 90 C6 01 27 FE 0A C2 06 80 C3 04 80 COMMENTS Move the control word immediately to the accumulator to indicate 8255 is in I/O mode. Move the control word to the control port. Clear the accumulator to start count from initial value. Move the accumulator content to port A of 8255. CALL the DELAY program to have a time delay between each display. Increment the count Decimal adjust the accumulator to have packed BCD output Compare with the terminal count. Check for zero flag, if it is not set display the corresponding BCD number. Jump unconditionally to LOOP 1 to initialize the count again.
LOOP 1 LOOP
8006
OUT F0
8013
JMP LOOP1
176
1 SECOND DELAY:
LABEL
MNEMONICS MVI E, 0A MVI C, FF DCR C JNZ LOOP DCR E JNZ LOOP1 RET
OPCODE 1E 0A 0E FF 0D C2 04 90 1D C2 09 90 C9
COMMENTS Move immediately the outer loop count 0A to the E register. Move immediately the inner loop count FF to the C register. Decrement the inner loop count i.e. C register content. Check for Zero flag, if it is not set goto Loop. Otherwise goto next step. Decrement the outer loop count i.e. the E register content. Check for Zero flag, if it is not set goto LOOP1. Otherwise goto next step. Return to the main function.
LOOP1
LOOP
177
RESULT: Thus the program was executed and the seven segment LED interfaced successfully to display counter.
178
179