×
嵌入式 > 技术百科 > 详情

对8259A的编程:统计中断申请的次数到十灯全灭

发布时间:2020-10-28 发布时间:
|
DATA  SEGMENT       DATA  ENDS

CODE  SEGMENT       ASSUME   CS:CODE
ORG     11B0H           ; 设置程序存储的起始位置
START:
  CLI                     ;关中断,需要先关中   
  ;初始化8255命令字
  IOCONPT EQU 0FF2BH      ;控制口
  IOBPT   EQU 0FF29H      ;PB口
  IOAPT   EQU 0FF28H      ;PA口
  MOV AL,90H              ;控制字存入AL
  MOV DX,IOCONPT          ;取8255控制字寄存器的端口地址存入DX
  OUT DX,AL               ; 控制字存入控制寄存器
  ;初始化8255 over 
  ;初始化8259命令字
   MOV DX,0FF80H          ; 取8259的偶端口地址存入DX
   MOV  AL,13H            ; ICW1控制字存入AL
   OUT  DX,AL             ; 控制字存入ICW1
   MOV  DX,0FF81H         ; 取8259的奇端口地址存入DX
   MOV  AL,0BH            ; ICW2控制字存入AL 装入的是中断类型号
   OUT  DX,AL             ; 控制字存入ICW2,设置中断类型号
   MOV  AL,03H           ; ICW4控制字存入AL
   OUT  DX,AL           ; 控制字存入ICW4,设置中断结束方式
  ;控制字写完了。
  ;修改中断向量表
   SUB AX,AX

   MOV ES,AX.

   MOV AX,2CH            
   MOV  DI,AX           ;设置偏移地址 
   MOV AX,OFFSET INTWQ    ;取偏移地址 
   CLD
   STOSW               ;存储偏移地址
   MOV  AX,SEG  INTWQ     ;取段基址
   STOSW               ;存储段基址

   STI                   ;开中断
   MOV BL,0               ;初始化中断次数计数器
   main:
    mov  al,00h          ;主程序
    mov  dx,iobpt
    out  dx,al            ;点亮所有的灯
    jmp main
    MOV  AH,4CH         ;程序的结束
    INT 21H
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    INTWQ PROC NEAR        ;中断子程序
    CLI                    ;关中断
    PUSH  AX          

    PUSH DX
    PUSHF
    INC BL                 ;中断次数计数器加一
    mov al,bl             
    mov dx,iobpt           ;把中断次数送到led灯
    OUT  DX,AL           
    CALL DELAY            ;延时
    cmp bl,0ah             ;判断是否达到10次
    jz  shuchu
    jmp  jiedian
 shuchu:  
    MOV  AL,0FFH        ;灯全灭
    mov  dx,iobpt
    OUT  DX,AL
    CALL DELAY
jiedian:   
    MOV AL,20H

    OUT 0FF80H,AL              
    POPF

    POP DX
    POP AX

    STI 
    IRET                ;中断返回
 INT28  ENDP ;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
DELAY  PROC  NEAR          ;延时子程序的开始
      MOV  CX,0FFFFH    ;初始化计数次数
   CC:NOP                 ;空操作
     LOOP  CC              ;循环
      RET                ;子程序返回
DELAY  ENDP
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
CODE ENDS                ;代码段结束
     END   START        ;源程序结束

 

『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
压敏电阻器的选用