專注電子技術(shù)學(xué)習(xí)與研究
當(dāng)前位置:單片機(jī)教程網(wǎng) >> MCU設(shè)計(jì)實(shí)例 >> 瀏覽文章

對(duì)8259A的編程:統(tǒng)計(jì)中斷申請(qǐng)的次數(shù)到十燈全滅

作者:佚名   來源:本站原創(chuàng)   點(diǎn)擊數(shù):  更新時(shí)間:2013年11月30日   【字體:

DATA  SEGMENT       DATA  ENDS
CODE  SEGMENT       ASSUME   CS:CODE
ORG     11B0H           ; 設(shè)置程序存儲(chǔ)的起始位置
START:
  CLI                     ;關(guān)中斷,需要先關(guān)中  
  ;初始化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 裝入的是中斷類型號(hào)
   OUT  DX,AL             ; 控制字存入ICW2,設(shè)置中斷類型號(hào)
   MOV  AL,03H           ; ICW4控制字存入AL
   OUT  DX,AL           ; 控制字存入ICW4,設(shè)置中斷結(jié)束方式
  ;控制字寫完了。
  ;修改中斷向量表
   SUB AX,AX

   MOV ES,AX.

   MOV AX,2CH           
   MOV  DI,AX           ;設(shè)置偏移地址
   MOV AX,OFFSET INTWQ    ;取偏移地址
   CLD
   STOSW               ;存儲(chǔ)偏移地址
   MOV  AX,SEG  INTWQ     ;取段基址
   STOSW               ;存儲(chǔ)段基址

   STI                   ;開中斷
   MOV BL,0               ;初始化中斷次數(shù)計(jì)數(shù)器
   main:
    mov  al,00h          ;主程序
    mov  dx,iobpt
    out  dx,al            ;點(diǎn)亮所有的燈
    jmp main
    MOV  AH,4CH         ;程序的結(jié)束
    INT 21H
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    INTWQ PROC NEAR        ;中斷子程序
    CLI                    ;關(guān)中斷
    PUSH  AX          

    PUSH DX
    PUSHF
    INC BL                 ;中斷次數(shù)計(jì)數(shù)器加一
    mov al,bl            
    mov dx,iobpt           ;把中斷次數(shù)送到led燈
    OUT  DX,AL          
    CALL DELAY            ;延時(shí)
    cmp bl,0ah             ;判斷是否達(dá)到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          ;延時(shí)子程序的開始
      MOV  CX,0FFFFH    ;初始化計(jì)數(shù)次數(shù)
   CC:NOP                 ;空操作
     LOOP  CC              ;循環(huán)
      RET                ;子程序返回
DELAY  ENDP
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
CODE ENDS                ;代碼段結(jié)束
     END   START        ;源程序結(jié)束

關(guān)閉窗口

相關(guān)文章