?? init.asm
字號(hào):
;* clear bit0 for reseting again *
;****************************************************************
MOV DX,092H
IN AL,DX
AND AL,0FEH
OUT DX,AL
;
;****************************************************************
;* 初始化管腳配置寄存器PINCFG: *
;* pincfg.0置0表示在設(shè)備管腳選擇SSIOTX not RTS1; *
;* pincfg.1置0表示在設(shè)備管腳選擇SRXCLK not DTR1; *
;* we don't use modem mode so upon two conf is not important *
;* pincfg.2置1表示在設(shè)備管腳選擇TXD1; *
;* pincfg.3置1表示在設(shè)備管腳選擇CTS1#; *
;* pincfg.4置1表示在設(shè)備管腳選擇CS5#; *
;* pincfg.5置1表示在設(shè)備管腳選擇定時(shí)器控制單元信號(hào); *
;* pincfg.6置0表示在設(shè)備管腳選擇CS6#。 *
;****************************************************************
MOV AX,3CH
MOV DX,0F826H
OUT DX,AL ; set PINCFG register
;
;****************************************************************
;* 初始化端口1配置p1cfg: *
;* p1cfg.0置0表示在設(shè)備管腳選擇p1.0 not DCD0; *
;* p1cfg.1置0表示在設(shè)備管腳選擇p1.1 not RTS0; *
;* p1cfg.2置0表示在設(shè)備管腳選擇p1.2 not DTR0; *
;* p1cfg.3置0表示在設(shè)備管腳選擇p1.3 not DSR0; *
;* p1cfg.4置0表示在設(shè)備管腳選擇p1.4 not RI0; *
;* p1cfg.5置0表示在設(shè)備管腳選擇p1.5 not LOCK; *
;* p1cfg.6置0表示在設(shè)備管腳選擇p1.6 not HOLD; *
;* p1cfg.7置0表示在設(shè)備管腳選擇p1.7 not HLDA; *
;****************************************************************
MOV AL,00
MOV DX,0f820h ;P1CFG_1
OUT DX,AL
;
;****************************************************************
;* 初始化端口2配置p2cfg: *
;* p2cfg.0置1表示在設(shè)備管腳選擇cs0#; *
;* p2cfg.1置1表示在設(shè)備管腳選擇cs1#; *
;* p2cfg.2置1表示在設(shè)備管腳選擇cs2#; *
;* p2cfg.3置1表示在設(shè)備管腳選擇cs3#; *
;* p2cfg.4置1表示在設(shè)備管腳選擇cs4#; *
;* p2cfg.5置1表示在設(shè)備管腳選擇RXD0; *
;* p2cfg.6置1表示在設(shè)備管腳選擇TXD0; *
;* p2cfg.7置0表示在設(shè)備管腳選擇p2.7 not CTS0; *
;****************************************************************
MOV AL,7FH
MOV DX,0f822h ;P2CFG_2
OUT DX,AL
;****************************************************************
;* 初始化端口3配置p3cfg: *
;* p3cfg.0置0(INTCFG.6=1)表示連接主IR4到SIOINT0; *
;* p3cfg.1置0(INTCFG.5=1)表示連接主IR3到SIOINT1; *
;* p3cfg.2置1表示連接主IR1到管腳INT0; *
;* p3cfg.3置1表示連接主IR5到管腳INT1; *
;* p3cfg.4置1表示連接主IR6到管腳INT2; *
;* p3cfg.5置1表示連接主IR7到管腳INT3; *
;* p3cfg.6置0表示連接選擇設(shè)備管腳p3.6; *
;* p3cfg.7置0表示連接選擇設(shè)備管腳p3.7。 *
;* though we haven't used INT0-3, we connect them for later *
;****************************************************************
MOV AL,3CH ; modified by bao for using sioint
MOV DX,0f824h ;P3CFG_3
OUT DX,AL ; set P3CFG
;****************************************************************
;* 初始化調(diào)制解調(diào)控制寄存器MCR0、MCR1: *
;* we don't use modem function *
;****************************************************************
MOV AL,00H ; modified by bao for adding sioint
MOV DX,03FCH
OUT DX,AL ; 設(shè)置MCR0
MOV DX,02FCH
OUT DX,AL ; 設(shè)置MCR1
;****************************************************************
;* 初始化輸入輸出端口 *
;* we don't use them yet *
;****************************************************************
; 初始化端口1
MOV AX,00H
MOV DX,0F864H ;P1DIR Direction config
OUT DX,AL
MOV AX,0FEH
MOV DX,0F862H ;PILTC latch config
OUT DX,AL
; 初始化端口2
MOV AX,0
MOV DX,0F86CH
OUT DX,AL
MOV AX,0FFH
MOV DX,0F86AH
OUT DX,AL
; 初始化端口3
MOV AX,0
MOV DX,0F874H
OUT DX,AL
MOV AX,0BFH ; p3.7:1-->串口發(fā)送使能
; p3.6:0-->串口接收使能
MOV DX,0F872H
OUT DX,AL
;
;********************************************************
; Initialize the Asynchronous Serial Port #1 for:
; word length of 8 bits.
; No parity.
; 12.0 MHz clocking frequency.(12.0/2/2=3.0 MHz)
; 1 top bit.
; Internal modem control sources.
; 19200 bps baud rate.
; divisor = 3000 / 19.2 / 16 = 9.8 ~ 10
; Interrupt sources: None Enabled
;********************************************************
MOV AX,80H ; allow access to the divisor latch register(DLLS)
MOV DX,2FBH
OUT DX,AL
MOV AX,0
MOV DX,2F9H
OUT DX,AL
MOV AX,0AH ; init DDL1
MOV DX,2F8H
OUT DX,AL
MOV AX,03H ; allow access to receive and transfer register
MOV DX,2FBH ; 8 bit character
OUT DX,AL
MOV AX,03H ; enable receive and transfer int
MOV DX,2F9H ; disable modem and receive status int
OUT DX,AL
MOV DX,2F8H ; read empty receive buffer
IN AL,DX
;
;********************************************************
; Initialize the Asynchronous Serial Port #0 for:
; word length of 8 bits.
; No parity.
; 12.0 MHz clocking frequency.(12.0/2/2=3.0 MHz)
; 1 top bit.
; Internal modem control sources.
; 19200 bps baud rate.
; divisor = 3000 / 19.2 / 16 = 9.8 ~ 10
; Interrupt sources: None Enabled
;********************************************************
MOV AX,80H ; allow access to the divisor latch register(DLLS)
MOV DX,3FBH
OUT DX,AL
MOV AX,0
MOV DX,3F9H
OUT DX,AL
MOV AX,0AH ; init DDL1
MOV DX,3F8H
OUT DX,AL
MOV AX,03H ; allow access to receive and transfer register
MOV DX,3FBH ; 8 bit character
OUT DX,AL
MOV AX,03H ; enable receive and transfer int
MOV DX,3F9H ; disable modem and receive status int
OUT DX,AL
MOV DX,3F8H ; read empty receive buffer
IN AL,DX
;****************************************************************
;* 初始化中斷控制單元8259A: *
;* 主8259A和從8259A級(jí)聯(lián) *
;****************************************************************
; 主 8259A
MOV AX,11H ; 選擇邊沿觸發(fā)IR輸入信號(hào),間隔為4
MOV DX,ICW1M_I1M ; 初始化命令字1(ICW1)
OUT DX,AL
MOV AX,20H ; 設(shè)置主8259A的中斷向量基地址為20H
MOV DX,ICW2M_I2M ; 初始化命令字2(ICW2)
OUT DX,AL
MOV AX,04H ; 一個(gè)從8259A被連接到主8259A的IR2信號(hào)
MOV DX,ICW3M_I3M ; 初始化命令字3(ICW3)
OUT DX,AL
MOV AX,01H ; 選擇完全嵌套方式;禁止自動(dòng)EOI方式.
MOV DX,ICW4M_I4M ; 初始化命令字4(ICW4)
OUT DX,AL
MOV AL,0E6H ; OPEN SIO_0&1 INT
MOV DX,OCW1M_O1M ; 初始化OCW1
OUT DX,AL
MOV AL,20H ; 選擇普通EOI命令
MOV DX,OCW2M_O2M ; 初始化OCW2
OUT DX,AL
; 從 8259A
MOV AX,11H ; 選擇邊沿觸發(fā)IR輸入信號(hào),間隔為4.
MOV DX,ICW1S_I1S ; 初始化命令字1(ICW1)
OUT DX,AL
MOV AX,28H ; 設(shè)置從8259A的中斷向量基地址為28H
MOV DX,ICW2S_I2S ; 初始化命令字2(ICW2)
OUT DX,AL
MOV AX,02H ; slave
MOV DX,ICW3S_I3S ; 初始化命令字3(ICW3)
OUT DX,AL
MOV AX,01H ; 選擇完全嵌套方式;禁止自動(dòng)EOI方式.
MOV DX,ICW4S_I4S ; 初始化命令字4(ICW4)
OUT DX,AL
MOV AL,0FFH ; 屏蔽所有從8259A中斷
MOV DX,OCW1S_O1S ; 初始化OCW1
OUT DX,AL
MOV AL,20H ; 選擇普通EOI命令
MOV DX,OCW2S_O2S ; 初始化OCW2
OUT DX,AL
;********** COPY IDT TO 0:0 ADDRESS ***************
PUSH AX
PUSH CX
PUSH DS
PUSH ES
MOV AX,0 ; OBJECT SEG
MOV ES,AX
MOV AX,SEG MY_INT
MOV DS,AX ; RESOURCE SEG
MOV DI,32*4
MOV SI,32*4
MOV CX,128 ; USING 32 INTS IS ENOUGH
CLD
REP MOVSW
POP ES
POP DS
POP CX
POP AX
;**************************************************
STI
;**********************************
MOV AX,SEG OBDH
PUSH AX
XOR AX,AX
PUSH AX
RET
MAIN ENDP
;
;*********************************************************************
; SIO-0 RECEIVING AND TRANSMITTING ISP ROUTINE
;*********************************************************************
;
PUBLIC SIO_0_INT
SIO_0_INT PROC FAR
PUSH AX
PUSH DX
PUSH BX
;***************************************
MOV DX,03FDH
IN AL,DX
TEST AL,20H ;transmit buffer is empty
JNZ SEND_NEXT_BYTE
TEST AL,01H ;receive buffer is full
JNZ RECV_BYTE
JMP SHORT SIO_0_INT_OUT
SEND_NEXT_BYTE:
MOV AX,SIO_0_SEND_NUM
MOV BX,SIO_0_SEND_COUNT
CMP AX,BX
JBE SIO_0_INT_OUT ;BELOW OR EQUAL -- ALL DATA HAS BEEN SENT
MOV AL,[SIO_0_SEND_BUFF + BX]
MOV DX,3F8H
OUT DX,AL ;SEND NEXT BYTE
INC SIO_0_SEND_COUNT
JMP SHORT SIO_0_INT_OUT
RECV_BYTE:
MOV DX,3F8H
IN AL,DX
MOV BX,SIO_0_RECV_NUM
LEA BX,[SIO_0_RECV_BUFF + BX]
MOV [BX],AL
;***************************************
SIO_0_INT_OUT:
MOV AL,20H
OUT OCW2M_O2M,AL ;sending EOI instruction
;***************************************
POP BX
POP DX
POP AX
IRET
SIO_0_INT ENDP
;
;*********************************************************************
; SIO-1 RECEIVING AND TRANSMITTING ISP ROUTINE
;*********************************************************************
;
PUBLIC SIO_1_INT
SIO_1_INT PROC FAR
PUSH AX
PUSH DX
PUSH BX
;***************************************
MOV DX,02FDH
IN AL,DX
TEST AL,20H ;transmit buffer is empty
JNZ SEND_NEXT_BYTE1
TEST AL,01H ;receive buffer is full
JNZ RECV_BYTE1
JMP SHORT SIO_1_INT_OUT
SEND_NEXT_BYTE1:
MOV AX,SIO_1_SEND_NUM
MOV BX,SIO_1_SEND_COUNT
CMP AX,BX
JBE SIO_1_INT_OUT ;BELOW OR EQUAL -- ALL DATA HAS BEEN SENT
MOV AL,[SIO_1_SEND_BUFF + BX]
MOV DX,2F8H
OUT DX,AL ;SEND NEXT BYTE
INC SIO_1_SEND_COUNT
JMP SHORT SIO_1_INT_OUT
RECV_BYTE1:
MOV DX,2F8H
IN AL,DX
MOV BX,SIO_1_RECV_NUM
LEA BX,[SIO_1_RECV_BUFF + BX]
MOV [BX],AL
;***************************************
SIO_1_INT_OUT:
MOV AL,20H
OUT OCW2M_O2M,AL ;sending EOI instruction
;***************************************
POP BX
POP DX
POP AX
IRET
SIO_1_INT ENDP
;*********************************************************************
;TIMER0_INT
;*********************************************************************
PUBLIC TIMER0_INT
TIMER0_INT PROC FAR
PUSH AX
PUSH BX
PUSH CX
PUSH DI
PUSH DS
MOV AX,MY_DATA
MOV DS,AX
INC COUNTER
MOV AL,20H
OUT ICW1M_I1M,AL
POP DS
POP DI
POP CX
POP BX
POP AX
IRET
TIMER0_INT ENDP
MY_CODE ENDS
MY_INT SEGMENT 'CODE'
II0_31 DD 32 DUP(218H)
II32 DW TIMER0_INT ;IR0--TMROUT0
DW MY_CODE
II33 DW 0 ;IR1--INT0
DW MY_CODE
II34 DW 0 ;IR2--Slave 82C59A
DW MY_CODE
II35 DW SIO_1_INT ;IR3--SIO1
DW MY_CODE
II36 DW SIO_0_INT ;IR4--SIO0
DW MY_CODE
II37_255 DD 219 DUP(218H)
MY_INT ENDS
END start
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -