




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
位微机原理实验西工大第1页/共70页MASM使用简要说明
程序设计者完成在纸上的程序编写工作还无法确定程序是否正确,因此下一步就是要对程序进行测试和调试,使它能正确运行。为了方便和有效的进行调试常常借助一些软件开发工具。使用这些软件开发工具,对一个汇编语言程序的开发全过程如下图所示:程序正确?编辑程序宏汇编程序MASM调试程序DEBUG连接程序LINK源程序文件语法有错?可执行文件目标程序文件.ASM结束.OBJ.EXENYNY第2页/共70页进入方法开始/程序/附件/c:命令提示符C:>e:E:>cdmasm5E:>masm5>edit文件存储时一定要用.asm为扩展名E:>masm5>masmE:>masm5>link连接结束以后即可使用debug命令第3页/共70页DEBUG的使用方法进入与退出:出现提示符”-”直接输入DEBUG进入,退出则输入Q显示命令:显示内存单元内容---D命令显示寄存器内容---R命令显示源程序指令(反汇编)---U命令程序运行:连续运行方式---G命令跟踪运行方式---T命令◆◆◆第4页/共70页软件实验部分
本部分共进行6次实验,实验内容如下:
找“零”个数实验六6
数据区移动
实验五5
分支程序实验四4
排序程序实验三3
循环结构程序2BCD码的运算实验一1第5页/共70页实验一
BCD码的运算
一.实验目的
1.熟悉在MASM集成环境下建立、汇编、链接、调试和运行汇编语言程序的全过程。
2.掌握汇编语言程序结构中数据段、堆栈段、代码段定义及内存分配方法。
3.学会DEBUG调试程序主要命令的使用方法。
4.掌握用组合BCD码表示数据的方法,并熟悉其加、减、乘、除运算。二.实验内容
1.多位十进制数加法。
2.两位十进制数乘法。三.实验要求
1.多位十进制数加法:在内存中以DATA1和DATA2为首址,各分配5个字节单元,分别存入两个8位组合BCD码数据(低位在前),将两数相加,结果送回到DATA2处。
2.两位十进制数乘法:将被乘数和乘数以组合BCD码形式分别存放于DATA1和DATA2定义的节单元中,经乘法运算,乘积存入DATA3定义的两个内存单元中。
3.用DEBUG调试程序、查看运算结果,进行手工验证;并且用DEBUG修改数据,重新执行。第6页/共70页BCD码用4位二进制编码表示一个十进制数,又称二—十进制数,由于这四位二进制数的权值为8421,故也称BCD码为8421码。在计算机里,用一个字节的低四位表示一位十进制数—非组合BCD码;用一个字节表示两位十进制数—组合BCD。非组合BCD码uuuu1001例:计算机里79d非组合BCD码:uuuu0111uuuu1001组合BCD码01111001例:计算机里79d组合BCD码:01111001在计算机里,所有的运算都是按二进制进行的,运算结果是二进制数(即十六进制数)为了把十六进制运算结果转换成十进制,汇编语言中引进了组合BCD码加法调整指令DAA和减法调整指令DAS。DAA加法十进制调整指令ALAL中的十六进制数转为BCD形式该指令之前要执行ADD或ADC。调整方法:若AF=1,或AL中的低四位是十六进制的A~F,则AL内容加06h,AF置1;若CF为1,或AL中的高四位是十六进制的A~F,则AL内容加60h,CF置1第7页/共70页多位十进制数加法
.modelsmall.datadata1db11h,22h,33h,44h,00hdata2db99h,88h,77h,66h,00h.codestartupmovsi,offsetdata1;设指针
movdi,offsetdata2 clc ;清进位
movcx,5 ;设加法次数lop: moval,[si] ;取第一加数
adcal,[di] ;取第二加数
daa ;十进制调整
mov[di],al;结果存入指定单元
incsi ;指针加1incdi looplop ;循环
.exit
流程图:开始SIData1首址DIData2首址清进位设加法次数十进制调整;部分和回送指向下单元数AL第一加数ALAL+第二加数CX-1=0?结束YN第8页/共70页两位十进制数乘法.modelsmall.data data1db34h data2db56h data3dw1dup(?).code.startupmovbl,data1;第一乘数转换成16进制数
movbh,blandbh,0fhandbl,0f0hmovcL,4shrbl,cLmoval,10mulbladdal,bhmovzxcx,al;置加法次数计数器
movbl,data2; 第二乘数做BCD
加法,加第一乘数次
movax,0 clclop:addal,bl daa xchgah,al adcal,0 daa xchgah,al looplop movdata3,ax ;积送乘积存储单元
nop nop nop.exitend第9页/共70页两位十进制数乘法流程图:开始BL第一乘数BH第一乘数分离出第一乘数的“个位”分离出第一乘数的“十位”第一乘数的“十位”移到“个位”后,再乘10合成得到16进制的第一乘数CX16进制的第一乘数BCD码转换成16进制数11AX0清进位BL第二乘数第二乘数做加法次数十进制调整AL与AH内容交换ALAL+0+CFALAL+BLAL与AH内容交换十进制调整CX-1=0?NY存储结果结束第10页/共70页
一、实验目的
掌握循环结构程序的设计、调试。二、实验内容1.多字节无符号数加法。2.设计一软件延时器,并在屏幕上显示软件延时倒计时过程。三、实验要求1.多字节无符号加法:在DATAS中存放10个双字节无符号数,用循环结构设计程序,通过程序运算,把这10个双字节无符号数相加,其和存入紧邻加数之后的四个单元中。2.软件延时器:做一延时约1秒的软件延时器,在屏幕上按9、
8、…0顺序显示软件延时倒计时过程。
实验二循环结构程序第11页/共70页有关问题的说明循环程序的三个组成部分:⑴循环初始状态设置。设置循环次数、为循环体正常工作建立初始状态等。⑵循环体。循环工作的主体,包含循环的工作部分和修改部分。循环的工作部分是为完成程序功能而设计的程序段;循环的修改部分是为保证每一次重复时,参加执行的信息能发生有规律的变化而建立的程序段。⑶循环控制部分。选择一个循环控制条件来控制循环的运行和结束。循环程序的结构:循环初始状态循环控制条件循环体YN循环初始状态循环体循环控制条件YNDO-WHILE结构DO-UNTIL结构第12页/共70页子程序结构:
procedurenamePROCAttribute
RET
procedurenameENDP
Attribute…NEAR
调用程序和过程在同一个代码段中FAR
调用程序和过程不在同一个代码段中系统功能调用:系统功能调用是DOS为方便汇编语言编写而提供的一组约80个功能调用的常用子程序,它分为设备管理、文件管理和目录管理等几类。DOS规定用软中断指令INT21H进入各功能调用子程序的总入口,再为每个功能调用规定一个功能号,以便进入相应各自子程序的入口。系统功能调用的使用方法:指定的寄存器入口参数AH调用功能的功能号INT21H第13页/共70页EX1:从键盘输入单字符
MOVAH,01H;1号功能调用
INT21H将键盘输入字符的ASCII码送到AL。EX2:从键盘输入字符串
BUFDB10DUP(?)
LEADX,BUFMOVAH,0AH;0A号功能调用
INT21H将键盘输入的字符串写到RAM中去,击回车键表示字符串结束。字符数与予留空间的关系为:少补零多丢失。EX3:输出单字符
MOVDL,’M’MOVAH,02H;2号功能调用
INT21H将DL中字符从屏幕上显示出来。EX4:输出字符串
BUFDB‘Thankyou$’
MOVDX,OFFSETBUFMOVAH,09H;9号功能调用
INT21H将指定RAM缓冲区中的字符串从屏幕上显示出来。‘$’为字符串结束符。EX5:直接控制台输入/输出单字符
MOVDL,0FFH;DL=0FFH时,
MOVAH,06H;6号功能调用
INT21H;将键盘输入字符送到AL中。
MOVDL,’M’;DL≠0FFH时,
MOVAH,06H;6号功能调用
INT21H;将DL中字符送到屏幕上显示。…………第14页/共70页多字节无符号数加法
.MODELSMALL.586.DATADATASDW1111H,2222H,3333H,4444H,5555HDW6666H,7777H,8888H,9999H,0AAAAHRESULTDD1DUP(?).CODE.STARTUPMOVSI,OFFSETDATAS ;设指针
MOVCX,10 ;累加次数
MOVEAX,0 ;清累加器
CLC
;清进位LOP:MOVBX,[SI]
;取加数到BX
MOVZXEBX,BX ;将BX扩展成32位
ADCEAX,EBX ;带进位加
INCSI ;改指针
INCSI
LOOPLOP ;循环加
MOVRESULT,EAX ;存结果
.EXIT
END开始SIDATAS的首址CX累加次数EAX0清进位BXSI所指加数将BX扩展为32位EAXEAX+EBX+CFSI指向下一加数CX-1=0?NY存结果
结束第15页/共70页软件延时器.modelsmall.datadatadb20h,20h,20h,20h,20h,39h,0dh,'$'.code.startup movcx,09h ;设循环次数lop: movah,09h ;显示功能调用
leadx,data int21h callnearptrdelay ;调用延时子程序
decdata+5 ;修改显示数字
looplop .exitDelayprocnearusescx;延时子程序
movbx,06ffh ;设第二时常数Delay1:movcx,0h loop$ ;自身循环CX次
decbx ;第二时常数减1 jnzdelay1 ;不为零循环
retDelayendpend开始CX循环次数字符串显示功能调用延时子程序调用显示数字修改CX-1=0?NY结束主程序流程:延时子程序流程:延时子程序定义BX第二时常数CX第一时常数CX-1=0?NYBX-1BX=0?NY子程序返回子程序结束关键词第16页/共70页实验三
排序程序
一.实验目的
1.学习无符号数比较大小指令;
2.掌握多重循环编程方法;
3.掌握汇编语言编写排序程序的思路和方法。二.实验内容
1.单字节无符号数排序。
2.去极值滤波。三.实验要求
1.单字节无符号数排序:DATANUM单元开始存放双字节无符号数,表示要排序数据的个数,DATAS单元开始存放要排序的数据,数据个数至少10个,程序运行之后,这些数据按照由小到大的顺序仍然存放于DATAS单元开始的位置。
2.去极值滤波:某控制系统为了抗干扰,采用去极值滤波法处理采集数据,取连续6个A/D采样值(12位——双字节,低12位),要求去掉最大值和最小值,将余下4个数求平均值,用该平均值代表当前时刻系统状态的真值。试编一程序完成这个滤波过程。第17页/共70页单字节无符号数排序流程图:开始BL数据个数-1CXBL扩展数据指针SI置0累加器前数
前数与后数比较前数﹥后数前、后数交换数据指针SI指向下一数数据指针SI指向下一数YNBL-1CX-1=0?CX-1=0?NNYYZF=1?N结束Y第18页/共70页
.modelsmall.586.datadatanumdb10datasdb21h,13h,4h,5h,7hdb6h,8h,20h,9h,11h.code.startupmovbl,datanumdecbllop0:movzxcx,blmovsi,0lop:moval,datas[si]cmpal,datas[si+1]jajhincsilooplopjmpnext
jh:xchgal,datas[si+1]movdatas[si],alincsilooplopnext:decbljzfinishjmplop0finish:nop.exitend第19页/共70页去极值滤波开始调排序子程序对数据进行排序对排完序的数据掐头去尾求和求均值保存结果结束第20页/共70页.modelsmall.586.data datanumdb6 datas dw0123h,0abch,0234hdw0345h,0456h,0567h.code .startup callpx ;排序
movsi,offsetdatas+2;掐头去尾送指针
movcx,4 ;送累加次数
clc ;清进位
movax,0 ;取首数
qh: adcax,[si] ;累加
incsi incsi loopqh shrax,2;除4 mov[datas],ax;存结果到DATAS首位
.exitpx procnearmovbl,datanum ;取字长
decbllop0:movzxcx,bl ;送比较次数
movsi,0lop: movax,datas[si] ;送前数
cmpax,datas[si+2] ;与后数比较
jajh ;前大于后,转交换
incsi incsi ;指针加1looplop ;循环比较
jmpnext ;一轮排序完jh:xchgax,datas[si+2] ;交换
movdatas[si],axincsi incsilooplopnext:decbl ;修改比较次数
jzfinish jmplop0finish:nop ;结束
ret pxendpend第21页/共70页
实验四分支程序
一、实验目的掌握分支程序编程方法,复杂分支程序的查表法等。二、实验内容
1、
学生课程成绩分段统计。
2、
键盘及屏幕显示功能调用。三、实验要求
1、
学生课程成绩分段统计:用单字节表示每个学生的学号,学生的课程成绩用两位十进制数表示(最低0分,最高99分),规定0F0H表示作弊,0F1H表示缺考,0FFH为一组学生成绩的结束符。学生成绩在内存的存放形式为“学号,成绩”,每个学生占两个字节,从内存SCORE为首址开始存放。要求学生人数不少于10个,试编程序,按0~9、10~19、20~29、……、80~89、90~99及作弊、缺考等12种情况把学生的课程成绩进行分段统计,将统计结果存入以COUNT为首址的12个单元中。
2、试编一程序扫描键盘,当B键按下时,在屏幕上显示0~9循环计数;S键按下时停止计数;再按B键继续计数过程。E键按下时退出程序。
3、用DEBUG调试程序预置数据和查看程序运行结果,以验证程序正确性。
第22页/共70页学生课程成绩分段统计开始设置学号、成绩指针取学号取成绩是结束标志?取十分位,并将十分值扩展为16位送DI,对DI所指统计区段统计值加1是作弊?是缺考?修改指针CX-1=0?11CX统计上限作弊统计区段统计值加1缺考统计区段统计值加1结束YYYYNNNN第23页/共70页
.modelsmall.586.datascoredb1,10h,2,20h,3,30h,4,40h,5,50h,6,77h,7,70h db8,80h,9,90h,10h,08,11h,0f0h,12h,0f1h,0ffhcountdb12dup(?).code.startupmovcx,20 ;送统计上限
movsi,0 ;SCORE统计指针statistic:moval,score[si] ;取学号
cmpal,0ffh;判是否为结束
jesta_end ;转统计结束
movbl,score[si+1] ;取成绩
cmpbl,0f0h ;是否作弊
jefake ;是,转作弊处理
cmpbl,0f1h ;是否缺考
jemiss ;是,转缺考处理
shrbl,4 ;取十分位
movzxdi,bl;将十分值扩展为16位送DIinccount[di];相应区段统计值加1down:incsi;改指针
incsiloopstatistic ;循环sta_end:nop ;结束
.exitfake:movdi,10 ;作弊处理
inccount[di] jmpdown miss:movdi,11 ;缺考处理
inccount[di] jmpdown
end第24页/共70页键盘及屏幕显示功能调用开始显示提示信息置处理指针为“停止”调延时、键盘扫描程序有键动?转处理指针处B键?S键?E键?转处理指针处结束置处理指针为“计数”置处理指针为“停止”NYYYYNNN处理指针为“计数”处理指针为“停止”计数显示第25页/共70页延时、键盘扫描程序子程序定义BX第二时常数CX第一时常数CX-1=0?NYBX-1BX=0?NY子程序返回监测键动有键动?做键动标志BX=1NY第26页/共70页.modelsmall.dataMess1db'pressbbutton---count',0dh,0ahmess2db'presssbutton---stop',0dh,0ahMess3db'pressebutton---exit',0dh,0ah,'$'countdb20h,20h,20h,20h,20h,30h,0dh,'$'.code.startup movah,09h ;显示提示信息
movdx,offsetmess1 int21h movsi,stop ;设处理指针scan:callnearptrdelay;调延时、键扫程序
orbx,bx ;判有无键动
jnzscan1 ;有键动,转键处理
jmpsi ;无键动,转当前处理程序scan1:cmpal,'b‘;键处理程序
jeb_proc cmpal,'s' jes_proc cmpal,'e' jee_proc calldelay jmpsib_proc:movsi,count_ ;B键处理
jmpscans_proc:movsi,stop ;S键处理
jmpscane_proc:nop ;E键处理
nop.exitcount_:inccount+5 ;修改显示数字
moval,3ah ;比较超限
cmpal,count+5 jadown ;若不超限,调显示
movcount+5,30h ;超限,设启始值down:movah,09h ;显示功能调用
leadx,count int21h jmpscanstop:jmpscan nopDelayprocnearusescx ;延时子程序
movbx,380h ;设第二时常数delay1:movcx,0h loop$ ;自身循环CX次
movdl,0ffh ;监测键动
movah,06h int21h jnzkey_ret;若有键动,延时终止,转键处理
decbx ;第二时常数减1 jnzdelay1 ;不为零循环
jmpdelay_retkey_ret:movbx,1 ;做键动标志delay_ret:retDelay endpend第27页/共70页实验五数据区移动
一.实验目的
掌握RAM中的数据操作。二.实验内容
把4100H源RAM区首址内的16字节数据传送到4200H目标RAM区。三.实验步骤调试运行该程序,检查4100~410FH中内容是否与4200~420FH中内容完全一致。第28页/共70页实验六找“零”个数一.实验目的
熟悉汇编语言编程,掌握串操作指令的使用。二.实验内容
在4000H~400FH中查出有几个字节是零,把计数个数放在4100H中。第29页/共70页硬件实验部分本部分共进行3次实验,实验内容如下:1实验七
并行接口技术实验
2实验八8254定时/计数器实验3实验九
A/D转换实验
(下面根据实验台实物介绍实验台)第30页/共70页特别说明:为了方便实验,实验台设计时已将实验用相关器件的地址线、数据总线及除片选(CS)外的控制线连接到位,并在每一个实验电路附近予留有若干信号连线插孔(或插针排)。实验时只要将相应插孔用单股导线(或相应插针排用扁平电缆)对应相连即可组成完整的实验电路。在给出的实验电路图中,线路所带小圆圈即表示连线插孔。各芯片的片选(CS)可用单股导线连接,也可通过将8位铅笔开关的对应位置ON连接。硬件实验注意事项:
1.在实验台断电条件下,才能用单股导线(或扁平电缆)连接电路;
2.线路连接完成、检查确认没有错误后,再开通实验台电源;
3.用单股导线连接电路时,要将单股导线线头整直,并确认线头没有断裂;
4.实验完成后,关断实验台电源,再抓住导线(或扁平电缆)的根部,一根一根垂直拔掉连接导线(或扁平电缆),并把连接导线、电缆整好放入线盒。第31页/共70页实验七
并行接口技术实验
一.实验目的
1.掌握8255A并行接口的基本使用方法。
2.理解数码管扫描显示原理,学习数码管扫描显示方法。二.实验内容
1.用8255A作为并行接口,从8255A的一个端口输入开关量到CPU或内存,再将这一数据通过数据总线和8255A的另一个端口扫描输出到数码管。设8255A的A口为输入方式,接逻辑电平开关;8255A的B口为输出方式,通过MC1413驱动器接数码管的位选端;数码管的字划端通过74HC573与数据总线相连;逻辑电平开关K1~K6按1~6编号。试编一程序,用一位数码管指示出逻辑电平开关为“0”状态的开关编号,即当1号逻辑电平开关为“0”时,所选数码管显示“1”,2号逻辑电平开关为“0”时,数码管显示“2”,…,6号逻辑电平开关为“0”时,数码管显示“6”。
2.设8255A的B口为输出方式,通过MC1413驱动器接数码管的位选端;数码管的字划端通过74HC573与数据总线相连。试编一动态扫描程序,让6个数码管“同时”点亮,显示“1、2、3、4、5、6”。三.实验电路及设计
1.实验电路图第32页/共70页第33页/共70页第34页/共70页第35页/共70页2.实验连线(1)逻辑电平开关输出孔K1~K6对应连接到8255A的PA0~PA5;(2)8255A的PB0~PB5对应连接到数码管的位选端SM0~SM5;(3)数据总线D0、D1、D2、D3、D4、D5、D6、D7对应连接到数码管的字划端a、b、c、d、e、f、g、dp;(4)8255A的片选端CS8255连到译码控制单元的CS1(E200H);(5)74HC573的使能端SMGLT连到译码控制单元的SMGLT
(E220H)。3.8255A的端口地址
PA口:E200H,PB口:E201H,PC口:E202H,控制寄存器:E203H。4.数码管编码表
“0”-3FH“1”-06H“2”-5BH“3”-4FH
“4”-66H“5”-6DH“6”-7DH“7”-07H
“8”-7FH“9”-6FH“A”-77H“B”-7CH
“C”-39H“D”-3EH“E”-79H“F”-71H
第36页/共70页有关问题的说明数码管(共阴):ABCDEFGDPABCDEFGDP地K数字DPGFEDCBA字型码0001111113FH10000011006H2010110115BH……第37页/共70页多个数码管扫描显示:第38页/共70页多个数码管扫描显示:锁存器JM3、JM2、JM1谁为‘1’,谁连接的数码管就显示锁存器当前锁存的值所谓扫描显示是:对N个数码管:1.给锁存器送第1个数码管显示内容,而后第1个数码管公共端接低,延时2.给锁存器送第2个数码管显示内容,而后第2个数码管公共端接低,延时…N.给锁存器送第N个数码管显示内容,而后第N个数码管公共端接低,延时第N步后,再从1开始,周而复始。那么,JM3、JM2、JM1是互斥的了!第39页/共70页实验7.174HC573锁存器A口
K6K5K4K3K2K1开关ABCDEFGDP限流电阻DbusD7…D08255MC1413驱动器B口COMDbusD7…D0SMGLT
CS8255A口第40页/共70页开始初始化8255点亮一位数码管读键盘有E键?读开关量,并取反位扫描,确定‘开关’号取对应‘开关’号的字型码输出对应的数字结束YN第41页/共70页;CS8255-------CS1; SMGLT--------SMGLT ;k1...k6------PA0...PA5; SM0...SM5------PB0...PB5;D0...D7--------A.B....DP.modelsmall.586p8255equ0E200h ;片选地址
p_ctlequ90h ;8255控制字
s_l_aequ0E220h;573锁存地址.datatabledb3fh,06h,5bh,4fh,66h;0,1,2,3,4字型
db6dh,7dh,07h,7fh,6fh;5,6,7,8,9.code.startupmovdx,p8255+3 ;8255初始化
moval,p_ctloutdx,al
movdx,p8255+1;点亮数码管SM0mov
al,01h
outdx,al
lop:movah,06h;键入“e”结束执行
movdl,0ffh int21h
cmpal,'e' jescan_end
movdx,p8255 ;读开关
inal,dx notal movzxax,al bsfbx,ax;从ax低位起扫描,将第一个;为1的位号存BX xchgal,bl movbx,offsettable;读字型码
xlat;查表,[BX+AL]送AL movdx,s_l_a ;输出对应的数字
outdx,al jmplop ;循环扫描scan_end:.exitend第42页/共70页实验7.2限流电阻DbusD7…D08255MC1413驱动器B口COMDbusD7…D0SMGLTCS825574HC573锁存器COMCOMCOMCOMCOMABCDEFGDP第43页/共70页开始初始化8255查表取显示数字字型码显示字型码送锁存器(输出)取对应数码管字位、并输出CL+1(下一扫描位置)扫描位数≥6?调延时CL初始扫描位置ALCL(显示数字)CL初始扫描位置11读键盘有键动?结束NYYN延时程序流程见前第44页/共70页;CS8255-------CS1; SMGLT--------SMGLT ; SM0...SM5------PB0...PB5;D0...D7--------A.B....DP;
.modelsmallp8255equ0E200H
;片选地址
p_ctlequ10010000B
;8255控制字
s_l_aequ0E220H;573锁存地址
.data tabledb3FH,06H,5BH,4FH,66H;0,1,2,3,4
db6DH,7DH,07H,7FH,6FH;5,6,7,8,9.code.startupmovdx,p8255+3
;发控制字
moval,p_ctl outdx,al movcl,1
;设扫描位置lop: moval,cl
;取显示数字
movbx,offsettable
;读字型码
xlat movdx,s_l_a
;输出字型码
outdx,al
moval,10000000B rolal,cl
;左循环移位
movdx,p8255+1 outdx,al;送B口控制的数码管位
inccl cmpcl,6 jbedown ;若显示位置大于等于6,;返回启始位置1 movcl,1down:
calldelay movah,06 ;判有键动,跳出循环
movdl,0ffh int21h jnzscan_end jmplop ;循环扫描scan_end:nop .exit
第45页/共70页delay procnearusescx ;延时子程序
movbx,02hdelay1: movcx,0h loop$ decbx jnzdelay1 retdelay endp
end第46页/共70页实验八
8254定时/计数器实验
一.实验目的
1.掌握8254定时/计数器的基本使用方法。
2.了解8254定时/计数器利用级连扩大计数范围的方法。
3.了解多I/O芯片协同工作的原理和方法。二.实验内容
1.将8254定时器0设置为方式2(分频),定时器1设置为方式3(方波),定时器0的CLK0端接1M时钟,定时器0的输出脉冲作为定时器1的时钟输入。将定时器1的输出脉冲接在一个LED灯上或风鸣器上。编程使8254工作,观察灯的状态或风鸣器声响。
2.用8254做秒信号源,用8255A控制交通灯的红绿变化,完成一交通灯控制系统,使每10秒切换一次通行方向。三.实验电路及设计
1.实验电路图
第47页/共70页第48页/共70页第49页/共70页第50页/共70页第51页/共70页第52页/共70页2.“实验内容1”实验连线(1)8254的GATE0、GATE1接高电平;(2)8254T0的CLK0接1M时钟孔;(3)8254T1的CLK1接T0的OUT0;(4)8254的片选端CS8254连到译码控制单元的CS2;(5)8254T1的OUT1接LED灯或风鸣器的输入端BJ孔。
3.“实验内容2”实验连线以下连线假设8255A的A口为输入方式、B口为输出方式,8255A的PA1
连接8254T1的OUT1,8255A的B口控制交通灯的八只LED灯。(1)连线同“实验内容1”的(1)~(4);(2)8254T1的OUT1接8255A的PA1孔;(3)8255A的PB7~PB0对应连接到交通灯的RW、GW、RN、GN、
RE、GE、RS、GS
;(4)8255A的片选端CS8255连到译码控制单元的CS1;
第53页/共70页4.8254和8255A的端口地址
8254的端口地址:定时器0分频系数寄存器0E204H
,定时器1分频系数寄存器0E205H
,
定时器2分频系数寄存器0E206H
,控制寄存器0E207H
。
8255A的端口地址:
PA口:0E200H
,PB口:0E201H,PC口:0E202H,控制寄存器:0E203H。
第54页/共70页实验8.1开始初始化T0初始化T1装T0低字节计数初值结束装T0高字节计数初值装T1低字节计数初值装T1高字节计数初值第55页/共70页;cs8254----CS2;clk0---1M;out0-----CLK1;out1----BJ或L1;gate0---K1,令k1="1";gate1---K2,令k2="1".MODELSMALLCS8254EQU0E204HT0_CTLEQU00110100B;对T0两次读写,先低后;高。T0为方式2(分频)
T1_CTLEQU01110110B;对T1两次读写,先低;后高。T1为方式3(方波).DATAT0_DATA
DB
0FFH,040HT1_DATA
DB
0FFH,0
.CODE
.STARTUP MOVDX,CS8254+3;初始化T0 MOVAL,T0_CTL OUTDX,AL MOVDX,CS8254;给T0低字节装计数初值
MOVAL,T0_DATA OUTDX,AL MOVAL,T0_DATA+1;给T0高字节装计数初值
OUTDX,AL MOVDX,CS8254+3;初始化T1 MOVAL,T1_CTL OUTDX,AL MOVDX,CS8254+1 MOVAL,T1_DATA;给T1低字节装计数初值
OUTDX,AL MOVAL,T1_DATA+1;给T1高字节装计数初值
OUTDX,AL .EXIT END第56页/共70页实验8.2开始8254T0初始化给8254T0装初值8254T1初始化给8254T1装初值8255初始化为A口入、B口出8255B口输出方向初值读8255PA口、测试8255PA1PA1=0?读8255PA口、测试8255PA1PA1=111控制换向8255B口输出方向值检查键盘有键盘动?结束YYYNNNOUT1------PA1第57页/共70页;cs8254----CS2;clk0---1M;out0----clk1;out1----8255的PA1;gate0---k1,令k1="1";gate1---k2,令k2="1";JTDCS------k3,令k3="1";cs8255---CS1;8255(PB7...PB0)----(RW、GW、RN、GN、;RE、GE、RS、GS
).MODELSMALL T8254EQU0E204H T0_CTLEQU00110100B T1_CTLEQU01110110B p8255equ0E200H
;片选地址
p_ctlequ10010000B
;8255控制字
.DATA T0_DATADB0FFH,040H T1_DATADB0FFH,0 dir_dataDB00111100B
.CODE .STARTUP MOVDX,T8254+3
;8254T0初始化
MOVAL,T0_CTL OUTDX,AL MOVDX,T8254;给8254T0装初值
MOVAL,T0_DATA OUTDX,AL MOVAL,T0_DATA+1 OUTDX,AL MOVDX,T8254+3;8254T1初始化
MOVAL,T1_CTL OUTDX,AL MOVDX,T8254+1;给8254T1装初值
MOVAL,T1_DATA OUTDX,AL MOVAL,T1_DATA+1 OUTDX,AL第58页/共70页
movdx,p8255+3
;8255为A口入,B口出
moval,p_ctl outdx,al movdx,p8255+1
;8255B口输出方向初值
moval,dir_data outdx,albit_test0: ;扫描上升沿
movdx,p8255 inal,dx testal,2;测试8255PA1,等待PA1=0 jzbit_test1;PA1=0转
jmpbit_test0;PA1=1再测bit_test1: movdx,p8255 inal,dx testal,2;测试8255PA1,等待PA1=1 jnzdir_ctl;有上升沿转
jmpbit_test1;上升沿没到再测dir_ctl:
moval,dir_data;方向控制
notal;换向
movdir_data,al movdx,p8255+1;8255B口输出方向值
outdx,alMOVDL,0FFH movah,06h;检查键盘
int21h oral,al;有键盘输入转
jnzdir_end jmpbit_test0dir_end: .EXIT END第59页/共70页实验九
A/D转换实验
一.实验目的学习模/数转换器使用方法,理解模/数转换原理。二.实验内容
1.给A/D转换器输入一可调节的电压信号,假设该输入信号为一水塔的水位高度信号,请结合应用8255A接口芯片,编程完成以下功能:当水位低于PL时开报警、并打开水泵(点亮一指示灯),水位在PL~PH之间时关闭报警,水位高于PH时开报警、并关闭水泵(指示灯熄灭)。设PH=0B4H(约3.5V),PL=66H(约2.0V)。
2.用A/D转换器对电压信号Vdc连续采集4次,求出均值,放入指定单元;并把采集均值转换为电压,通过8255在数码管上显示。三.实验电路及设计
1.实验电路图第60页/共70页第61页/共70页第62页/共70页第63页/共70页第64页/
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- GB/T 45498.4-2025中华人民共和国社会保障卡一卡通规范第4部分:终端规范
- 会计变革与挑战试题及答案
- 注册会计师备考中有效资源的整合与利用试题及答案
- 2025年特许金融分析师考试重要通知试题及答案
- 中医课题项目申报书
- 2025年注册会计师考试的复习建议试题及答案
- 大数据存储系统数据去重重点基础知识点
- 项目管理的绩效评估工具应用试题及答案
- 微生物培养技术的关键知识点试题及答案
- 实践2025年注册会计师考试的试题及答案技巧
- 110(66)kV~220kV智能变电站设计规范
- 2023年胸痛中心质控报告-全国版
- GB/T 17630-2024土工合成材料动态穿孔试验落锥法
- 劳务派遣服务质量保障体系
- 电焊机操作培训课件
- 筛分机操作规程培训
- 建行企业文化理念 服务理念
- 电气设备安全操作培训
- 2016-2023年郑州信息科技职业学院高职单招(英语/数学/语文)笔试历年参考题库含答案解析
- 31情绪管理ABC理论
- 如何建立与客户的信任关系
评论
0/150
提交评论