微机原理课程设计.docx
- 文档编号:5908215
- 上传时间:2023-01-02
- 格式:DOCX
- 页数:22
- 大小:298.19KB
微机原理课程设计.docx
《微机原理课程设计.docx》由会员分享,可在线阅读,更多相关《微机原理课程设计.docx(22页珍藏版)》请在冰豆网上搜索。
微机原理课程设计
微机原理与接口技术实验报告
班级:
通信0702
姓名:
刘海帝
学号:
07211045
实验一:
可编程定时器/计数器(8253)
一、实验目的:
掌握8253的基本工作原理和编程方法
二、实验内容:
1.按下图虚线连接电路,将计数器0设置为方式0,计数初值为N(N<=0FH),用手动逐个输入单脉冲,编程使计数值在屏幕上显示,并同时用逻辑笔观察OUT0电平变化(当输入N+1个脉冲后OUT0变高电平)。
流程图为:
2、按下图连接电路,将计数器0、计数器1设置为方式3,计数初值为1000,用逻辑笔观察OUT1输出电平的变化(1Hz)。
流程图如下:
三、编程提示:
8253控制寄存器地址283H替换后:
C403H
计数器0地址280H替换后:
C400H
计数器1地址281H替换后:
C401H
CLK0连接时钟1MHz
四、实验程序:
1-1
STACK1SEGMENTSTACK
DW100HDUP(?
)
STACK1ENDS
CODESEGMENT
ASSUMECS:
CODE,SS:
STACK1
START:
MOVDX,C403H
MOVAL,00010000B;计数器0,只读写低字节,工作方式0,二进制计数
OUTDX,AL
MOVDX,C400H
MOVAL,6
OUTDX,AL;写初值
L0:
MOVDX,C400H
INAL,DX;读计数器计数值
ADDAL,30H;<9,加30H转换为ASCII码
MOVDL,AL
MOVAH,02H
INT21H;2号功能调用,显示
MOVDL,0DH
MOVAH,02H
INT21H
CMPAL,0;计数值为0时结束
JZL1
MOVAH,06H
MOVDL,0FFH
INT21H;判断有无键按下
JZL0;无键按下,继续计数,有键按下,结束
L1:
MOVAH,4CH
INT21H
CODEENDS
ENDSTART
1-2
CODESEGMENT
ASSUMECS:
CODE
START:
MOVDX,0C403H
MOVAL,00110110B;计数器0,依次读写低字节,高字节,方式3
OUTDX,AL
MOVDX,C400H
MOVAX,1000
OUTDX,AL;写计数值低字节
MOVAL,AH
OUTDX,AL;写计数值高字节
MOVDX,C403H
MOVAL,01110110B;计数器1,依次读写低字节,高字节,方式3
OUTDX,AL
MOVDX,C401H
MOVAX,1000
OUTDX,AL;写计数值低字节
MOVAL,AH
OUTDX,AL;写计数值高字节
MOVAH,4CH
INT21H
CODEENDS
ENDSTART
五、实验现象及分析
1.实验1中运行后,逻辑笔代表低电平的绿灯亮,当按下脉冲键后,屏幕上显示出计数值,依次为5,4,3,2,1,0.计数结束后,输出高电平,逻辑笔红灯亮。
2.实验2运行后逻辑笔交替输出高低电平,红灯和绿灯分别闪烁,周期为1Hz。
周期为1Hz的原因是输入的方波为1MHZ,经过计数器0以1000进行分频,计数器1以1000分频,正好为1HZ。
第一次编程,程序运行中遇到了一些意想不到的问题。
比如,忽略了字符串型常数,每个字符在机内以ASCII码存放;还有就是在运行后,屏幕上显示的是一连串的同一个字符,和同学讨论之后,引入一个2号功能调用:
MOVDL,0DH;回车的ASCII码为0DH
MOVAH,02H
INT21H
此题编程比较简单,原理易懂。
实验二:
交通灯控制实验
一、实验目的:
通过并行接口8255实现十字路口交通灯的模拟控制,进一步掌握对并行接口的使用。
二、实验内容:
如图,L7、L6、L5作为南北路口的交通灯与PC7、PC6、PC5相连,L2、L1、L0作为东西路口的交通灯与PC2、PC1、PC0相连。
编程使六个灯按交通灯变化规律燃灭。
三、编程提示:
8255控制寄存器端口地址:
28BH替换后:
C40BH
A口的地址:
288H替换后:
C408H
B口的地址:
28AH替换后:
C40AH
流程图:
四、实验程序
STACK1SEGMENTSTACK
DB200HDUP(?
)
STACK1ENDS
CODESEGMENT
ASSUMECS:
CODE,SS:
STACK1
START:
MOVDX,0C40BH;控制端口地址为0C40BH
MOVAL,10000000B;A,B,C三个端口设为方式0,输出
OUTDX,AL
L0:
MOVDX,0C40AH;C口地址为0C40AH
MOVAL,00100100B;南北路口绿灯亮,东西路口红灯亮
OUTDX,AL;写入C口
CALLDELAY1;调用延时子程序1
MOVCX,4;闪烁计数
L1:
MOVAL,01000100B;南北黄灯亮,东西红灯亮
OUTDX,AL
CALLDELAY2;调用延时程序2
MOVAL,00000100B;南北黄灯灭,东西红灯亮
OUTDX,AL
CALLDELAY2;调用延时子程序2
LOOPL1;计数值减一,不为0,转移到L1
MOVAL,10000001B;南北红灯亮,东西绿灯亮
OUTDX,AL
CALLDELAY1;调用延时子程序1
MOVCX,4
L2:
MOVAL,10000010B;南北红灯亮,东西黄灯亮
OUTDX,AL
CALLDELAY2;调用延时程序2
MOVAL,10000000B;南北红灯亮,东西黄灯灭
OUTDX,AL
CALLDELAY2;调用延时程序2
LOOPL2;计数值减一,不为0,跳至L2
MOVDL,0FFH
MOVAH,06H
INT21H
JZL0;无键按下,循环,按任意键结束
MOVAH,4CH;退出DOS系统
INT21H
DELAY1PROC;延时子程序1,长延时
PUSHCX
PUSHBX
PUSHAX
MOVCX,0FFFFH
T0:
MOVBX,0FFFFH
T1:
DECBX
MOVAX,0FFFFH
T2:
DECAX
JNZT2
JNZT1
LOOPT0;设置三层嵌套,每一层计数值均为0FFFFH,总计数值FFFF*FFFF*FFFF
POPBX
POPAX
POPCX
RET
DELAY1ENDP
DELAY2PROC
PUSHCX
PUSHAX
MOVCX,3000H
T3:
MOVAX,0FFFFH
T4:
DECAX
JNZT4
LOOPT3;二层嵌套,外层嵌套为3000H,内层嵌套为0FFFFH,总计数值为A000*FFFF
POPAX
POPCX
RET
DELAY2ENDP
CODEENDS
ENDSTART
五、实验现象及分析:
红黄绿灯变化规律如下:
南北路口的绿灯、东西路口的红灯同时亮3秒左右;
南北路口的黄灯闪烁若干次,同时东西路口的红灯继续亮;
南北路口的红灯、东西路口的绿灯同时亮3秒左右;
南北路口的红灯继续亮,同时东西路口的黄灯闪烁若干次;
依次重复。
最开始时延时过短,灯闪烁,而不是一直亮,增加了延时改进了效果,达到了实验的要求。
本题的原理较容易弄懂,最容易出现问题的是在延时中CX和AX中值得设定上,经过多次试验,最终找到了比较符合题目要求的数值。
此题较大的难点在于将实际观察到的现象转换为编程所需要的逻辑思路,也就是子延时的合理设定,将起到决定性的作用。
实验三:
竞赛抢答器
一、实验目的:
1.了解微机化竞赛抢答器的基本原理
2.进一步学习使用并行接口
二、实验内容:
图5-4为竞赛抢答器(模拟)的原理图,逻辑开关K0~K7代表竞赛抢答按钮0~7号,当某个逻辑电平开关置“1”时,相当某组抢答按钮按下。
在七段数码管上将其组号(0~7)显示出来,并使喇叭响一下。
从键盘上按空格键开始下一轮抢答,按其它键程序退出。
三、编程提示:
设置8255为C口输入、A口输出,读取C口数据,若为0表示无人抢答,若不为0则有人抢答。
根据读取数据可判断其组号。
从键盘上按空格键开始下一轮抢答,按其它键程序退出。
响铃的DOS功能调用:
MOVDL,7;响铃ASCII码为07
MOVAH,2
INT21H
流程图:
四、实验程序
DATASEGMENT
LISTDB3FH,06H,5BH,4FH,66H,6DH,7DH,07H;0-7的共阴极七段显示代码
PORT_AEQU0C408H;A口地址
PORT_CEQU0C40AH;C口地址
PORT_CTRLEQU0C40BH;控制寄存器地址
DATAENDS
STACK1SEGMENTSTACK
DB200HDUP(?
)
STACK1ENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA,SS:
STACK1
START:
MOVAX,DATA
MOVDS,AX
MOVAL,10001001B;A口B口方式0输出,C口输入
MOVDX,PORT_CTRL
OUTDX,AL
L1:
MOVBX,OFFSETLIST
MOVDX,PORT_C
INAL,DX
CMPAL,0
JZL1;;读C口开关状态,若全为0,再读
MOVCX,-1
L2:
SHRAL,1;右移一位,最高位补0
INCCX;计数器加一
CMPAL,0
JNZL2;循环至AL数据全为0,计数器记录第几个开关被按下
L3:
ANDCX,0FH;屏蔽计数器高位
ADDBX,CX;确定被按下的开关对应显示代码的偏移地址
MOVAL,[BX];将显示代码存入AL
MOVDX,PORT_A
OUTDX,AL;将显示代码写入A口输出
MOVDL,7
MOVAH,2
INT21H;响铃
JUST:
MOVAH,01H
INT21H
CMPAL,20H
JZOFF;键盘输入空格则转至OFF
JMPOVER
OFF:
MOVAL,00H
MOVDX,PORT_A
OUTDX,AL
JMPL1;AL清零,转至L1重新开始抢答
OVER:
MOVAH,4CH
INT21H
CODEENDS
ENDSTART
五、实验现象及分析:
程序调入后,运行调试,将对应着数字的按键置于高电平,则数码管显示相应的数字,并且计算机发出蜂鸣声。
将按键置于低电平后,按下空格键,开始新一轮抢答。
在编程时应该注意,使用SHR的时候,用该先移位后赋值,或者赋值后在移位的基础上减一,才能保证数码管显示与开关的号码对应,不然则会产生数码管显示数字比开关号码大一的状况。
实验四:
PC机串行通讯实验
一.实验目的:
1.进一步了解串行通信的基本原理。
2.掌握串行接口芯片8250的工作原理和编程方法。
3.熟悉PC机串行口的基本连接方法。
二、实验内容:
1.PC机RS-232串口自发自收。
按照PC机串口自发自收的连接方法连线。
编写PC机自发自收串行通信程序,要求:
从键盘输入一个字符,将字符通过串口发送出去,再由此串口将字符接收回来并在屏幕上显示。
两台PC机间RS-232串口通信。
2.按照两台PC机RS-232串口直接互连的方法连接两台PC机。
编写PC机直接互连串行通信程序;要求:
由甲机键盘键入字符经串口发送给乙机,再由乙机通过串口接收字符并显示在屏幕上。
当键入感叹号“!
”,结束收发过程。
三、实验程序:
1.自发自收
STACK1SEGMENTSTACK
DW100DUP(?
)
STACK1ENDS
CODESEGMENT
ASSUMECS:
CODE,SS:
STACK1
START:
MOVAL,80H
MOVDX,3FBH
OUTDX,AL;8250初始化,设DLAB=1
MOVAX,30H
MOVDX,3F8H
OUTDX,AL;写入除数低字节
MOVAL,AH
INCDX
OUTDX,AL;写入除数高字节
MOVAL,0AH;7位数据,1位停止,奇校验
MOVDX,3FBH
OUTDX,AL;写线路控制寄存器
MOVAL,10H;自检
MOVDX,3FCH
OUTDX,AL;写入Modem控制寄存器
MOVAL,0
MOVDX,3F9H
OUTDX,AL;写中断允许寄存器,屏蔽中断
WAIT_FOR:
MOVDX,3FDH;读取线路状态寄存器
INAL,DX
TESTAL,1EH;出错否
JNZERROR
TESTAL,01H;接收数据就绪否
JNZRECEIVE
TESTAL,20H;发送寄存器空否,不空,返回RECEIVE
JZWAIT_FOR
MOVAH,1
INT21H;读键盘
MOVDX,3F8H;发送
OUTDX,AL
JMPWAIT_FOR;返回等待
RECEIVE:
MOVDX,3F8H;读接收数据
INAL,DX
ANDAL,7FH;保留7位数据
CMPAL,21H;是’!
’?
JNZCHAR
MOVAX,4C00H;返回DOS
INT21H
CHAR:
PUSHAX
MOVDL,AL
MOVAH,2;显示接受字符
INT21H
POPAX
JMPWAIT_FOR;返回等待
ERROR:
MOVDX,3FDH;出错则清除线路状态寄存器
INAL,DX
MOVDL,'?
';显示‘?
’
MOVAH,02H
INT21H
JMPWAIT_FOR
CODEENDS
ENDSTART
2.双机串口通信
发:
STACK1SEGMENTSTACK
DW100DUP(?
)
STACK1ENDS
CODESEGMENT
ASSUMECS:
CODE,SS:
STACK1
START:
MOVAL,80H
MOVDX,3FBH
OUTDX,AL;设DLAB=1
MOVAX,30H
MOVDX,3F8H
OUTDX,AL;写入除数低字节
MOVAL,AH
INCDX
OUTDX,AL;写入除数高字节
MOVAL,0AH;7位数据,1位停止,奇校验
MOVDX,3FBH
OUTDX,AL;写线路控制寄存器
MOVAL,03H;RTS=1,DTR=1
MOVDX,3FCH
OUTDX,AL;写入Modem控制寄存器
MOVAL,0
MOVDX,3F9H
OUTDX,AL;写中断允许寄存器,屏蔽中断
JUS:
;MOVDX,3FEH;读modemn状态寄存器端口
;MOVBH,30H;检测CTS=1,DSR=1?
;ALLTESTSEATUS;调用状态检测子程序,有超时检测功能
;JNZERROR
;MOVDX,3FDH;读线路状态寄存器
;MOVBH,20H;检测发送寄存器空否
;CALLTESTSEATUS
;JNZERROR
MOVDX,3FDH;读线路状态寄存器
INAL,DX
TESTAL,20H;检测发送寄存器空否
JZJUS
MOVDX,3F8H;准备就绪,可以发送了
MOVAH,1;读键盘
INT21H
OUTDX,AL;发送
MOVDX,3F8H;检查键入是否为“!
”,是则发送结束
INAL,DX
CMPAL,21H;是’!
’?
JNZJUS
MOVAX,4C00H;返回DOS
INT21H
ERROR:
MOVDX,3FDH;出错则清除线路状态寄存器,CPU读取时自动清零
INAL,DX
MOVDL,'?
';显示‘?
’
MOVAH,02H
INT21H
JMPJUS
CODEENDS
ENDSTART
收:
STACK1SEGMENTSTACK
DW100DUP(?
)
STACK1ENDS
CODESEGMENT
ASSUMECS:
CODE,SS:
STACK1
START:
MOVAL,80H
MOVDX,3FBH
OUTDX,AL;设DLAB=1
MOVAX,30H
MOVDX,3F8H
OUTDX,AL;写入除数低字节
MOVAL,AH
INCDX
OUTDX,AL;写入除数高字节
MOVAL,0AH;7位数据,1位停止,奇校验
MOVDX,3FBH
OUTDX,AL;写线路控制寄存器
MOVAL,01H;DTR=1
MOVDX,3FCH
OUTDX,AL;写入Modem控制寄存器
MOVAL,0
MOVDX,3F9H
OUTDX,AL;写中断允许寄存器,屏蔽中断
JUS:
MOVDX,3FDH;检查接收是否出错
INAL,DX
TESTAL,00011110B
JNZERROR
;MOVBH,01H;接收数据是否就绪
;CALLTESTSEATUS
;JNZERROR
TESTAL,01H;接收数据是否就绪
JZJUS
MOVDX,3F8H;读取字符
INAL,DX
MOVDL,AL;显示接收字符
MOVAH,2
INT21H
CMPAL,21H;是否为‘!
’,是则接收结束
JNZJUS
MOVAH,4CH
INT21H
ERROR:
MOVDX,3FDH;出错则清除线路状态寄存器,CPU读取时自动清零
INAL,DX
MOVDL,'?
';显示‘?
’
MOVAH,02H
INT21H
JMPJUS
CODEENDS
ENDSTART
四、实验现象及分析
自发自收的实验中,从键盘敲个字符后,屏幕上会显示两个同样的敲进去的字符,实现了自发自收。
双机通信中一个键盘输入在另一个键盘上会显示出输出,完成了双机通信的要求。
本题没有连线,主要是编程,难点在于了解双机通信的原理,程序比较繁琐,编的很困难,书上有一道例题和本题很像,参考后编出程序。
实验总结
这是我们第一次将书本上所学的理论真正转化成为可以观测的,直观的现象。
对我们来说一切都是很新鲜,很陌生。
在运行第一个程序的时候有一些茫然无措,在和同学的讨论后最终完全懂得了原理。
在调试的时候,总会莫名其妙的出现很多预料之外的状况,这就需要耐心的检查,同时,一个好的实验箱对于实验能否成功是一个决定性的因素。
在经过第一个实验之后,我们就感到熟悉了许多,主要精力都可以放在了程序的编辑上。
编程是一个很注重细节的过程,往往每个人都会忽略一些要点,这时大家坐在一起进行讨论是个很有效的解决问题的方法,相当于对编程进行查缺补漏,还可以开阔自己的思路。
通过实验,更使我加深了对书本知识的理解,在编程和查找程序错误的原因的过程中,是很多知识在头脑中的印象更加深刻,真正做到了从理论到实践的过渡。
同时通过相互学习,也开阔了思路,学到了很多课本以外的知识,对于微机原理与接口技术这门课有了更深层的认识,巩固了课堂所学的知识,收获很多,帮助很大。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 微机 原理 课程设计