微机课设01之欧阳美创编.docx
《微机课设01之欧阳美创编.docx》由会员分享,可在线阅读,更多相关《微机课设01之欧阳美创编.docx(25页珍藏版)》请在冰豆网上搜索。
微机课设01之欧阳美创编
作者:
董秋成FFF这是下半学期微机原理课程设计的资料,希望12级电气及13级自动化可以参考一下,早做准备。
时间:
2021.01.01
创作:
欧阳美
实验形式与考核:
实验分为基础型实验(必做,30%)、综合型实验(必做,60%)与创新型实验(选做,10%)。
两人一组
进度安排:
共8周,第一周讲课;第二周每组自行设计;以后老师会将本次参加实习的所有学生分为三部分(我们是按12班,34班和56班),每部分进行1~2周的实验,要求是只要在没有课的时候都需去实验室实验,要按照上下课的时间进出实验室并签到;第八周为实验报告的撰写,但最后交报告的时间会向后拖延2~3周。
实验报告要求:
要求包括基本设计思路,硬件连接,软件框图和程序代码,基础与综合题除代码可打印之外必须手写,创新题需单独写成报告。
以下是我们这次的基础题和综合题,每年的题目都几乎相同,改动的地方很少。
其中,综合型题目选题要求是12班从15题中选,34班从610题中选,56班从1115题中选。
在实验前便把每组选好的题目报给老师。
基础型题目:
8253、8255及8259与8086系统的连接如图所示,8255的A口接按键,B口接数码管,图为微机原理书上习题8.11的图
要求实现以下功能:
1.按键为00~0FH时显示低四位数字,大于0FH以后交替显示“H”和高四位数字;
2.显示高四位数字和“H”时,使其每隔1秒切换显示内容;
(以上两题为1、2班必选)
3.按键为00~0FH时显示低四位数字,并且循环显示0~N(N=1~F,为当前数字),每隔1秒切换一个数字;
4.按键数字大于0FH时,显示“H”,并使其亮1秒,灭1秒;
(以上两题为3、4班必选)
5.按键为00~0FH时显示低四位数字,大于0FH以后显示“H”;
6.显示“H”时,使其亮1.5秒,灭0.5秒。
(以上两题为5、6班必选)
综合型题目(任选2题):
1.通过实验台上PS2接口连接键盘,要求:
1)输入字符(0~F),转换成十进制后用数码管(1、2)显示(00~15);
2)用实验台上的数码管(3、4)显示输入的次数,计数范围0~99。
2.将实验台上的直流可调信号(范围0~5V)输出端与A/D转换器的IN0连接,
要求:
1)将该直流信号进行A/D转换(ADC0809,端口地址298H~29FH)输入到计算机中,采样频率0.5Hz;
2)通过实验台上的D/A转换器(DAC0832,端口地址290H~297H)输出一个与之对应的模拟电压量(范围0~5V)。
3.通过实验箱的麦克、喇叭与定时器实现数字录音机的功能,要求:
1)用ADC0809以10kHz的频率采集IN2输入的语音数据并存入内存,共采集50000个数据(录音);
2)然后使用8253控制喇叭发声(放音)。
4.利用8253、8255和中断系统实现以下功能:
1)使数码管实现秒表功能,显示数字00.00~10.00,每隔0.01秒数字变化一次;
2)读入8个开关的状态值,将这两位数字以16进制(范围00H~FFH)在8x8LED点阵模块上显示。
5.利用液晶模块显示以下文字,并实现横向和纵向的滚动:
天津大学自动化学院
6.用8253和8255记录实验台上脉冲按键的脉冲宽度,要求:
1)将脉冲宽度在实验台的液晶屏上显示(带小数点和单位);
2)在液晶屏上显示按键次数(显示方式—“按键次数:
***”)。
7.通过实验箱上的可调电压旋钮控制步进电机转速,要求:
1)根据可调电压的输出值,对应电机转速由0~100r/min,转速与电压复制成线性关系,可调电压的采样频率为0.5Hz;
2)将电机转速在数码管或液晶屏上显示输出。
8.通过实验台上PS2接口连接键盘,要求:
1)输入字符,并在实验箱的8x8LED点阵显示该字符;
2)用两种颜色各显示一次,并以周期0.5秒闪烁。
9.将实验台上的直流可调信号(范围0~5V)输出端与A/D转换器的IN0连接,要求:
1)将该直流信号进行A/D转换(ADC0809,端口地址298H~29FH)输入到计算机中,采样频率1Hz;
2)在PC机屏幕或实验台液晶屏上显示该信号的电压值(小数点后两位)。
10.通过PC机的键盘输入一串字符(以“$”作为结束符),并在实验台的液晶屏上显示显示输出,要求:
1)可显示基本的ASCII码(字母、数字、标点等);
2)在液晶屏上动态显示输入内容(包含空格、换行、回车等格式)。
11.利用定时器8253和外扩展的键盘—显示模块,实现时钟显示及时间设置功能:
1)时钟显示内容为“分:
秒”,即“MM.SS”;
2)P键用来启动时钟设置,通过键盘上的数字修改时间,参数在修改过程中处于闪烁状态,闪烁频率2Hz。
12.在实验台的液晶屏上以如下方式显示时钟:
1)动态显示“分:
秒”;
2)显示界面如下:
18:
35
13.将实验台上的直流可调信号(范围0~5V)输出端与A/D转换器的IN0连接,要求:
1)将该直流信号进行A/D转换(ADC0809,端口地址298H~29FH)输入到计算机中,采样频率1Hz;
2)在外扩展的LCD模块上显示该信号的电压值(精确到小数点后2位)。
14.通过PC机键盘控制步进电机转角,要求:
1)从键盘输入数字0~360,对应电机转角由0~360°,转角与数字大小成线性关系,输入数字的采样频率为5Hz;
2)将转角在液晶屏上显示。
15.通过实验台上PS2接口连接鼠标,要求:
1)在实验箱的液晶屏上显示小箭头,并根据鼠标的移动改变箭头的位置
2)刷新频率10Hz,并且使箭头限定在屏幕范围以内。
华丽丽的分割线【明明不华丽】
以上都是官方资料,下面说一下我自己感受的实验技巧
如果你是一个勤奋求学的少年,那么你大可在看完本篇日志后便开始着手设计与编程。
如果你跟我一样是个重度拖延症患者,那你大可不必担心,在到你们进实验室之前都可高枕无忧,在实验过程中解决即可。
现在说一下详细的实验过程:
到实验室的第一次,老师会分配给你一个实验台,在整个实验过程中你们组就用这块实验台,除非有特殊情况,否则不能随意更换【微机实验老师的脾气你们都懂(和善的眼神)】。
在实验台边坐定之后,就可以打开电脑和开发板了,老师尤其强调的是不能带电接线,如果被看到的话你又死定了(和善的眼神)
首先要说的是基础题不需要使用8259,直接把8253产生的脉冲接到8086上的INTR端即可。
有一个小工作是最好在去实验室前就做好的,就是检查一下需要用到的资源是否能正常工作,比如在基础实验中,最好写两个简单的小程序检查一下8253与8255是否工作正常【不正常的可能性非常大】,如果不正常的话就要协调老师解决了,不免又要跟老师费一番口舌(和善的眼神)
当各个芯片检查无误,能够正常工作后,就可以调试程序了。
拿出自己写的或者从别人那里拷来的程序,一点点调试运行成功,出现正确的现象之后,就可以招呼老师过来检查了。
老师会问你几个问题,或者让你加个功能,按她的要求做即可,所以,即使是从别人那里拷来的程序,也起码要做到看懂的水平……老师尤其爱问的是在入中断或出中断附近设置断点,单步运行,指出数码管显示的数字和8086内部的数据是如何传输的之类的问题。
基础型实验建议有所准备的同学在3小时内做完。
然后是综合型,选两个看(you)起(xian)来(cheng)简(cheng)单(xu)的题目,需要用到的液晶屏、双色led灯等资源的资料可以在上学期微机原理课的实验指导书中找到。
然后也是先检查资源是否能正常工作,然后调试程序即可。
需要提示的两点是,最好不要所有人一下同时做出同一个实验,否则太明显……如果自己写的程序实在无法正确运行且找不出毛病,还是乖乖拿来别人试好的程序先通过检查再说,否则夜长梦多【?
】,会把做其他实验的时间用完。
还是提醒一下千万不要冲撞老师……
创新型实验,XX即可,也可以自己想,建议别做电子琴,因为一XX全是电子琴,也会有好多人做电子琴,老师都吐槽了……
然后大概就没什么可说的了,课设这种东西嘛,想真正学到东西的同学可以好好做,真的能学到很多。
如果只是想水过去也不是什么难事。
以上。
以下(23333)是我当时的一些程序,希望能对大家有所帮助
8253测试程序:
DATASEGMENT
DATAENDS
STACKSEGMENT
STADW100DUP(?
)
TOPEQULENGTHSTA
STACKENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA,SS:
STACK,ES:
DATA
START:
MOVAX,DATA
MOVDS,AX
MOVES,AX
MOVAX,STACK
MOVSS,AX
MOVSP,TOP
MOVDX,0283H
MOVAL,36H
OUTDX,AL
MOVDX,0280H
MOVAX,03E8H
OUTDX,AL
MOVAL,AH
OUTDX,AL
MOVDX,0283H
MOVAL,76H
OUTDX,AL
MOVDX,0281H
MOVAX,03E8H
OUTDX,AL
MOVAL,AH
OUTDX,AL
MOVAH,4CH
INT21H
CODEENDS
ENDSTART
8255测试程序:
datasegment
dataends
codesegment
start:
assumeds:
data,cs:
code
movdx,029bh
moval,90h
outdx,al
again:
movdx,0298h
inal,dx
movdx,0299h
outdx,al
jmpagain
codeends
endstart
必做程序(对应日志中必做题的3,4)
;数据段定义
DATASEGMENT
TABLEDB3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,77H,7CH,39H,5EH,79H,71H;数码管段码
MESDB'PRESSANYKEYEXITTODOS',0DH,0AH,'$';提示信息
CS_REGDW?
;中断程序段基址
IP_REGDW?
;中断程序段偏移量
DATEENDS
;堆栈段定义
STACKSEGMENT
STADW100DUP(?
)
TOPEQULENGTHSTA
STACKENDS
;程序初始化
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA,SS:
STACK,ES:
DATA
START:
MOVAX,DATA
MOVDS,AX
MOVES,AX
MOVAX,STACK
MOVSS,AX
MOVSP,TOP
;显示提示信息
MOVDX,OFFSETMES
MOVAH,09H
INT21H
;初始化8255
MOVDX,0288H;控制端
MOVAL,90H;控制字
OUTDX,AL;写入
;初始化8253
MOVDX,0283H;控制端
MOVAL,36H;控制字
OUTDX,AL;写入
MOVDX,0280H;CLK1
MOVAX,03E8H;1000倍
OUTDX,AL;写入
MOVAL,AH
OUTDX,AL;再写入
MOVDX,0283H;控制端
MOVAL,76H;控制字
OUTDX,AL;写入
MOVDX,0281H;CLK2
MOVAX,03E8H;1000倍
OUTDX,AL;写入
MOVAL,AH
OUTDX,AL;再写入
;存储中断向量
CLI;关中断
MOVAX,350BH
INT21H
MOVAX,ES
MOVCS_REG,AX
MOVIP_REG,BX
PUSHDS
;设置新中断向量
MOVAX,SEGINTP
MOVDS,AX
MOVDX,OFFSETINTP
MOVAX,250BH
INT21H
POPDS
INAL,21H
ANDAL,0F7H
OUT21H,AL
LOP:
STI;开中断
JMPLOP;不停循环
;恢复原中断向量
INAL,21H
ORAL,08H
OUT21H,AL
MOVDX,IP_REG
MOVAX,CS_REG
MOVDS,AX
MOVAX,250BH
INT21H
LAST:
;返回DOS系统
MOVAH,4CH
INT21H
;中断子程序
INTPPROCFAR
MOVAH,01H
INT16H
JNZLAST
CLI;关中断
PUSHDX;保护寄存器
PUSHBX
PUSHAX
MOVBX,OFFSETTABLE;换码数据地址
MOVDX,0298H;取A口
INAL,DX
MOVDX,0299H;设定DX为B口
CMPAL,0FH;比较开关与0FH
JANEXT1;大于则跳
CMPAL,CL;比较开关与数码管(CL中存数码管的值)
JENEXT2;等于则跳
INCCL;数码管加一
MOVAL,CL
XLAT;查表
OUTDX,AL;输出到B口
JMPFINISH;结束
NEXT2:
;如果开关等于数码管
MOVCL,0;数码管置零
MOVAL,CL
XLAT;查表
OUTDX,AL;输出到B口
JMPFINISH;结束
NEXT1:
;如果开关大于0FH
INAL,DX;取数码管数据
CMPAL,00H;判断是否全灭
JENEXT3;是则跳
MOVCL,00H
MOVAL,CL;不是则置零
OUTDX,AL;输出到B口
JMPFINISH;结束
NEXT3:
;如果数码管全灭
MOVAL,76H;数码管置为H
OUTDX,AL;输出到B口
;结束
FINISH:
POPAX;恢复现场
POPBX
POPDX
MOVAL,20H
OUT20H,AL
STI;开中断
IRET
INTPENDP
CODEENDS
ENDSTART
综合题8
如果我没记错的话,这个程序是错的,当时没做出来,但是不知道哪里错了,所以就拿的别人的程序,大家注意一下〒_〒
;定义数据段
DATASEGMENT
;定义ASCII码从30H到7AH所有字符的形状
DATA30DB000H,07EH,0A1H,091H,089H,085H,07EH,000H
DATA31DB000H,000H,001H,0FFH,041H,000H,000H,000H
DATA32DB000H,061H,091H,089H,085H,083H,061H,000H
DATA33DB000H,066H,0A9H,091H,081H,081H,042H,000H
DATA34DB000H,005H,0FFH,045H,024H,014H,00CH,000H
DATA35DB000H,08EH,091H,091H,091H,091H,0F2H,000H
DATA36DB000H,04EH,091H,091H,091H,091H,07EH,000H
DATA37DB000H,0C0H,0A0H,098H,087H,080H,0C0H,000H
DATA38DB000H,06EH,091H,091H,091H,091H,06EH,000H
DATA39DB000H,07EH,089H,089H,089H,089H,072H,000H
DATA3ADB000H,000H,036H,036H,000H,000H,000H,000H
DATA3BDB000H,000H,036H,037H,001H,000H,000H,000H
DATA3CDB000H,000H,041H,022H,014H,008H,000H,000H
DATA3DDB000H,024H,024H,024H,024H,024H,024H,000H
DATA3EDB000H,000H,008H,014H,022H,041H,000H,000H
DATA3FDB000H,060H,090H,08DH,080H,080H,060H,000H
DATA40DB034H,04AH,085H,0BDH,0A5H,0BDH,042H,03CH
DATA41DB000H,03FH,048H,088H,088H,048H,03FH,000H
DATA42DB000H,06EH,091H,091H,091H,091H,0FFH,000H
DATA43DB000H,042H,081H,081H,081H,081H,07EH,000H
DATA44DB000H,03CH,042H,081H,081H,081H,0FFH,000H
DATA45DB000H,091H,091H,091H,091H,091H,0FFH,000H
DATA46DB000H,090H,090H,090H,090H,090H,0FFH,000H
DATA47DB000H,04EH,089H,089H,081H,081H,07EH,000H
DATA48DB000H,0FFH,010H,010H,010H,010H,0FFH,000H
DATA49DB000H,000H,081H,0FFH,081H,000H,000H,000H
DATA4ADB000H,080H,0FEH,081H,001H,002H,000H,000H
DATA4BDB000H,001H,082H,044H,028H,010H,0FFH,000H
DATA4CDB000H,003H,001H,001H,081H,0FFH,081H,000H
DATA4DDB0FFH,040H,020H,010H,020H,040H,0FFH,000H
DATA4EDB000H,0FFH,002H,00CH,030H,040H,0FFH,000H
DATA4FDB000H,07EH,081H,081H,081H,081H,07EH,000H
DATA50DB000H,070H,088H,088H,088H,088H,0FFH,000H
DATA51DB000H,07DH,082H,085H,081H,081H,07EH,000H
DATA52DB000H,071H,089H,08AH,08CH,088H,0FFH,000H
DATA53DB000H,046H,089H,089H,091H,091H,062H,000H
DATA54DB080H,080H,080H,0FFH,080H,080H,080H,000H
DATA55DB000H,0FEH,001H,001H,001H,001H,0FEH,000H
DATA56DB000H,0F8H,006H,001H,001H,006H,0F8H,000H
DATA57DB0FFH,002H,004H,008H,004H,002H,0FFH,000H
DATA58DB041H,022H,014H,008H,014H,022H,041H,000H
DATA59DB080H,040H,020H,01FH,020H,040H,080H,000H
DATA5ADB000H,0C1H,0A1H,091H,089H,085H,083H,000H
DATA5BDB000H,000H,000H,000H,000H,000H,000H,000H
DATA5CDB000H,000H,000H,000H,000H,000H,000H,000H
DATA5DDB000H,000H,000H,000H,000H,000H,000H,000H
DATA5EDB000H,000H,000H,000H,000H,000H,000H,000H
DATA5FDB000H,000H,000H,000H,000H,000H,000H,000H
DATA60DB000H,000H,000H,000H,000H,000H,000H,000H
DATA61DB000H,001H,07EH,091H,091H,091H,04EH,000H
DATA62DB000H,000H,00EH,011H,011H,009H,0FFH,000H
DATA63DB000H,012H,021H,021H,021H,01EH,000H,000H
DATA64DB000H,001H,0FEH,011H,011H,011H,00EH,000H
DATA65DB000H,012H,029H,029H,029H,029H,01EH,000H
DATA66DB000H,050H,090H,07FH,010H,010H,000H,000H
DATA67DB000H,07EH,091H,089H,089H,072H,000H,000H
DATA68DB000H,001H,00FH,010H,010H,008H,0FFH,000H
DATA69DB000H,000H,001H,05FH,011H,000H,000H,000H
DATA6ADB000H,000H,000H,0BFH,021H,002H,000H,000H
DATA6BDB000H,001H,011H,00AH,004H,0FFH,000H,000H
DATA6CDB000H,000H,001H,07FH,041H,000H,000H,000H
DATA6DDB000H,00FH,010H,01FH,010H,010H,00FH,000H
DATA6EDB000H,00FH,010H,010H,008H,01FH,000H,000H
DATA6FDB000H,00EH,011H,011H,011H,00EH,000H,000H
DATA70DB000H,030H,048H,048H,048H,03FH,041H,000H
DATA71DB000H,041H,03FH,049H,048H,04