西南交通大学2014-2015学年第(1)学期考试试卷课程代码课程名称微机原理及应用考试时间120分钟题号一二三四五六七八九总成绩得分阅卷教师签字:批改试卷25,改错25此处填写改卷者的名字一、填空题(每题1分,共10分)0、“模”是指一个计量系统的计算量程,2位十六进制整数的模是162=2561、2014的BCD码是:2014H2、SWJTU的ASCII码为:53574A5455H3、8051单片机的外部中断源有2个?自然优先级的排列是INT0、INT1。4、80C51单片机复位后从0000H单元开始执行程序;使SFR大部分都被清零,除SP和P0~P3以外。5、微型计算机的工作过程是取指令、分析指令、执行指令并不断循环的过程。6、微型计算机硬件的结构组成包括CUP、MEM、I/O接口、BUS7、汇编语言程序的基本结构有:顺序结构、循环结构、分支结构和子程序结构。8、当前广泛使用的微型计算机属于电子计算机发展史上的第四代大规模、超大规模集成电路电子计算机。9、用于程序设计的语言可分为机器语言、汇编语言和高级语言二、简答题(每题5分,共4题20分)0、简述绘制流程图和编写源程序的基本原则。1、MCS-51的寻址方式有哪些?各列举一个实例。2、单片机的定义、特点和应用领域?3、画出8052单片机内部RAM的结构图,并说明每个区域可能有的寻找方式;寄存器寻址、寄存器间接寻址、直接寻址寄存器间接寻址、直接寻址(8位地址的字节)、位寻址(8位地址的位)寄存器间接寻址、直接寻址直接寻址、寄存器寻址、位寻址(8位地址的位)班级学号姓名密封装订线密封装订线密封装订线工作寄存器区位寻址区通用RAM区00H1FH30H7FH32个字节16个字节80个字节80HFFHSFR区直接寻址访问间接寻址访问增强型附加空间外部RAM(或I/O)64K0000HFFFFHRDWR绘图要点:先绘制条件不成立的流程图,然后绘制条件成立的流程图最后在流程图汇合处和转移目的地址处加标号写汇编:先按流程图按条件NO流程优先方式拉直,并写完汇编程序然后依次从最近的条件YES流程写汇编程序立即寻址:MOVA,#30H变址寻址:MOVCA,@A+DPTR相对寻址:JZLOOP直接寻找:MOVA,30H位寻址:MOVC,30H寄存器寻址:MOVA,R0间接寻址:MOVA,@R0将CPU、ROM、RAM、输入/输出(I/O)接口电路以及定时器/计数器等主要部件集成在一块集成电路芯片上。称为单片微型计算机(SingleChipMicrocomputer),简称单片机。单片机的特点:性价比高;针对性强;集成度高;功耗较小;品种多多,发展更新快。应用领域:1、家用电器,如微波炉、电视机、电饭煲、空调器、电冰箱、洗衣机等。2、在交通领域中。如交通灯、汽车、火车、飞机、航空航天器等均有单片机的广泛应用。3、智能仪器仪表。如各种智能电气测量仪表、智能传感器等。4、机电一体化产品。如医疗设备(B超)、机器人、数控机床、自动包装机、复印机等。5、实时工业控制。如温度控制、电机转速控制、生产线控制等。三、多字节无符号数加法,要求用主程序调用子程序编程,子程序入口参数:R0存放被加数的起始地址,R1存放加数的起始地址,字节数存在R2中,出口参数:R0存放和的起始地址,R3存放和的字节数;分别编写主程序和子程序。;主程序,设置堆栈,配置入口参数,执行调用指令ORG0000HMOVSP,#70H;1分MOVR0,#xxHMOVR1,#yyHMOVR2,#zzH;1分LCALLDADD;1分调用多字节无符号数加法子程序SJMP$;===================================;子程序名:DADD;功能:实现多字节无符号数相加,;入口参数:R0存放被加数的开始地址,R1存放加数的开始地址,R2存放字节数.;出口参数:R0存放和的开始地址,R3存放和的字节数.;占用资源:A、B、C;调用的其他子程序名:无DADD:MOVA,R2MOVR3,AMOVB,R0;1分CLRC;1分LOOP:MOVA,@R0ADDCA,@R1MOV@R0,A;1分INCR0INCR1;1分DJNZR2,LOOP;1分JNCLOOP1INCR3MOV@R0,#01H;1分LOOP1:MOVR0,BRET;1分,子程序返回子程序格式1分四、设被除数R0和除数R1中有两个补码形式的有符号数,要求编写求两数相除并把商送入R3余数送人R2的子程序,绘制流程图。1分1分1分1分1分;子程序名:WDIV;功能:实现单节有符号数相除,;入口参数:R0存放被除数,R1存放除数.;出口参数:R3存放商数,R2存放余数.;占用资源:A、B、C;调用的其他子程序名:无SBITBIT20H.0SBIT1BIT20H.1SBIT2BIT20H.2WDIV:MOVA,R0;被除数送ARLCA;被除数符号送CyMOVSBIT1,C;送入SBIT1MOVA,R1;除数送ARLCA;除数符号送CyMOVSBIT2,C;送入SBIT2ANLC,/SBIT1;SBIT2∧/SBIT1送CyMOVSBIT,C;送入SBITMOVC,SBIT1;SBIT1送CyANLC,/SBIT2;SBIT1∧/SBIT2送CyORLC,SBIT;余数和商的符号位送CyMOVSBIT,C;送入SBITMOVA,R1;处理除数JNBSBIT2,NCH1;若它为正,则转NCH1CPLA;若它为负,则求补得绝对值INCANCH1:MOVB,A;除数绝对值送BMOVA,R0;处理被除数JNBSBIT1,NCH2;若它为正,则转NCH2CPLA;若它为负,则求补得绝对值INCANCH2:DIVAB;求商和余数的绝对值JNBSBIT,NCH3;若它为正,则转NCH3CPLA;若它为负,则商求补INCANCH3:MOVR3,A;商存入R3MOVA,B;余数送AJNBSBIT,NCH4;若它为正,则转NCH4CPLA;若它为负,则余数求补INCANCH4:MOVR2,A;余数存入R2RET;,子程序返回取被除数符号取除数符号求商和余数的符号除数R10?除数求补被除数R00?被除数求补求商和余数的绝对值商求补商0?存余数入R2子程序返回YNYNYN余数求补余数0?YN存商入R3NCH1NCH2NCH3NCH4子程序开始1分1分1分子程序格式1分1分五、将外部RAM2345H~2361H中的无符号数求累加和,结果存于内部RAM30H和31H中。绘制流程图并编写程序。六、已知从外部RAM的BLOCK单元开始存放有一组有符号数,数的个数存放在LEN单元。请编写程序将正数和负数并分别存入内部RAM以BLOCK1和BLOCK2开始的单元中,并绘制流程图。MOVDPTR,#2345HMOV30H,#00;存储和高字节MOV31H,#00;存储和低字节MOVR2,#1DH;数据个数29LP:MOVXA,@DPTR;取一个数ADDA,31hMOV31H,A;存储和低字节CLRAADDCA,30HMOV30H,A;存储和高字节INCDPTR;修改地址指针DJNZR2,LP;没完?SJMP$累加没完?开始高字节累加(30H)ß(30H)+CY修改地址指针变量设置累加首地址2345H设置循环次数变量R2ß#29和高低字节清零低字节累加(31H)ß(31H)+@DPTR结束NLPMOVDPTR,#BLOCKMOVR0,#BLOCK1MOVR1,#BLOCK2MOVR2,#LENLP:MOVXA,@DPTR;取一个数JBACC.7,LP1MOV@R0,AINCR0LP2:INCDPTR;修改地址指针DJNZR2,LP;没完?SJMP$LP1:MOV@R1,AINCR1SJMPLP2数没取完?开始Y修改取数地址指针设置首地址指针DPTRR0R1设置循环次数变量R2取出一个数据结束NLP数据0?YN正数存入@R0存正数指针+1负数存入@R1存负数指针+1LP1LP21分1分1分1分1分1分1分1分1分1分1分1分1分1分1分1分1分1分1分1分七、比较内部RAMData1和Data2单元内以补码形式表示的带符号数,并将大数存入BIG单元,小数存入SMALL单元,若相等,则建立起标志位F0,完善流程图并编写程序。Data1EQU40hData2EQU41hBIGEQU30HSMALLEQU31HORG0000HCOM2:MOVA,Data1XRLA,Data2JNZSTEP1;两数不等,转STEP1SETBF0;两数相等,F0置位RETSTEP1:JBACC.7,TEST;两数异号,转TESTXRLA,Data2;两数同号,恢复Data1SUBBA,Data2;比较JCSTEP3;Data1小,转STEP3STEP2:MOVBIG,Data1;Data1大MOVSMALL,Data2RETTEST:XRLA,Data2;恢复Data1JNBACC.7,STEP2;Data1为正,大,转STEP2STEP3:MOVSMALL,Data1MOVBIG,Data2RET不相等?Y取Data1和Data2N设置标志F0开始异号?NY结束Data1存入SMALLData2存入BIG结束结束Data1小?NYData1存入BIGData2存入SMALLData1正?NYSTEP1TESTSTEP3STEP2正确添加4个标号2分1分1分1分1分1分1分1分1分八、要求运用T0工作于方式0,从P1.1引脚输出1000Hz方波,晶振频率为12MHz。绘制中断方式程序的流程图,并写出相应的汇编语言程序。解:①TMOD初始化:GATE=0,C/T=0,M1M0=00B②计算定时500s初值:方式0:X=Mt/T=213-500/1=7692=1E0CH=1111000001100B即:TH0=F0H,TL0=0CH。ORG0000HLJMPMAINORG000BH;T0中断入口LJMPT0INTORG0100HMAIN:CLRP1.1;设置方波的起始状态0MOVTMOD,#00H;定时器T0工作方式0MOVTL0,#0CH;送初值,保证定时时间为500usMOVTH0,#0F0HSETBEA;开T0中断SETBET0SETBP1.1;设置方波的起始状态SETBTR0;启动定时器LOOP:……;主程序的循环处理程序……LJMPLOOPT0INT:MOVTL0,#0CH;再送计数初值,保证定时时间始终为500usMOVTH0,#0F0HCPLP1.1;溢出处理;改变P1.1的状态RETI;中断返回ENDP1.180311ms设置P1.1起始状态0置T0工作方式0设定T0初值主程序开始打开T0中断设置P1.1为1启动定时器T0主循环中断返回重装T0定时500us初值改变P1.1的状态子程序开始2分1分1分2分2分2分九、51单片机P1.0~P1.7分别通过反相器接8个发光二极管,要求用T0定时查询方式,绘制响应的流程图并编写相应程序,每隔1s循环点亮1只发光二极管,一直循环下去,已知系统的晶振频率为12MHz。解:①TMOD初始化:GATE=0,C/T=0,方式1:M1M0=01B;所以TMOD=01H②计算定时50ms初值:方式1:X=Mt/T=216–50ms/1s=15536=3CB0H所以T1的初值为:TH0=3CH,TL0=B0H。P1.0P1.7+5VVL0VL78031LPNTF0=1?YTF0ß0启动T0设置T0方式并置初值重置初值程序开始点亮第一个灯设置50ms循环次数LP1重置50ms溢出次数点亮下一个灯1S没到?YNORG1000HMOVA,#01H;MOVP1,A;点亮第一个灯MOVR2,#20;设置50ms的溢出次数MOVTMOD,#01H;设置T0定时器方式1MOVTH0,#3CH;送初值MOVTL0,#0B0HSETBTR0;启动T0开始定时LP:JBCTF0,LP1;TF0为1则转LP1SJMPLP;TF0为0,则等待LP1:MOVTH0,#3CH;重装初值MOVTL0,#0