Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- NAME LAB3A
- ;*****************************************************************************
- ; B E G I N N I N G O F P R O G R A M
- ;*****************************************************************************
- ;-----------------------------------------------------------------------------
- ; E Q U A T E S
- ;-----------------------------------------------------------------------------
- ; 8255 Setup
- CNTR_8255 EQU 0FFFEH ;Port control address
- OUTPUT_MODE EQU 0B5H ;Set up mode for port B output
- ; 8253 Setup
- COUNT_CNTR EQU 000EH ;counter control register address
- MODE2 EQU 74H ;Mode2: Rate Generator
- MODE3 EQU 36H ;Mode3: Square Wave
- COUNT0 EQU 0008H ;counter0 address
- COUNT1 EQU 000AH ;counter1 address
- LOPT100uSEC EQU 0F5H ;LSB of 100uSec value.
- HIPT100uSEC EQU 00H ;MSB of 100uSec value.
- LOPT200uSEC EQU 02H ;LSB of 200uSec value.
- HIPT200uSEC EQU 00H ;MSB of 200uSec value.
- ; 8259A Setup
- CLR_A0 EQU 0000H ;Which CW's written here? A0 Bit
- SET_A0 EQU 0002H ;Which CW's written here? A0 Bit
- ICW1 EQU 17H ;Edge Triggered; Interval of 4; Single; ICW4 Needed
- ICW2 EQU 20H ;Vector address
- ICW4 EQU 03H ;Auto EOI; 8086 mode
- OCW1 EQU 0FCH ;Set Interrupt Mask
- ;-----------------------------------------------------------------------------
- ; S T A R T O F V E C T O R S E G M E N T
- ;-----------------------------------------------------------------------------
- VECTOR_SEG SEGMENT
- ORG 00080H ;Interrupt vector: type 32 dec.
- IR0_IP_VECT DW ? ;Low contains IP of ISR0
- IR0_CS_VECT DW ? ;High contains CS of ISR0
- IR1_IP_VECT DW ? ;Low contains IP of ISR1
- IR1_CS_VECT DW ? ;High contains CS of ISR1
- VECTOR_SEG ENDS
- ;-----------------------------------------------------------------------------
- ; S T A R T O F C O D E S E G M E N T
- ;-----------------------------------------------------------------------------
- CODE_SEG SEGMENT
- ASSUME CS:CODE_SEG, DS:DATA_SEG
- ORG 00100H
- ;..............................................................................
- ; PROCEDURE : INIT
- ;
- ; - This procedure is called from the main program to initialize the
- ; 8253, the 8259A and the 8255.
- ;..............................................................................
- INIT PROC NEAR
- ASSUME DS:DATA_SEG ;offset relative to data_seg
- ;Initialize the 8255 to set port B as output to DAC.
- MOV DX,CNTR_8255 ; Port control address
- MOV AL,OUTPUT_MODE ; Set up mode for port B output
- OUT DX,AL
- ;Initialize 8253 counter0 and counter1 - counter2 is not used.
- ;Clock is the peripheral clock with frequency assumed to be 2.45MHz
- ;Set count0 to be a 100uSec square wave
- ;set count1 to be a 200uSec rate generator
- ;______________________________________________________________________________
- MOV DX,COUNT_CNTR ;set the output to be the ctrl word
- MOV AL,MODE3
- OUT DX,AL
- MOV DX,COUNT0
- MOV AL,LOPT100uSEC ;Load LSB of 100uSec value first.
- OUT DX,AL
- MOV AL,HIPT100uSEC
- OUT DX,AL
- MOV DX,COUNT_CNTR ;set the output to be the ctrl word
- MOV AL,MODE2
- OUT DX,AL
- MOV DX,COUNT1
- MOV AL,LOPT200uSEC ;load LSB of 200uSec value
- OUT DX,AL
- MOV AL,HIPT200uSEC
- OUT DX,AL
- ;Initialize 8259A to : Edge Triggered; Interval of 4; Single; ICW4 Needed
- ; Auto EOI; 8086 mode
- MOV DX,CLR_A0 ;Clear A0 Bit
- MOV AL,ICW1
- OUT DX,AL
- MOV DX,SET_A0 ;Set A0 Bit
- MOV AL,ICW2
- OUT DX,AL
- MOV AL,ICW4 ;Initialization Command Word 4
- OUT DX,AL
- MOV AL,OCW1 ;Operation Command word 4 ; Interrupt Mask
- OUT DX,AL
- ;Initialization complete, interrupts still disabled.
- RET
- INIT ENDP
- ;..............................................................................
- ; INTERRUPT SERVICE ROUTINE : ISR0
- ;..............................................................................
- ISR0 PROC NEAR
- IRET
- ISR0 ENDP
- ;..............................................................................
- ; INTERRUPT SERVICE ROUTINE : ISR1
- ;..............................................................................
- ISR1 PROC NEAR
- IRET
- ISR1 ENDP
- ;..............................................................................
- ; S T A R T O F M A I N P R O G R A M
- ;..............................................................................
- ASSUME DS:VECTOR_SEG ;offset relative to vector_seg
- ;Set up the interrupt vectors.
- BEG: CLI ;Ensure no interrupt occurs.
- MOV AX,VECTOR_SEG ;DS = vector_seg
- MOV DS,AX
- MOV IR0_IP_VECT,OFFSET ISR0 ;load all ISR's IP and CS
- MOV IR1_IP_VECT,OFFSET ISR1
- MOV AX,CS
- MOV IR0_CS_VECT,AX
- MOV IR1_CS_VECT,AX
- ASSUME DS:DATA_SEG ;offset relative to data_seg
- MOV AX,DATA_SEG ;Define data segment
- MOV DS,AX
- CALL INIT ;Initialization
- STI ;Enable the interrupt now.
- LOOP1:
- JMP LOOP1
- CODE_SEG ENDS
- ;----------------------------------------------------------------------------
- ; S T A R T O F D A T A S E G M E N T
- ;----------------------------------------------------------------------------
- DATA_SEG SEGMENT
- DAC_MEMORY DB 0 ;Store the current DAC value
- GARBAGE DB 0 ;Store the garbage character.
- DATA_SEG ENDS
- END BEG
- ;******************************************************************************
- ; E N D O F P R O G R A M
- ;******************************************************************************
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement