一、设82的计数器0选择方式1,计数初值为0123H;计数器1选择方式3,计数初值为278AH;计数器2选择方式4,计数初值为0F00H。若82端口地址为94—97H。
(1)三个计数器和控制寄存器的端口地址分别是多少?
(2)写出82的初始化程序。
解:(1)计数器0的端口地址为94H,计数器1的端口地址为95H,
计数器2的端口地址为96H,控制寄存器的端口地址为97H。
(2)初始化程序如下:
MOV AL, 00110010B
OUT 97H, AL ;设置计数器0的工作方式
MOV AL, 23H
OUT 94H, AL
MOV AL, 01H
OUT 94H , AL ;送计数器0的计数初值
MOV AL, 01110110B
1
OUT 97H, AL ;设置计数器1的工作方式
MOV AL, 8AH
OUT 95H, AL
MOV AL, 27H
OUT 95H , AL ;送计数器1的计数初值
MOV AL, 10111000B
OUT 97H, AL ;设置计数器2的工作方式
MOV AL, 00H
OUT 96H, AL
MOV AL,0FH
OUT 96H , AL ;送计数器2的计数初值
二、设8255A的控制字寄存器地址为73H,PA口方式0输出,PB口方式1输入,PC口高4位输入。(1)PA口、PB口和PC口的端口地址分别是多少?
(2)写出8255的初始化程序。
2
解:(1)PA口的端口地址为70H, (2)初始化程序如下:
PB口的端口地址为71H, MOV AL, 10001110B
PC口的端口地址为72H。 OUT 73H, AL
三、 设计一个程序,要求完成以下功能:1。循环接收用户从键盘输入的字符,直到用户按空格键后退出;2。如果用户输入的是小写字母,则将其转换为大写字母再显示在屏幕上;如果用户输入的不是小写字母,则在屏幕上原样显示出来。
解:
CODE SEGMENT
ASSUME CS:CODE
BEGIN:
MOV AH, 07H
INT 21H
CMP AL, 20H
JE EXIT
CMP AL, ‘a’
3
JB JIXU
CMP AL, ‘z’
JA JIXU
SUB AL, 20H
JIXU: MOV DL, AL
MOV AH, 02H
INT 21H
JMP BEGIN
EXIT: MOV AH, 4CH
INT 21H
CODE ENDS
END BEGIN
四、设计一个程序,要求完成以下功能:1。接收用户从键盘输入的一个字符但不回显。2。根据用户的输入显示相应的提示信息:如果用户输入的是“1“,则在屏幕上显示“A“;如果用户输入的是“2“,则在屏幕上显示“B“;如果用户输入的是其它字符,则在屏幕上“C”。3。
4
显示提示信息后用户按任意键退出。
解: CODE SEGMENT
ASSUME CS:CODE
BEGIN:
MOV AH, 07H
INT 21H
CMP AL, ’1’
JNE NEXT1
MOV DL, ‘A’
JMP SHOW
NEXT1: CMP AL, ‘2’
JNE NEXT2
MOV DL, ‘B’
JMP SHOW
5
NEXT2: MOV DL, ‘C’
SHOW: MOV AH, 02H
INT 21H
MOV AH, 01H
INT 21H
MOV AH, 4CH
INT 21H
CODE ENDS
END BEGIN
五、判断指令正误,对正确指令写出寻址方式,对错误指令指出原因。
1. MOV DI,AX 解: 1.对,寄存器寻址。
2. MOV AL,[DX] 2.错,寄存器间接寻址不能采用DX寄存器。
3. PUSH BH 3.错,PUSH指令的操作数不能为字节。
4.MOV AX,[BX][SI] 4.对,基址变址寻址。
6
5.MUL AX,BX 5.错,指令格式有误,MUL指令只能带一个操作数。
六、判断下列指令书写是否正确。如果不正确,请说明原因。
(1) MOV AL, BX 解:(1)不正确。BX和AL长度不相等。
(2) MOV AL, CL (2)正确。
(3) INC [BX] (3)不正确。未明确指出操作数的长度。
(4) MOV DX, 2000H (4)正确。
(5) POP AH (5)不正确。POP指令的操作数不能为字节。
步进电机控制接口实验—步进电机控制程序
DATA SEGMENT
PSTA DB 05H,15H,14H,H,50H,51H,41H,45H ;相序表
message DB 'Press sw1 to start !' ;系统提示
DB 0DH,0AH
DB 'If you want to QUIT,press sw2!'
7
DB 0DH,0AH,'$'
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START:
MOV AX,DATA
MOV DS,AX
MOV AH,09H MOV DX,OFFSET message
INT 21H
MOV DX,303H MOV AL,81H
OUT DX,AL
MOV AL,09H
;显示提示信息
;初始化8255A
;置PC4=1关闭74LS373 8
OUT DX,AL
L: MOV DX,302H ;查SW1按下?(PC0=0 )
IN AL,DX
AND AL,01H JNZ L
MOV DX,303H MOV AL,08H
OUT DX,AL
RELOAD: MOV SI,OFFSET PSTA MOV CX,8 LOP: MOV DX,302H IN AL,DX
AND AL,02H
JZ QUIT
;未按下,等待
;置PC4=0,打开74LS37
;设相序表指针
;设8拍循环次数
;查SW2按下?(PC1=0 ?);已按下,退出
9
MOV AL,[SI] ;未按下,送相序代码到PA口
MOV DX,300H
OUT DX,AL
MOV DI,0AFH
DELAY1: MOV BX,0FFFFH DELAY: DEC BX
JNZ DELAY
DEC DI
JNZ DELAY1
INC SI DEC CX JNZ LOP JMP RELOAD
;延时
;相序表指针+1
;循环次数-1
;未到8次,继续
;已到8次,重新赋值
10
QUIT: MOV DX,303H ;置PC4=1,关闭74LS373
MOV AL,09
OUT DX,AL
MOV AH,4CH ;程序退出
INT 21H
CODE ENDS
END START
步进电机起/停控制程序
运行步骤: 1.按下开关SW1,起动 2.按下任意键,退出 code segment
assume cs:code,ds:code
org 100h
start:jmp begin
pstb db 05h,15h,14h,h,50h,51h,41h,45h
11
;反向加电数据表
delaytime dw (?) ;延时变量参数
message db 'press SW1 to start!',0ah,0dh ;系统提示信息
db 'if you want to quit,please hit any key!'
db 0ah,0dh,'$'
begin:mov ax,cs
mov ds,ax ;取程序数据段地址
mov ah,09h ;显示系统提示信息
mov dx,seg message
mov ds,dx
mov dx,offset message
int 21h
;初始化8255
mov dx,303h ;取8255的控制端口的地址
mov al,81h ;初始化8255的A口,B口和C口高四位为输出模式
12
out dx,al ;C口低四位为输入模式
;打开74ls373
mov al,08h
out dx,al ;置pc4=0,打开数据缓冲器74LS373
wait1: ;判断开关SW2的状态
mov dx,302h ;取8255的端口c的地址
in al,dx ;读端口c的值
;当按下开关sw2时,pc0口为低电平
and al,01h ;检测pc0口状态
jnz wait1
l0: mov si,offset pstb ;取反向加电数据表地址
mov cx,08h ;设置数据表循环参数
loop: ;检测任意键
13
mov ah, 0bh
int 21h ;调用DOS 21H 功能0BH 进行键盘判断
cmp al, 00h
jne over ;检测到任意键退出
;延时
mov delaytime,0ffffh ;设置延时变量参数值,采用的是软件
;延时方式,此值根据主机的频率而设定
mov ah,03h ;设置循环延时参数
l1: mov bx,delaytime ;进行软件延时,可根据主机频率
l2: dec bx ;调整延时变量参数值和循环延时参数
jnz l2
dec ah
jnz l1
;送加电数据
14
mov al,[si] ;取当前加电数据
mov dx,300h ;取8255的端口A的地址
out dx,al ;输出加电数据到端口A
inc si ;改变加电数据地址
dec cx ;修改数据表循环参数
jnz loop ;判断数据表循环是否结束
jmp l0 ;进行新的一轮循环
over: ;关闭74ls373
mov dx,303h ;取8255的控制端口的地址
mov al,81h
out dx,al
mov al,09h
out dx,al ;置pc4=1,关闭数据缓冲器74LS373
15
;返回DOS
mov ah, 4ch ;DOS功能调用
int 21h ;返回DOS
code ends
end start
步进电机起/停控制程序
运行步骤: 1.按下开关a,起动 2.按下b键,退出code segment
assume cs:code,ds:code
org 100h
start:jmp begin
pstb db 05h,15h,14h,h,50h,51h,41h,45h delaytime dw (?) ;延时变量参数
message db 'press a to start!',0ah,0dh
16
;反向加电数据表;系统提示信息
db 'if you want to quit,please hit b!'
db 0ah,0dh,'$'
begin:mov ax,cs
mov ds,ax ;取程序数据段地址
mov ah,09h ;显示系统提示信息
mov dx,seg message
mov ds,dx
mov dx,offset message
int 21h
;初始化8255
mov dx,303h ;取8255的控制端口的地址
mov al,81h ;初始化8255的A口,B口和C口高四位为输出模式
out dx,al ;C口低四位为输入模式
;打开74ls373
17
mov al,08h
out dx,al ;置pc4=0,打开数据缓冲器74LS373
wait1: ;判断开关a的状态
mov ah,07h
int 21h ;否则看按下的是什么键
cmp al,'a' ;检测pc0口状态aa
jne wait1
l0: mov si,offset pstb ;取反向加电数据表地址
mov cx,08h ;设置数据表循环参数a
loop1: ;检测任意键
mov ah, 0bh
int 21h ;调用DOS 21H 功能0BH 进行键盘判断
cmp al, 0ffh
18
jne jixu ;没有按下键盘,继续执行
mov ah,07h
int 21h ;否则看按下的是什么键
cmp al,'b'
je over ;按下的是b,退出
;延时
jixu: mov delaytime,0ffffh ;设置延时变量参数值,采用的是软件
;延时方式,此值根据主机的频率而设定
mov ah,03h ;设置循环延时参数
l1: mov bx,delaytime ;进行软件延时,可根据主机频率
l2: dec bx ;调整延时变量参数值和循环延时参数
jnz l2
dec ah
19
jnz l1
;送加电数据
mov al,[si] ;取当前加电数据
mov dx,300h ;取8255的端口A的地址
out dx,al ;输出加电数据到端口A
inc si ;改变加电数据地址
dec cx ;修改数据表循环参数
jnz loop1 ;判断数据表循环是否结束
jmp l0 ;进行新的一轮循环
over: ;关闭74ls373
mov dx,303h ;取8255的控制端口的地址
mov al,81h
out dx,al
20
mov al,09h
out dx,al ;置pc4=1,关闭数据缓冲器74LS373
;返回DOS
mov ah, 4ch int 21h code ends
end start ;DOS功能调用 ;返回DOS
21
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- sceh.cn 版权所有 湘ICP备2023017654号-4
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务