第三部分 接口技术实验.docx
《第三部分 接口技术实验.docx》由会员分享,可在线阅读,更多相关《第三部分 接口技术实验.docx(29页珍藏版)》请在冰豆网上搜索。
第三部分接口技术实验
第三部分接口技术实验
实验一
【实验内容】利用DOS系统功能调用,从键盘输入一串字符,分别统计字母、数字和其他字符的个数,并输出显示统计结果,编写出实现这一功能的汇编源程序。
解:
程序如下:
DATA SEGMENT
MAXSTRING DB 100
INACT DB ?
STRING DB 100
DISMESS DB 'PLEASEENTERASTRING:
',0AH,0DH,'$'
DIGITAL DB 'DIGITALIS:
','$'
LETTER DB 'LETTER IS:
','$'
OTHERCHAR DB 'OTHER IS:
','$'
CRLF DB 0AH,0DH,'$'
DATA ENDS
CODE SEGMENT
ASSUMECS:
CODE,DS:
DATA
MAIN PROC FAR
MOV AX,DATA
MOV DS,AX
MOV BL,0
MOV BH,0
MOV CH,0
DISPSTRING MACRO
MOV AH,9
INT 21H
ENDM
DISPCHAR MACRO
MOV AH,2
INT 21H
ENDM
LEA DX,DISMESS
DISPSTRING
BEGIN:
LEA DX,MAXSTRING
MOV AH,0AH
INT 21H
MOV DL,INACT
MOV DH,0
INC DX
LEA SI,STRING
REPEAT:
DEC DX
JZ ENDCHE
MOV AL,[SI]
INC SI
CMP AL,'0'
JB OTHER
CMP AL,'9'
JA NEXT1
INC BL
JMP REPEAT
NEXT1:
OR AL,20H
CMP AL,'a'
JB OTHER
CMP AL,'z'
JA OTHER
INC BH
JMP REPEAT
OTHER:
INC CH
JMP REPEAT
ENDCHE:
LEA DX,DIGITAL
DISPSTRING
MOV CL,BL
CALL DISP
LEA DX,LETTER
DISPSTRING
MOV CL,BH
CALL DISP
LEA DX,OTHERCHAR
DISPSTRING
MOV CL,CH
CALL DISP
MOV AH,4CH
INT 21H
MAIN ENDP
DISP PROC NEAR
MOV AL,CL
MOV AH,0
MOV CL,100
DIV CL
MOV CL,AH
MOV DL,AL
ADD DL,30H
DISPCHAR
MOV AL,CL
MOV AH,0
MOV CL,10
DIV CL
MOV CL,AH
MOV DL,AL
ADD DL,30H
DISPCHAR
MOV DL,CL
ADD DL,30H
DISPCHAR
LEA DX,CRLF
DISPSTRING
RET
DISP ENDP
CODE ENDS
END MAIN
实验二
【实验内容】把地址偏移量为100H单元开始的256个单元分别写入数据00H,01H,02H,03H,…,FFH,并用DOS功能调用显示各单元的内容。
为了显示清晰明了,要求每行显示16个数据,两个数据之间用空格分开,编写出实现这一功能的汇编源程序。
解:
程序如下:
DATA SEGMENT
ORG 100H
BUF1 DB 256DUP(?
)
COUNT EQU $-BUF1
DATA ENDS
CODE SEGMENT
ASSUME CS:
CODE,DS:
DATA
START:
MOV AX,DATA
MOV DS,AX
MOV SI,OFFSETBUF1
MOV CX,COUNT
PUSH SI
PUSH CX
XOR AL,AL
NEXT:
MOV [SI],AL
INC AL
INC SI
LOOP NEXT
POP CX
POP SI
ZRBH:
MOV BH,16
NEXT1:
MOV AL,[SI]
MOV BL,AL
SHR AL,1
SHR AL,1
SHR AL,1
SHR AL,1
CMP AL,0AH
JC JIA30
ADD AL,7
JIA30:
ADD AL,30H
CALL DISP
MOV AL,BL
AND AL,0FH
CMP AL,0AH
JC JIA30A
ADD AL,7
JIA30A:
ADD AL,30H
CALL DISP
MOV AL,20H
CALL DISP
INC SI
LOOP NEXT2
JMP STOP
NEXT2:
DEC BH
JNZ NEXT1
MOV AL,0AH
CALL DISP
MOV AL,0DH
CALL DISP
JMP ZRBH
DISP PROC NEAR
MOV DL,AL
MOV AH,2
INT 21H
RET
DISP ENDP
STOP:
MOV AH,4CH
INT 21H
CODE ENDS
END START
实验三(8253)
【实验内容】以1MHz的信号为时钟信号,利用8253产生一个周期为1ms的方波。
解:
程序如下:
CODE SEGMENT
MAIN PROCFAR
ASSUMECS:
CODE
START:
CLI
MOVDX,303H
MOVAL,36H
OUTDX,AL
MOVDX,300H
MOVAL,0E8H
OUTDX,AL
MOVAL,03H
OUTDX,AL
MOVDX,303H
MOVAL,74H
OUTDX,AL
MOVDX,301H
MOVAL,0AH
OUTDX,AL
MOVAL,00H
OUTDX,AL
STI
MOVAH,4CH
INT21H
MAINENDP
CODE ENDS
ENDSTART
实验四(8255)
【实验内容】读入开关量到8255A,再将其通过指示灯显示。
以8255A的A口作输入,B口作输出,输入用开关,输出用发光二极管,要求当输入不全为0时,输入与输出保持一致。
当输入为全0时,发光二极管闪烁。
解:
程序如下:
PORTA=308H
PORTB=309H
CONTROL=30BH
DCONS=10H
DATA SEGMENT
MESS DB0DH,0AH,'PRESSANYKEYTOEXIT…',0AH,0DH,'$'
DATA ENDS
CG SEGMENT'CODE'
ASSUMECS:
CG,DS:
DATA
BEGIN:
PUSHDS
XORAX,AX
PUSHAX
MOVAX,DATA
MOVDS,AX
MOVDX,OFFSETMESS
MOVAH,9
INT21H
MOVDX,CONTROL
MOVAL,90H
OUTDX,AL
MOVAH,0FFH
MOVBL,0
LP:
PUSHAX
MOVAH,0BH
INT21H
CMPAL,0
JNEBACK
POPAX
MOVDX,PORTA
INAL,DX
NOP
NOP
TESTAL,AH
JZSHIFT
MOVDX,PORTB
OUTDX,AL
JMPLP
SHIFT:
MOVAL,BL
MOVDX,PORTB
OUTDX,AL
CALLDELAY
SHLBL,1
TESTBL,AH
JNZLP
MOVBL,1
JMPLP
BACK:
POPAX
RETF
DELAY PROCNEAR
PUSHAX
MOVBH,DCONS
DDLY:
MOVCX,0
DELAY1:
DECCX
LOOPDELAY1
DECBH
TESTBH,AH
JNZDDLY
POPAX
DELAY ENDP
CG ENDS
ENDBEGIN
实验五(8259A)
【实验内容】要求使用8259A的IRQ0,用单脉冲信号模拟外部中断信号,使中断程序在屏幕上显示信息,在中断程序中,要求依次显示a~z这26个字母。
STACK SEGMENTSTACK
DB200DUP(0)
STACK ENDS
C8259 EQU20H
CODE SEGMENT 'CODE'
MAIN PROCFAR
ASSUME CS:
CODE,SS:
STACK
START:
XORAX,AX
MOVDS,AX
LEAAX,IRQ0
MOVDS:
20H,AX
MOVDX,C8259
MOVAL,00010011B
OUTDX,AL
INCDX
MOVAL,00001000B
OUTDX,AL
MOVAL,00001101B
OUTDX,AL
MOVAL,11111110B
OUTDX,AL
MOVAL,20H
OUT20H,AL
MOVBL,'a'
MOVAL,BL
MOVAH,1
INT14H
STI
JMP$
IRQ0:
CLI
INCBL
CMPBL,'{'
JNZNEXT
MOVAH,4CH
INT21H
NEXT:
MOVAL,BL
MOVAH,1
INT14H
MOVAL,20H
OUT20H,AL
STI
IRET
MAIN ENDP
CODE ENDS
END START
实验六(8250)
【实验内容】两台微机之间按RS232C标准协议使用COM1进行串行通信,构成一个字符或数据的各位按时间先后,从低位到高位一位一位地传送。
解:
程序如下:
STACK SEGMENTPARASTACK'STACK'
DB256DUP(0)
STACK ENDS
CODE SEGMENTPARAPUBLIC'CODE'
START PROCFAR
ASSUMECS:
CODE
PUSHDS
MOVAX,0
PUSHAX
MOVDX,3FBH
MOVAL,80H
OUTDX,AL
MOVDX,3F8H
MOVAL,12
OUTDX,AL
INCDX
MOVAL,0
OUTDX,AL
MOVDX,3FBH
MOVAL,0AH
OUTDX,AL
MOVDX,3FCH
MOVAL,03H
OUTDX,AL
MOVDX,3F9H
MOVAL,0
OUTDX,AL
FOREVER:
MOVDX,3FDH
INAL,DX
TESTAL,1EH
JNZERROR
TESTAL,01H
JNZRECEIVE
TESTAL,20H
JZFOREVER
MOVAH,1
INT16H
JZFOREVER
MOVAH,0
INT16H
MOVDX,3F8H
OUTDX,AL
MOVAH,2
MOVDL,AL
INT21H
CMPAL,27
JNZNEXT
MOVAH,4CH
INT21H
NEXT:
JMPFOREVER
RECEIVE:
MOVDX,3F8H
INAL,DX
ANDAL,7FH
CMPAL,27
JNZDISP
MOVAH,4CH
INT21H
DISP:
PUSHAX
MOVBX,0
MOVAH,14
INT10H
POPAX
CMPAL,0DH
JNZFOREVER
MOVAL,0AH
MOVBX,0
MOVAH,14
INT10H
JMPFOREVER
ERROR:
MOVDX,3F8H
INAL,DX
MOVAL,'?
'
MOVBX,0
MOVAH,14
INT10H
JMPFOREVER
START ENDP
CODE ENDS
ENDSTART
实验七(A/D及D/A)
【实验内容】如果要在PC/XT机上采用ADC0809设计一块8通道的数据采集卡,要求以200Hz的速率对每个通道均采集1024个数据,也就是每隔5ms对各通道轮流采集一个数据,然后将它们存到数据段中以DBUF为始址的数据缓冲区中。
数据存放的次序须与通道号一致,即从通道0开始,先依次存入每个通道的第一个数据,再存入各通道的第二个数据,直到各通道都存满1024个数据为止。
分析:
可以选用8253芯片来产生定时脉冲,控制采样率。
假设加到8253的CLK0的时钟脉冲的频率为1MHz,编程使通道0工作于方式2,由于采样率fS=200Hz,当选