微机原理实验指导书(修改1023)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
微机原理实验指导书
华中科技大学计算机学院
武汉豪申光电新技术有限公司
目录
微机原理实验 (3)
第一章16位汇编语言编程验 (3)
实验一系统认识实验 (3)
实验二分支程序设计实验 (6)
实验三循环程序设计实验 (9)
实验四排序程序设计实验 (12)
实验五子程序设计实验 (15)
微机接口实验 (19)
第一节并行接口实验(8255芯片实验) (19)
实验一8255并行接口实验 (19)
第二节定时/计数实验(8253芯片实验) (26)
实验二音乐发声器接口实验 (26)
第三节串行通信接口实验(8251芯片实验) (33)
实验三 RS-232标准全双工查询方式异步串行通信实验 (34)
第四节A/D D/A转换器接口实验 (42)
实验四查询方式A/D转换器接口实验(ADC0809) (42)
实验五 D/A函数波形发生器接口实验(DAC0832) (49)
微机原理实验
第一章16位汇编语言编程验
实验一系统认识实验
⑴实验目的
掌握在MF平台中汇编程序的编写、调试方法。
⑵实验内容
基本实验将存储区BUF1中的内容复制到BUF2中。
⑶实验步骤
(一)方式1(Debug方式)
1.在MF2KP环境下输入汇编程序,编译、连接,生成.exe文件。
2.启动调试程序(Debug)。
3.在程序的退出处设置断点,利用Add Watch命令查看BUF2中的内容是否正确。
(二)方式2(人-机交互方式)
1.在MF2KP环境下输入汇编程序,编译、连接、运行。
2.按提示输入数据,在屏幕显示的结果中查看BUF1,2中的内容是否正确。
3.输入不同的字符串,可得到不同的结果。
⑷实验资源配置
IBMPC微机,Win2000操作系统,MF2KP微机原理实验集成开发环境。
⑸实验软件的编程
◇实验流程图如图1.1.1所示
将存储区BUF1中的内容复制到BUF2中的程序主功能模块如图1.1.1中的虚线框中所示。
◇实验参考程序如下所示
;*--------------------------------------------------* ;* Aexp1.asm(汇编语言编程认识实验) * ;* Copyright (c) 2002 by HUST * ;* 程序调试:在EXIT处设置断点,利用Add Watch命令 * ;* 查看BUF1和BUF2的内容是否正确 * ;*-------------------------------------------------* DATA SEGMENT
BUF1 DB 'MASM HELLO WORLD'
COUNT EQU $-BUF1
BUF2 DB20DUP(?)
DATA ENDS
STACK1 SEGMENT STACK
DB20DUP(?)
STACK1 ENDS
CODE SEGMENT
ASSUME DS:DATA,SS:STACK1,CS:CODE
START:
MOV AX,DATA
MOV DS,AX
MOV SI,OFFSET BUF1 ;建立源地址指针
MOV DI,OFFSET BUF2 ;建立目标地址指针
MOV CX,COUNT ;字节数送入CX寄存器
L1: MOV AL,[SI] ; 取源数据一个字节送入AL中MOV [DI],AL;将源数据送入目标地址单元中
INC SI
INC DI
DEC CX
JNZ L1 ;判断是否传送完毕
EXIT: MOV AH,4CH
INT21H
CODE ENDS
END START
⑹实验要求
◇按要求完成实验得出正确结果.
◇试着自己写出人机对话方式的汇编程序.
◇完成实验报告
实验二分支程序设计实验
⑴实验目的
掌握分支程序的结构。
掌握分支程序的设计方法。
⑵实验内容
编制计算下面函数值的程序(x,y的值在-128~+127之间)
1 x>=0,y>=0
a= -1 x<0,y<0
0 x,y异号
输入数据为x、y,输出数据为a.
⑶实验步骤
(一)方式1(Debug方式)
1.在MF2KP环境下输入汇编程序,编译、连接,生成.exe文件。
2. 启动调试程序(Debug)。
3. 在程序的退出处设置断点,利用Add Watch命令查看A中的内容是否正确。
(二)方式2(人-机交互方式)
1.在MF2KP环境下输入汇编程序,编译、连接、运行。
2.按提示输入数据,在屏幕显示的运行结果中查看结果是否正确。
3.输入不同的数据,可得到不同的结果。
⑷实验资源配置
IBMPC微机,Win2000操作系统,MF2KP微机原理实验集成开发环境。
⑸实验的软件编程
◇流程图如图1.1.2所示
分支程序主功能模块参照图1.1.2中虚线框内的流程。
◇实验程序如下所示
;*----------------------------------------------------------* ;* Aexp4.asm(分支程序设计实验) * ;* Copyright (c) 2002 by HUST * ;* 程序调试:在EXIT:MOV AH,4CH处设置断点,利用Add Watch * ;* 命令查看A中的内容是否正确 * ;*----------------------------------------------------------* STACK SEGMENT STACK
DB200DUP(0)
STACK ENDS
DATA SEGMENT
X DB -2
Y DB8
A D
B ?
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,SS:STACK
START:
MOV AX,DATA
MOV DS,AX
CMP X,0;x与0进行比较
JS L1 ;x<0转L1
CMP Y,0
JL L2 ;y<0转L2
MOV A,1;1送A
JMP EXIT
L1: CMP Y,0
JGE L2 ;y>=0转L2
MOV A,-1;x<0,y<0时,-1送A
JMP EXIT
L2: MOV A,0;x与y异号时,0送A EXIT: MOV AH,4CH
INT21H
CODE ENDS
END START
⑹实验要求
◇按要求完成实验得出正确结果.
◇试着自己写出人机对话方式的汇编程序.
◇完成实验报告
实验三循环程序设计实验
⑴实验目的
掌握循环程序的结构。
掌握循环程序的设计方法。
⑵实验内容
求某数据区内负数的个数。
设在以BUF为首址的字存储区输入n个有符号二进制数,统计的负数个数放在存储单位R中。
⑶实验步骤
(一)方式1(Debug方式)
1. 在MF2KP环境下输入汇编程序,编译、连接,生成.exe文件。
2. 启动调试程序(Debug)。
3. 在程序的退出处设置断点,利用Add Watch命令查看R中的内容是否正确。
(二)方式2(人-机交互方式)
1.在MF2KP环境下输入汇编程序,编译、连接、运行。
2.按提示输入数据,在屏幕显示的运行结果中查看结果是否正确。
3.输入不同的数据,可得到不同的结果。
⑷实验资源配置
IBMPC微机,Win2000操作系统,MF2KP微机原理实验集成开发环境。
⑸实验的软件编程
◇流程图如图1.1.3所示:
◇参考程序如下所示
;*------------------------------------------------------------------------------ * ;* Aexp5.asm(循环程序设计实验) * ;* Copyright (c) 2002 by HUST * ;* 程序调试:在MOV AH,4CH处设置断点,利用Add Watch命令查看R中的内容是否正确 * ;*-------------------------------------------------------------------------------*
STACK SEGMENT STACK
DB200DUP(?)
STACK ENDS
DATA SEGMENT
BUF DW -6,90,100,-3,-1,5,0,134;比较的数据
N EQU ($-BUF)/2;个数
R DB ?
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,SS:STACK
START:
MOV AX,DATA
MOV DS,AX
LEA SI,BUF ;取存储区首址
MOV BL,0;BL存放负数个数的初值
MOV CX,N ;CX中存放数据个数的初值
L1: MOV AX,[SI] ;取存储区数据CMP AX,0
JGE A2
INC BL;负数则BL加1
A2: ADD SI,2
DEC CX
JNZ L1
MOV R,BL;;将结果放入R中
MOV AH,4CH
INT21H
CODE ENDS
END START
⑹实验要求
◇完成实验得出正确结果.
◇试编人机对话方式的汇编程序.
◇完成实验报告。
实验四排序程序设计实验
⑴实验目的
1.掌握排序程序的结构。
2.掌握排序程序的设计方法。
⑵实验内容
在以BUF为首址的字节存储区存放有n个无符号数,用选择排序的方法按从小到大的顺序排列在BUF存储区中。
⑶实验步骤
(一)方式1(Debug方式)
1.在MF2KP环境下输入汇编程序,编译、连接,生成.exe文件。
2.启动调试程序(Debug)。
3.在程序的退出处设置断点,利用Add Watch命令查看变量[BUF]、[BUF+1]、[BUF+2]……[BUF+7]或者在VIEW菜单下观看DUMP里面DS寄存器中的内容是否正确。
(二)方式2(人-机交互方式)
1.在MF2KP环境下输入汇编程序,编译、连接、运行。
2.按提示输入数据,在屏幕显示的运行结果中查看结果是否正确。
3.输入不同的数据,可得到不同的结果。
⑷实验资源配置
IBMPC微机,Win2000操作系统,MF2KP微机原理实验集成开发环境。
⑸实验的软件编程
◇排序程序主功能模块参照图1.1.4中虚线框内的流程。
1.1.4主程序流程图
◇参考程序如下所示
;*------------------------------------------------------* ;* Aexp6.asm(排序程序设计实验) * ;* Copyright (c) 2002 by HUST * ;* 程序调试:在MOV AH,4CH处设置断点,利用Add Watch * ;* 命令查看变量[BUF]、[BUF+1]、[BUF+2]... * ;* [BUF+n-1]中的内容是否正确 * ;*------------------------------------------------------* STACK SEGMENT STACK
DB200DUP(0)
STACK ENDS
DATA SEGMENT
BUF DB20H,11H,25H,49H,0,43H,2H,0FFH
N EQU $-BUF
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,SS:STACK
START:
MOV AX,DATA
MOV DS,AX
MOV SI,1
L1: MOV DI,SI
INC DI
MOV AL,[BUF+SI-1]
L2: CMP AL,[BUF+DI-1]
JBE NEXT
XCHG [BUF+DI-1],AL
MOV [BUF+SI-1],AL
NEXT: INC DI
CMP DI,N
JBE L2
INC SI
CMP SI,N-1
JBE L1
MOV AH,4CH
INT21H
CODE ENDS
END START
⑹实验要求
◇按要求完成实验得出正确结果.
◇试着用人机对话方式的汇编程序.
◇完成实验报告
实验五子程序设计实验
⑴实验目的
1.掌握子程序的定义和调用方法。
2.掌握子程序、子程序的嵌套、递归子程序的结构。
3.掌握子程序的程序设计、编制及调用。
⑵实验内容
在以BUF为首址的字节存储区存放有n个无符号数,求该序列中的最大值和最小值。
⑶实验步骤
(一)方式1(Debug方式)
1.在MF2KP环境下输入汇编程序,编译、连接,生成.exe文件。
2.启动调试程序(Debug)。
3.在程序的退出处设置断点,利用Add Watch命令查看max、min中的内容是否正确。
(二)方式2(人-机交互方式)
1.在MF2KP环境下输入汇编程序,编译、连接、运行。
2.按提示输入数据,在屏幕显示的运行结果中查看结果是否正确。
3.输入不同的数据,可得到不同的结果。
⑷实验资源配置
IBMPC微机,Win2000操作系统,MF2KP微机原理实验集成开发环境。
⑸实验的软件编程
◇流程图如图1.1.5~1.1.6所示:
子程序调用程序主功能模块参照图1.1.5中虚线框内的流程。
1.1.5主程序流程图
1.1.6 MAXMIN子程序流程图
◇参考程序如下所示
;*------------------------------------------------------------* ;* Aexp7.asm(子程序设计实验) * ;* Copyright (c) 2002 by HUST * ;* 程序调试:在主程序MOV AH,4CH处设置断点,利用Add Watch * ;* 命令查看MAX,MIN中的内容是否正确 * ;*-----------------------------------------------------------* STACK SEGMENT STACK
DB200DUP(?)
STACK ENDS
DATA SEGMENT
BUF DB34H,22H,4H,5H,9H,23H,1H,65H,99H
N EQU $-BUF
MAX DB ?
MIN DB ?
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,SS:STACK
START:
MOV AX,DATA
MOV DS,AX
MOV SI,OFFSET BUF ;数据首址àSI
MOV CX,N ;数据个数àCX
CALL MAXMIN
MOV MAX,BH;存入最大值
MOV MIN,BL;存入最小值
MOV AH,4CH
INT21H
MAXMIN PROC
PUSH AX
MOV BH,[SI] ;将第一个数据àBH,BL
MOV BL,BH
DEC CX;需比较的数据个数减1
A1: INC SI
MOV AL,[SI]
CMP AL,BH
JBE A2
MOV BH,AL;如(AL)>(BH),则(AL)àBH
JMP A3
A2: CMP AL,BL
JAE A3
MOV BL,AL;如(AL)<(BL),则(AL)àBL
A3: LOOP A1 ;循环,直到CX=0
POP AX
RET
MAXMIN ENDP
CODE ENDS
END START
⑹实验要求
◇按要求完成实验得出正确结果.
◇试着自己写出人机对话方式的汇编程序.
◇完成实验报告
微机接口实验
第一节并行接口实验(8255芯片实验)
实验一 8255并行接口实验
⑴实验目的
学习8255的各种工作方式及其应用。
学习使用开关量控制LED的程序设计方法。
⑵实验内容
利用声-光报警器模块的灯光模块进行实验。
利用8位DIP8开关,控制8个LED彩灯的亮灭。
按下开关SW3后,再拨动8位拨码开关,即可控制8个LED灯的亮灭(走马灯花样)。
按下键盘上的Q或q键,系统结束工作,所有LED熄灭。
⑶实验原理
声-光报警器模块电路原理如图2.1.1所示。
模块包括4种简单的I/O外设:扬声器、8个LED彩灯、8位DIP开关及按钮开关SW3。
它们都是并行接口的对象,虽然功能单一,结构简单,但都必须通过接口电路才能进入微机系统,接受CPU的控制,发挥相应的作用。
图2.1.1 声-光报警器模块电路原理框图
⑷实验步骤
步骤一:硬件连线
跳线设置:单线将模块电源L区JP7和JP8跳接;排线将模块电源L区JP8跳接。
单线连法如右图:
步骤二:将平台的电源开关拔到“内”的位置上。
在配套集成环境下进行硬件检测,达到初始化芯片的目的.
步骤三:(学生实验步骤)打开集成环境在“文件”菜单下学生可以选择新建自己的ASM 文件或者使用集成环境自带的ASM参考程序进行调试、运行。
步骤四:观看实验现象得出结论。
调试和运行:
(1)MF2KP环境下输入汇编程序,编译、连接、运行。
(2)按下开关SW3后,拨动DIP开关,观察LED走马灯(灯光变幻)不同的花样。
⑸软件编程
◇流程图:如右图所示
◇参考程序如下所示
;***************************************************************************
; Aexp8.asm 走马灯(灯光变幻)程序 *
; 内容:用DIP的8位开关控制走马灯的花样,用SW3控制走马灯的起/停 * ; 运行步骤:1.按下一次开关SW3,开始灯光变幻,再按下一次则停止; 可重复进行 *
; 2.按下SW3后,拨动不同的数码开关DIP,就会出现不同的灯光变幻 *
; 3.按下"q"或者"Q",退出 *
;***************************************************************************
sseg segment para stack 'stack'
dw200dup (?)
sseg ends
dseg segment para public 'data'
message db 'press SW3 to start and then press SW3 to stop,and so on!',0ah,0dh;系统提
示信息
db 'turn on DIP one by one and display various soud-op patterns!'
db0ah,0dh
db 'if you want to quit, please hit ''q'' or ''Q''!',0ah,0dh,'$'
flag db0;初始化
状态标志变量为0
t dw0;初始化延时变量为0 num dw0;初始化数字变量为0
data1 db80h,40h,20h,10h,08h,04h,02h,01h;八种不同的灯光变幻组合
data2 db01h,02h,04h,08h,10h,20h,40h,80h
data3 db80h,20h,08h,02h,40h,10h,04h,01h
data4 db01h,04h,10h,40h,02h,08h,20h,80h
data5 db0c0h,30h,0ch,03h,0c0h,30h,0ch,03h
data6 db03h,0ch,30h,0c0h,03h,0ch,30h,0c0h
data7 db81h,42h,24h,18h,81h,42h,24h,18h
data8 db18h,24h,42h,81h,18h,24h,42h,81h
dseg ends
cseg segment para public 'code'
assume ss:sseg,cs:cseg,ds:dseg
m proc far
start: mov ax,ds
push ax
mov ax,00h
push ax;保留程序数据段地址
mov ah,09h;显示系统提示信息
mov dx,seg message
mov ds,dx
mov dx,offset message
int21h
;初始化8255
mov dx,303h;取8255的控制端口的地址
mov al,83h;初始化8255的A口和C口高四位为输出模式
out dx,al;B口和C口低四位为输入模式
;初始化灯LED全灭
mov dx,300h;取8255的端口A的地址
mov al,00h;使8255的PA0-PA7全为0
out dx,al;使所有的灯LED全灭
wait: ;检测"q"或者"Q"键
mov ah,0bh
int21h;调用DOS 21H 功能0BH 进行键盘判断
inc al
jnz readpc ;检测是否有键按下
mov ah,08h
int21h;调用DOS 21H 功能08H 进行键盘输入判断
cmp al,'q'
jz quit ;检测到"q",退出
cmp al,'Q'
jz quit ;检测到"Q",退出
readpc: ;判断开关SW3的状态
mov dx,302h;取8255的端口C的地址
in al,dx;读端口C的值
;当按下开关SW3时,PC2口为低电平test al,04h;检测PC2口状态
jnz case
lp: in al,dx
test al,04h
jz lp ;循环检测直至放开
xor flag,01h;将状态值取反
case: cmp flag,01h;进行状态值比较
jne stop
begin: call ledflash ;调用灯光变幻过程
call delay2
jmp wait
;灯LED全灭
stop: mov dx,300h;取8255的端口A的地址
mov al,00h;使8255的PA0-PA7全为0
out dx,al;使所有的灯LED全灭
jmp wait
quit: ;灯LED全灭
mov dx,300h;取8255的端口A的地址
mov al,00h;使8255的PA0-PA7全为0
out dx,al;使所有的灯LED全灭
;返回DOS
mov ah,4ch;DOS功能调用
int21h;返回DOS
m endp
delay2 proc
push cx
push bx
mov cx,02ffh
dl4: mov bx,0ffffh
dl3: dec bx
jnz dl3
dec cx
jnz dl4
pop bx
pop cx
ret
delay2 endp
;检测数码开关DIP的状态,以便产生八种不同的灯光变幻
ledflash proc
mov dx,301h;取8255的端口B的地址
in al,dx;读端口B的值
cmp al,0feh;检测PB0口是否为0
jne choice1
mov si,offset data1 ;置第一种灯光变幻组合
jmp here
choice1: cmp al,0fdh;检测PB1口是否为0 jne choice2
mov si,offset data2 ;置第二种灯光变幻组合
jmp here
choice2: cmp al,0fbh;检测PB2口是否为0 jne choice3
mov si,offset data3 ;置第三种灯光变幻组合
jmp here
choice3: cmp al,0f7h;检测PB3口是否为0 jne choice4
mov si,offset data4 ;置第四种灯光变幻组合
jmp here
choice4: cmp al,0efh;检测PB4口是否为0 jne choice5
mov si,offset data5 ;置第五种灯光变幻组合
jmp here
choice5: cmp al,0dfh;检测PB5口是否为0 jne choice6
mov si,offset data6 ;置第六种灯光变幻组合
jmp here
choice6: cmp al,0bfh;检测PB6口是否为0
jne choice7
mov si,offset data7 ;置第七种灯光变幻组合
jmp here
choice7: cmp al,7fh;检测PB7口是否为0
jne choice0
mov si,offset data8 ;置第八种灯光变幻组合
jmp here
;choice0: call m0 ;调用声光变幻过程
choice0: jmp wait
;送加电数据
here: add si,num mov al,[si] ;取当前加电数据
mov dx,300h;取8255的端口A的地址
out dx,al;输出加电数据到端口A
inc num ;改变数字变量的值
cmp num,08h
jne next
mov num,00h
next: ret
ledflash endp
cseg ends
end start
⑹实验要求
◇按要求完成实验得出正确结果.
◇试着自己写出人机对话方式的汇编程序.
◇完成实验报告
第二节定时/计数实验(8253芯片实验)
实验二音乐发生器接口实验
⑴实验目的
通过音乐发生器实验,学习如何利用8253定时/计数器进行声音控制电路的设计原理与方法。
⑵实验内容
基本实验通过编程使音乐发生器奏出音乐.
⑶实验要求
利用MFID实验平台和音乐发生器模块进行硬件连接,利用MF2KI集成开发环境进行音乐发生器控制程序设计,调试,直至听到正常的乐曲。
⑷实验预备知识
可编程定时器/计数器8253是一种在微机系统中实现定时和计数功能的LSI外围接口电路。
它的内部有3个独立的16位定时器/计数器。
每个计数器都有6种工作方式(方式0~方式5),由8253的控制字来控制。
在写入控制字及计数初值后8253才能正常工作。
由于计数过程中门控信号GATE的电平变化、计数初值的重新设置都会对实际计数造成影响,因此最终的OUT波形可能各种各样,实现的控制关系各不相同。
为了更好地完成本次实验,要求实验者必须对8253的工作原理,8253控制寄存器的格式及作用,8253的6种工作方式的各自特点,8253控制字的读回命令与锁存命令的区别等有清楚的认识。
实验过程中,门控信号GATE的电平高低变化可通过电平开关来控制。
时钟脉冲CLK的发出可通过单脉冲发生器来实现。
OUT的电平变化可用逻辑笔来观察。
OUT的波形可通过其电平变化与时钟脉冲CLK的个数关系画出。
⑸实验原理
音乐发生器驱动模块电路原理如图2.2.1所示。
模块包含喇叭SPK,LM386A,74LS08,以及74LS245和LED等。
其中LED是配合演奏音乐时产生发光效果而设置的。
图2.2.1 音乐发生器模块板电路原理框图
2.利用8253控制发声原理与方法的详细阐述,参考计算机接口技术相关参考书. ⑹ 实验资源配置
1.电源:机内供电,将平台的电源开关拔到“内”的位置上,并将模块电源JP3接通 2.电缆线:采用单线/20芯扁平线
3.本实验所用到资源:J (8253),I (8255)R (音乐发生器)模块电源四个模块 4.I/O 端口地址:8255的4个端口地址为300H ~303H 。
其中A 口=300H ,B 口=301H ,C 口=302H ,命令口=303H 。
8253的四个端口地址为304H ~307H 。
其中通道0为304H,通道1为305H,通道2为306H,命令口为307H
5.软件资源:MF2KI 集成开发环境软件提供了丰富的汇编语言和C/C++语言程序开发工具
⑺ 实验步骤 步骤一:硬件连线
跳线设置:将电源模块的JP7跳接. 单线连接如右图:
步骤二:将平台的电源开关拔到“内”的位置上。
在配套集成环境下进行硬件检测,达
到初始化芯片的目的
步骤三:(示实验步骤)打开集成环境在“演示实验”菜单下点开“基本接口实验”。
在
“基本接口实验”中的“定时记数器实验”中选择“音乐发生器”实验进行演示。
20 芯 定 时 器 / 并 行 口 插 座
50 芯 扩 展 总 线
步骤四:(学生实验步骤)打开集成环境在“文件”菜单下学生可以选择新建自己的C++/ASM文件或者集成环境自带的C++/ASM参考程序进行调试、运行。
步骤五:观看实验现象得出结论。
⑻软件编程
◇流程图如下图所示包括一个主程序和一个延时子程序
◇参考程序如下
;*------------------------------------------------------*/
;* Music.asm(音乐发生器接口实验) */
;* 音乐发生器程序Source File */
;* Copyright (c) 2005 by HUST */
;*------------------------------------------------------*/
sstack segment stack
dw200dup(?)
sstack ends
data segment
bg db 'Two tigers ...'
db0ah,0dh
db 'press any key to stop! ',0ah,0dh,'$'
freq dw2dup(262,294,330,262) ;"两只老虎"乐曲中,音符的频率(音阶)dw2dup(330,349,392) ;其中,0频率表示结尾
dw2dup(392,440,392,349,330,262)
dw2dup(294,196,262),0
time dw10dup(8),16,8,8,16; "两只老虎"乐曲中,音符的延时(节拍)dw2dup(4,4,4,4,8,8) ;其中4,8,16表示延时的次数
dw2dup(8,8,16)
old_seg dw ?
old_off dw ?
data ends
code segment
assume cs:code, ds:data, ss:sstack
star proc far ;程序开始
mov ax,data
mov ds,ax
mov ax,sstack
mov ss,ax
push di ;寄存器压栈
push si
push bp
push bx
mov al,90h;8255初始化
mov dx,303h
out dx,al
mov al,0ch;关闭8253的T2计数器(8255的PC6=0)
mov dx,303h
out dx,al
mov al,00h;关闭喇叭(8255的PC0=0)
mov dx,303h
out dx,al
mov al,0b6h;8253初始化
mov dx,307h
out dx,al
mov dx,offset bg ;显示提示信息
mov ah,9
int21h
mov si,offset freq ;设置频率指针→si
mov bp,offset time ;设置延时指针→bp
pp: mov ah, 0bh;检测是否有任意键按下?
int21h
cmp al,00
jne end_sing ;若有,则结束演凑
mov di,[si] ;取1个音符的频率→di
cmp di,0;检测是否是乐曲结尾
je end_sing ;若是,则结束演凑
mov dx,12h;计算音符的频率所对应的8253计数初值
mov ax,34dch;1.19318MHz
div di
mov dx,306h;向8253装入计数初值
out dx,al;先装低字节
mov al,ah
out dx,al;再装高字节
mov dx,303h;打开喇叭(8255的PC0=1)
mov al,01h
out dx,al
mov al,0dh;打开8253的T2(PC6=1),开始发声
out dx,al
mov bx,ds:[bp] ;取1个音符的延时次数→bx
call time_delay ;调用延时子程
mov dx,303h;关闭8253的T2(PC6=0)
mov al,0ch
out dx,al
mov al,00h;关闭喇叭(PC0=0)
out dx,al
add si,2;取下1 个音符的频率
add bp,2;取下1 个音符的延时次数
jmp pp ;继续
end_sing:
mov dx, 303h;关闭8253的T2
mov al, 0ch
out dx, al
mov al, 00h;关闭喇叭
out dx, al
pop bx;寄存器出栈
pop bp
pop si
pop di
mov ax,4c00h;返回DOS
int21h
star endp
new_intr proc;新中断服务程序
dec bx;该服务程序只将延时次数-1
iret
new_intr endp
time_delay proc near ;延时子程序
pushf;压栈
push ds
push es
push bx
mov ah,35h;取原中断(INT1CH)的向量,并保存
mov al,1ch
int21h
mov old_off, bx
mov bx, es
mov old_seg, bx
pop bx
pop es
push ds
mov ah, 25h;设置新中断服务程序的向量
mov al, 1ch
mov dx, seg new_intr
mov ds,dx
lea dx, new_intr
int21h
pop ds
TD: cmp bx,0h;延时次数已到?
jnz TD ;未到,则继续
mov ah,25h;已到,则恢复原中断向量mov al,1ch
mov dx,old_seg
push dx
mov dx,old_off
pop ds
int21h
pop ds
popf
;time delay end
ret
time_delay endp
code ends
end star ;程序结束
⑼实验要求
◇按要求完成实验得出正确结果.
◇试着自己写出人机对话方式的汇编程序.
◇完成实验报告
第三节 串行通信接口实验(8251芯片实验)
串行通信接口是面向接口标准,而不是直接面向具体设备的的一种接口,这一特点和并行打印机接口类似。
因此,串行接口实验的内容不是以接口所连接的外设来考虑,而是以不同串行接口标准、通信方式、数据格式、传输速率、传输距离和传输方向等要求为内容来设计实验项目的。
为此,串行接口设计了两个基本实验和若干个选作实验。
串行通信接口电路原理如图2.3.1所示。
所有使用串行接口的外设(包括微机)都共用MFID 平台板上的这一硬件资源进行串行通信。
图2.3.1 串行通信接口电路原理框图
50
芯
扩
展
总
线 三总线
12 分
频
实验三 RS-232标准全双工查询方式异步串行通信实验
⑴实验目的
学习RS-232C标准的串行通信接口电路及串行通信收/发程序的设计原理与方法。
⑵实验内容
甲乙两台微机之间,按RS-232C标准协议,进行零MODEM方式,全双工串行通信。
所谓全双工是双方通过各自的键盘按键发送,同时接收对方发来的字符。
发送与接收的字符均在屏幕上显示。
通信数格式为起止式:1位停止位,7位数据位,无校验,波特率因子为16。
波特率为1200bps。
按ESC键,退出。
⑶实验要求
采用两台MFID平台板上的串行接口电路进行硬件连接,分别编写甲乙两机各自的发送与接收程序,并进行调试,直至程序正常运行。
⑷实验预备知识
8251是一个可编程异步通信单元芯片,在微机系统中起串行数据的I/O接口作用。
此外,它还包含有可编程序波特率发生器,它可用1~65535的因子对输入时钟进行分频,以产生波特率16倍的用于进行8251传送或接收串行数据时所使用的时钟信号的频率。
8251片内有10个寄存器,其中两个波特率因子寄存器(也称为除数锁存器)和其他寄存器共用地址,在寻址除数所存器时设置了特征位,使线路控制寄存器的最高位,即除数所存器访问位
DLAB的值为1。
此时,执行的I/O指令将访问除数锁存器(DLL和DLH)。
当DLAB为0时,寻址波特率因子寄存器以外的寄存器。
从功能上分,8251的10个寄存器可分为以下两组。
一组用于工作方式、通信参数的控制和设置,在8251初始化时用OUT指令设置。
这包括:除数锁存器(DLL和DLH)、线路控制寄存器、Modem控制寄存器和中断允许寄存器。
另一组用于实现通信传输,由接收缓冲器和发送保持寄存器、线路状态寄存器、Modem状态寄存器、中断识别寄存器等组成。
在数据传送的查询传送方式下,PC机通过读取线路状态寄存器的相应位的内容来决定是从8251输入字符还是向8251输出字符。
如要从8251输入字符,则先测试线路状态寄存器的第0位是否为1,若为1,表明数据已准备就绪,应尽快读走。
当向8251输出字符时,则先测试线路状态寄存器的第5位,若为1,则表明可以发送数据了。
8251除了用查询传送方式通信外,还可用中断方式。
因PC机中8251的中断输出收OUT2信号控制,所以要先对Modem控制寄存器的OUT2位置“1”, 使8251可工作在中断方式下。
这样,8251的中断请求信号通过系统总线作为8259的IRQ4端输入。
8251芯片可以处理4种类型的中断。
中断允许寄存器的低4位分别对应这4种中断源。
由于同时可能有多
个中断圆满足条件,所以还要通过中断标识寄存器按优先级的高低来处理各个中断。
本实验是一个对8251各种功能进行测试的较齐全的实验,有一定的复杂度。
实验者必须对串行接口的异步通信方式、可编程异步串行接口8251的工作原理、8251内部寄存器、8251初始化、数据传送的查询传送方式、8251收发通信、8251的各种中断功能的实现等内容有正确的理解。
⑸实验原理
1.RS-232标准串行通信接口电路原理如图2.3.1所示。
接口电路以8251为核心,8253提供发/收时钟,8255控制8253的Gate门。
另外,还有MAX232作电平转换,MAX491作RS-232与RS-485的转换、用RxRDY作中断申请开关等。
因此,该接口电路可实现两种接口标准和查询/中断两种方式的串行通信
2.RS-232C标准串行通信接口电路设计原理和方法的详细阐述,参考计算机接口技术相关参考书.
⑹实验资源配置
1.电源:机内供电,将平台的电源开关拔到“内”的位置上.
2.电缆线:采用单线,3芯屏蔽电缆.
3.本系统所涉及资源:E(8253),F(8255),G(8251)K(用户时钟) L(模块电源)
4.I/O端口地址:8255的4个端口地址为300H~303H。
其中A口=300H,B口=301H,C 口=302H,命令口=303H。
8253的四个端口地址为304H~307H。
其中通道0为304H,通道1为305H,通道2为306H,命令口为307H。
8251的两个端口为:308H~309H,其中,308H为8251数据口,309H为命令/状态口.
5.软件资源:MF2KI集成开发环境软件提供了丰富的汇编语言和C/C++语言程序开发工具.
⑺实验步骤
步骤一:硬件连线
跳线设置:
起来。
步骤二:将平台的电源开关拔到“内”的位置上。
在配套集成环境下进行硬件检测,达到初始化芯片的目的。
步骤三:(演示实验步骤)打开集成环境在“演示实验”菜单下点开“基本接口实验”。
在“基本接口实验”中的“串行接口实验”中选择“全双工串行通信(传送字
符)”实验进行演示。
步骤四:(学生实验步骤)打开集成环境在“文件”菜单下学生可以选择新建自己的C++/ASM文件或者集成环境自带的C++/ASM参考程序进行调试、运行。
步骤五:观看实验现象得出结论。
⑻软件编程
◇流程图如图所示,包括两个子程序(a,b)和一个主程序的流程图。
◇参考程序如下所示
;*------------------------------------------------------*/
;* AskFull.asm(查询方式全双工串行通信接口实验) */
;* 查询方式全双工串行通信程序 Source File */
;* Copyright (c) 2005 by HUST */
;*------------------------------------------------------*/
data51 equ308h;8251A数据口
ctr151 equ309h;8251A命令/状态口
ctr155 equ303h;8255命令口
timer2 equ306h;8253的2号计数器端口
timctl equ307h;8253命令口
;clk00 equ 12h ;8251输入时钟频率(十六进制表示)MFID-4中使用;clk01 equ 34deh
clk00 equ1dh;8251输入时钟频率(十六进制表示)MFID-5中使用clk01 equ4b54h
factor equ16;波特率因子16
data segment
bps00 dw (?)
mes1 db 'now enter the serial communication',0ah,0dh
db 'end with esc',0ah,0dh,'$'
input_message db '0:1101:1502:3003:600'
db0dh,0ah
db '4:12005:24006:48007:9600'
db0dh,0ah
db 'please take a choice(0~7)of baud_rate:'
db0dh,0ah,'$'
error_message db 'input error! try again'
db0dh,0ah,'$'
data ends
code segment
assume cs:code, ds:data
int51 proc near ;8251A初始化子程
mov dx,ctr151 ;8251A命令口
xor ax,ax;空操作
call charout ;送数子程
ll:loop ll
mov al,40h;内部复位
call charout
mov al,4ah;8251A方式命令
call charout
mov al,27h;8251A工作命令
call charout
ret
int51 endp
charout proc near
out dx,al;送数子程
push cx
mov cx,100;延时
gg: loop gg
pop cx
ret;返回
charout endp
set_bps proc near ;8253-5计数初值计算与装入子程mov dx,clk00 ;取8253-5输入时钟频率clk作被除数
mov ax,clk01。