Advertisement
Guest User

Untitled

a guest
Mar 5th, 2015
177
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1.  NAME       LAB3A
  2.  
  3. ;*****************************************************************************
  4. ;       B E G I N N I N G    O F    P R O G R A M
  5. ;*****************************************************************************
  6.  
  7. ;-----------------------------------------------------------------------------
  8. ;       E Q U A T E S
  9. ;-----------------------------------------------------------------------------
  10.  
  11. ; 8255 Setup
  12. CNTR_8255   EQU 0FFFEH  ;Port control address
  13. OUTPUT_MODE EQU 0B5H    ;Set up mode for port B output
  14.  
  15. ; 8253 Setup
  16. COUNT_CNTR      EQU 000EH   ;counter control register address
  17. MODE2           EQU 74H     ;Mode2: Rate Generator
  18. MODE3           EQU 36H     ;Mode3: Square Wave
  19. COUNT0          EQU 0008H   ;counter0 address
  20. COUNT1          EQU 000AH   ;counter1 address
  21. LOPT100uSEC     EQU 0F5H    ;LSB of 100uSec value.
  22. HIPT100uSEC     EQU 00H     ;MSB of 100uSec value.
  23. LOPT200uSEC     EQU 02H     ;LSB of 200uSec value.
  24. HIPT200uSEC     EQU 00H     ;MSB of 200uSec value.
  25.  
  26. ; 8259A Setup
  27. CLR_A0      EQU 0000H       ;Which CW's written here? A0 Bit
  28. SET_A0      EQU 0002H       ;Which CW's written here? A0 Bit
  29. ICW1        EQU 17H         ;Edge Triggered; Interval of 4; Single; ICW4 Needed
  30. ICW2        EQU 20H         ;Vector address
  31. ICW4        EQU 03H         ;Auto EOI; 8086 mode
  32. OCW1        EQU 0FCH        ;Set Interrupt Mask
  33.  
  34. ;-----------------------------------------------------------------------------
  35. ;       S T A R T    O F    V E C T O R    S E G M E N T
  36. ;-----------------------------------------------------------------------------
  37.  
  38. VECTOR_SEG  SEGMENT
  39. ORG         00080H      ;Interrupt vector: type 32 dec.
  40.        
  41. IR0_IP_VECT DW  ?       ;Low contains IP of ISR0
  42. IR0_CS_VECT DW  ?       ;High contains CS of ISR0
  43. IR1_IP_VECT DW  ?       ;Low contains IP of ISR1
  44. IR1_CS_VECT DW  ?       ;High contains CS of ISR1
  45.  
  46. VECTOR_SEG  ENDS
  47.  
  48. ;-----------------------------------------------------------------------------
  49. ;       S T A R T    O F    C O D E     S E G M E N T
  50. ;-----------------------------------------------------------------------------
  51.  
  52. CODE_SEG    SEGMENT
  53. ASSUME      CS:CODE_SEG, DS:DATA_SEG
  54. ORG         00100H
  55.  
  56. ;..............................................................................
  57. ;   PROCEDURE : INIT
  58. ;
  59. ;   - This procedure is called from the main program to initialize the
  60. ;     8253, the 8259A and the 8255.
  61. ;..............................................................................
  62. INIT        PROC    NEAR
  63. ASSUME      DS:DATA_SEG         ;offset relative to data_seg
  64.  
  65. ;Initialize the 8255 to set port B as output to DAC.
  66.  
  67.             MOV DX,CNTR_8255    ; Port control address
  68.             MOV AL,OUTPUT_MODE  ; Set up mode for port B output
  69.             OUT DX,AL        
  70.  
  71. ;Initialize 8253 counter0 and counter1 - counter2 is not used.
  72. ;Clock is the peripheral clock with frequency assumed to be 2.45MHz
  73. ;Set count0 to be a 100uSec square wave
  74. ;set count1 to be a 200uSec rate generator
  75. ;______________________________________________________________________________
  76.  
  77.             MOV DX,COUNT_CNTR   ;set the output to be the ctrl word
  78.             MOV AL,MODE3
  79.             OUT DX,AL
  80.             MOV DX,COUNT0
  81.             MOV AL,LOPT100uSEC  ;Load LSB of 100uSec value first.
  82.             OUT DX,AL
  83.             MOV AL,HIPT100uSEC
  84.             OUT DX,AL
  85.    
  86.             MOV DX,COUNT_CNTR   ;set the output to be the ctrl word
  87.             MOV AL,MODE2
  88.             OUT DX,AL
  89.             MOV DX,COUNT1
  90.             MOV AL,LOPT200uSEC  ;load LSB of 200uSec value
  91.             OUT DX,AL
  92.             MOV AL,HIPT200uSEC
  93.             OUT     DX,AL
  94.  
  95. ;Initialize 8259A to : Edge Triggered; Interval of 4; Single; ICW4 Needed
  96. ;                      Auto EOI; 8086 mode
  97.  
  98.             MOV DX,CLR_A0   ;Clear A0 Bit
  99.             MOV AL,ICW1
  100.             OUT DX,AL
  101.             MOV DX,SET_A0   ;Set A0 Bit
  102.             MOV AL,ICW2
  103.             OUT DX,AL
  104.             MOV AL,ICW4     ;Initialization Command Word 4
  105.             OUT DX,AL
  106.             MOV AL,OCW1     ;Operation Command word 4 ; Interrupt Mask
  107.             OUT DX,AL
  108.  
  109. ;Initialization complete, interrupts still disabled.
  110.  
  111.             RET
  112. INIT        ENDP
  113.  
  114.  
  115. ;..............................................................................
  116. ;   INTERRUPT SERVICE ROUTINE : ISR0
  117. ;..............................................................................
  118. ISR0        PROC    NEAR
  119.             IRET
  120. ISR0        ENDP
  121.  
  122.  
  123. ;..............................................................................
  124. ;   INTERRUPT SERVICE ROUTINE : ISR1
  125. ;..............................................................................
  126. ISR1        PROC    NEAR        
  127.             IRET            
  128. ISR1        ENDP
  129.  
  130.  
  131. ;..............................................................................
  132. ;   S T A R T     O F     M A I N     P R O G R A M
  133. ;..............................................................................
  134.  
  135. ASSUME      DS:VECTOR_SEG           ;offset relative to vector_seg
  136.  
  137. ;Set up the interrupt vectors.
  138.  
  139. BEG:        CLI                     ;Ensure no interrupt occurs.
  140.             MOV AX,VECTOR_SEG       ;DS = vector_seg
  141.             MOV DS,AX
  142.             MOV IR0_IP_VECT,OFFSET ISR0 ;load all ISR's IP and CS  
  143.             MOV IR1_IP_VECT,OFFSET ISR1
  144.             MOV AX,CS
  145.             MOV IR0_CS_VECT,AX
  146.             MOV IR1_CS_VECT,AX
  147.  
  148. ASSUME      DS:DATA_SEG             ;offset relative to data_seg
  149.  
  150.             MOV     AX,DATA_SEG     ;Define data segment
  151.             MOV     DS,AX
  152.             CALL    INIT            ;Initialization
  153.             STI                     ;Enable the interrupt now.
  154. LOOP1:      
  155.             JMP LOOP1
  156.  
  157. CODE_SEG        ENDS
  158.  
  159.  
  160. ;----------------------------------------------------------------------------
  161. ;       S T A R T     O F     D A T A     S E G M E N T
  162. ;----------------------------------------------------------------------------
  163. DATA_SEG        SEGMENT
  164.  
  165. DAC_MEMORY      DB  0               ;Store the current DAC value
  166. GARBAGE         DB  0               ;Store the garbage character.
  167.  
  168. DATA_SEG        ENDS
  169.  
  170.                 END     BEG
  171.  
  172. ;******************************************************************************
  173. ;                 E N D      O F      P R O G R A M
  174. ;******************************************************************************
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement