您好,欢迎来到尚车旅游网。
搜索
您的当前位置:首页微型计算机原理与应用

微型计算机原理与应用

来源:尚车旅游网


一、设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

本站由北京市万商天勤律师事务所王兴未律师提供法律服务