复试单片机课件习题讲解_第1页
复试单片机课件习题讲解_第2页
复试单片机课件习题讲解_第3页
复试单片机课件习题讲解_第4页
复试单片机课件习题讲解_第5页
已阅读5页,还剩49页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

习题讲解第4章习题讲解1.P98第12题

MOVR0,#0A7H;R0=0A7H,A=X XCHA,R0;A=0A7H,R0=X SWAPA;A=7AH,R0=X XCHA,R0;R0=7AH,A=X2,P98,第15题若执行ADDCA,B指令,A=37H,CY=1;

若执行SUBBA,B指令,A=3BH,CY=03,P99,第18题

MOV30H,#0A4H;30H=A4HMOVA,#0D6H;A=0D6HMOVR0,#30H;R0=30HMOVR2,#47H;R2=47H ANLA,R2;A=46HORLA,@R0;A=E6HSWAPA;A=6EHCPLA;A=91HXRLA,#0FFH;A=6EHORL30H,A;30H=EEH

4,P100,第27题

MOVDPTR,#2100HMOVXA,@DPTRORLA,#0F0HANLA,#0F0HMOVX@DPTR,A

其实:MOVDPTR,#2100HMOVA,#0F0HMOVX@DPTR,A

第5章习题讲解1,P130第6题

MOV30H,#0 MOV31H,#0 MOV32H,#0 MOVDPTR,#2000H MOVR7,#100LOOP:MOVXA,@DPTR INCDPTR JNZL1 INC32H;=0 SJMPL3 L1:JBACC.7,L2 INC30H;>0 SJMPL3 L2:INC31H;<0 L3:DJNZR7,LOOP

SJMP$2,P130第12题

MOVR2,#10 MOVR3,#02H MOVR4,#00H MOVR5,#03H MOVR6,#00HLOOP:MOVDPH,R3 MOVDPL,R4 MOVXA,@DPTR

ANLA,#0FH SWAPA XCHA,B INCDPTR MOVXA,@DPTR ANLA,#0FH ORLA,B INCDPTR MOVR3,DPH MOVR4,DPTR

MOVDPH,R5 MOVDPL,R6 MOVX@DPTR,A

INCDPTR MOVR5,DPH MOVR6,DPL DJNZR2,LOOP SJMP$

另一种解法:at89s51具有双数据指针

MOVR2,#10 MOVDPTR,#0200H SETBDPS;(AUXR1.0),P50 MOVDPTR,#0300HLOOP:CLRDPS MOVXA,@DPTRANLA,#0FH SWAPA XCHA,B INCDPTR MOVXA,@DPTR ANLA,#0FH ORLA,B INCDPTRSETBDPS MOVX@DPTR,A

INCDPTR DJNZR2,LOOPCLRDPS SJMP$3,P131第17题

MOVR7,#33 MOVR0,#40H MOVDPTR,#2540HLOOP:MOVA,@R0 MOVX@DPTR,AINCR0 INCDPTR DINZR7,LOOP SJMP$第6章习题讲解1.设MCS-51单片机的晶振频率为12MHZ,试用单片机的内部定时器方式产生频率为10KHZ的等宽矩形方波信号。

ORG0000HMOVTMOD,#02HMOVTL0,#0CEH;T=100us,定时50usMOVTH0,#0CEHSETBTR0LOOP:JNBTF0,$CLRTF0CPLP1.0AJMPLOOPEND若为方式0:初值为FE0EH;若为方式1:初值为FFCEH;需要重装初值。2.已知80C51单片机系统时钟频率为6MHZ,请利用定时器T0和P1.2输出矩形脉冲。

参考程序:

ORG0000HMOVTMOD,#02H;定时模式2MOVTH0,#0E7H;初始值

MOVTL0,#0E7HSETBTR0定时50usL1:SETBP1.2MOVR0,#7DEL:JBCTF0,REPAJMPDELREP:CLRP1.2DJNZR0,DEL AJMPL1END

3.设MCS-51单片机的晶振频率为6MHZ,以计数器T0进行外部事件计数,每计数1000个外部事件输入脉冲后,计数器T1开始2ms定时,定时时间到后,T0又开始计数,如此周而复始地工作。参考程序:

ORG0000H MOVTMOD,#15H;计数器工作模式LOOP:MOVTL0,#18H;65536-1000MOVTH0,#0FCHSETBTR0JNBTF0,$;等待计数1000次

CLRTR0若为方式0:TMOD=14H,初值为E018H;不适合用方式2

CLRTF0 MOVTL1,#18H;定时2msMOVTH1,#0FCHSETBTR1JNBTF1,$;等待1ms时间到

CLRTR1CLRTF1AJMPLOOP;循环重复

END若为方式0:初值为E018H;不适合用方式2第7章习题讲解1.在80C51的应用系统总时钟频率为6MHZ,现需利用定时器T1产生波特率为1200bps。请计算初值,实际得到的波特率的误差是多少?波特率发生器T1采用工作方式2,波特率不加倍(即SMOD=0),计算时间常数(初始值)。

TL1=TH1=X

=256-2SMOD×fosc/(32×12×B)

=243=F3H(其中SMOD=0)实际波特率B=(20/32)×fosc/[12×(28-243)]

=1201.923(误差0.16%)2.以80C51串行口按工作方式3进行串行数据通讯。假定波特率为1200bps,第9位作为奇校验位,以中断方式传送数据,请编写通讯程序。

假定晶振频率为11.0592MHZ。(1)发送程序:

ORG0000HAJMPMAINORG0023HAJMPINTSORG0030HMAIN:MOVSCON,#0C0H;串行口方式3MOVTMOD,#20H;T1方式2定时

MOVTL1,#0E8H;写入T1时间常数

MOVTH1,#0E8HSETBTR1;启动T1

MOVR0,#30H;设数据指针

MOVR7,#20H;数据长度

MOVIE,#90HMOVA,@R0;启动发送一次

JBP,SEND1SETBTB8SEND1:MOVSBUF,A;启动一次发送

INCR0SJMP$INTS:CLRTI

DJNZR7,OUT;是否发送完?

MOVA,@R0;取一个字符

JBP,SEND2;加奇校验

SETBTB8

AJMPINTS3SEND2:CLRTR8SEND3:MOVSBUF,A;启动一次发送

INCR0;修改指针

OUT:RETIEND(2)接收程序:ORG0000HAJMPMAINORG0023HAJMPINTSORG0030HMAIN:MOVSCON,#0D0H;串行口方式3MOVTMOD,#20H;T1方式2定时

MOVTL1,#0E8H;写入T1时间常数

MOVTH1,#0E8HSETBTR1;启动T1MOVR0,#30H;设数据指针

MOVIE,#90HSJMP$INTS:MOVA,SBUFCLRRI

JBP,INTS1;奇校验

JNBRB8,ERROR

AJMPINTS2INTS1:JBRB8,ERRORINTS2:MOV@R0,A;保存一个字符

INCR0

RETIERROR:SETB00H;报错程序

RETIEND3.以中断方式设计单片微机的秒、分发生器。假定P1.0每秒产生一个机器周期的正脉冲,P1.1实现每分钟产生一个机器周期的正脉冲。加上必要的伪指令和注释。假定晶振频率为12MHZ。解:要求定时时间为1s,若采用定时模式1,根据公式:定时时间T=(65536-初始值x)Tcy,可知最大定时时间为65.536ms。若定时10ms,则必须有100个10ms,即100次溢出中断为1s,10ms时间常数为D8F0H。 ORG0000H AJMPMAIN ORG000BH AJMPINT_T0 ORG0030H MAIN:MOVTMOD,#01H MOVTL0,#0F0H;定时10ms MOVTH0,#0D8H

SETBTR0MOVR6,#00HMOVR7,#00H

CLRP1.0CLRP1.1SETBET0 SETBEA SJMP$INT_T0:MOVTL0,#0F0H MOVTH0,#0D8HINCR6

CJNER6,#100,OUT;定时1秒钟

MOVR6,#00H;为下个周期作准备 SETBP1.0;正脉冲输出

CLRP1.0INCR7

CJNER7,#60,OUT;定时1分钟

MOVR7,#00H;为下个周期作准备

SETBP1.1;正脉冲输出

CLRP1.1OUT:RETIEND实验知识预备1.单版微机实验装置相当于一个仿真器,可以仿真MCS-51单片机的绝大部分硬件功能;

2.像仿真器一样,我们可以在实验装置上进行软、硬件调试,观察控制硬件的执行结果或每条指令的执行结果;

3.应该养成自己动手的习惯,只有多动手才有可能深入掌握软、硬件知识;

4.刚开始接触肯定会有很多问题,应该学会自己分析问题,解决问题,不要急于问老师;

5.做实验前要认真准备,编好源程序,有效利用紧张的实验时间。实验的基本步骤(1):1.启动LCAET软件。2.File→New,建立新文件;输入汇编源程序。3.另存为*.asm,此时操作码显示蓝色。注意:汇编程序后缀必须为asm,否则不能正确编译;文件名不能太长,应小于8个字符;存放路径不能为中文;4.在“编译”菜单栏,使用编译当前文件命令,对源程序进行编译,下面信息栏会提示语法错误的位置和类型,若有错,修改后继续编译,直至没有错误为止。注意:其中若提示不能与实验机通讯,可打开实验装置电源(右上角有电源开关);若已经打开,请按RST键,使实验仪恢复,利于下载通讯。实验的基本步骤(2):5.在断电状态下,按照实验指导书要求正确连线,不要随意乱插乱放,同时因导线容易损坏,请轻拔轻插,不能硬拉猛攥。6.打开实验装置电源(右上端),再次使用编译当前文件命令,使得将机器码传送到实验仪。注意:若实验装置已经打开运行,请按RST键,使实验仪恢复,利于下载通讯。7.在“调试”菜单栏,使用全速运行或单步运行命令,执行程序,查看运行结果,检查内在逻辑错误,有错则返回第4步继续修改汇编源程序。注意:(1)若不能正常通讯,可能原因是:右下方的串行通讯波特率(9600)开关选择错误;或串口连接导线松动。(2)若程序确定无误,而发光二极管显示不正常,可能是导线短路,请更换或叠加导线(个别不亮不影响观察结果,则无需更换);若8个发光管全都不受控制,则可能是芯片损坏,请联系老师更换。(3)在输入指令过程中,要注意指令的完整性,不要遗漏“#”、“END”,区别数字“0”与字母“o”、“O”,(4)程序编写完成后,应当自己先认真分析程序执行路径,查找明显的逻辑错误,以免产生莫名错误。特别注意子程序不能放在程序起始部位,同时要特别注意延时程序的循环构架。实验一(1)实验要求:(1)P1口作为输出口,接8只发光二极管,要求编程使放光二极管循环点亮;(2)P1口做输入口,接8个扭子开关,以实验机上的74LS273作为输出口(接8个发光管),要求编写程序使得发光管的状态能够反映出开关的状态;实验目的:学习并行口的使用方法;请参考程序框图自己编程!注意(1)这里将74LS273作为一个总线扩展,它的输出端Q1~Q8相当于1个扩展片外RAM单元,它的地址决定于它的使能端CLK,所以这里它的地址是8300H,必须使用MOVX指令进行写操作;(2)8个发光管通过74LS240直接连接到P1口,这里的74LS240为非门驱动电路;(3)人肉眼要能观察到两个状态间的变化,必须有一足够的时间间隔,否则感觉所有发光管全亮。参考程序(1):ORG0000HMOVA,#01HROTATE:MOVP1,A;点亮一个LEDRLA;循环右移

LCALLDELAY;延时

SJMPROTATE

DELAY:;延时子程序(1秒)MOVR0,#0AHDELAY1:MOVR1,#00HDELAY2:MOVR2,#0B2HDJNZR2,$DJNZR1,DELAY2DJNZR0,DELAY1RETEND参考程序(2):ORG0000HMOVDPTR,#8300H;并行输出口地址READ:MOVP1,#0FFH;因P1口是准双向口,所以

;把P1口作为输入口时,;应先置高电平

MOVA,P1;读开关状态

MOVX@DPTR,A;把读入的数据输出

AJMPREADEND返回实验一(2)实验要求:利用P3口输出高低电平,控制继电器的开合,实现对外部功率元件的控制;实验目的:掌握位操作控制的使用方法;注意:继电器是一种非常好的功率控制元件,可以起到弱电→强电的桥梁作用,我们这里是控制继电器线圈的通电,从而控制其触点的开合。同样两个状态之间必须有足够时间间隔,否则不能使线圈状态改变。请参考程序框图自己编程!参考程序:

ORG0000HJD:CPLP3.5;继电器状态(吸合/分开)切换

LCALLDELAY;延时

SJMPJDDELAY:如上例

RETEND返回实验二实验要求:要求每1秒钟切换一种发光管显示方式(8个发光管通过74LS240直接连接到P1口,这里的74LS240为非门驱动电路),共有8种不同的显示方式,然后是反复出现这个8个状态;实验目的:掌握单片机内部定时器的使用方法和子程序的使用方法;注意晶振为11.0592MHZ,定时器最大定时时间为216×Tcy=71111us≈71ms。这里我们将定时器1工作于方式1,可以产生一个50ms的时基,所以要想得到1秒延时,必须有20个50ms的发生,即统计到20个定时,就为1秒。请参考程序框图自己编程!若有时间,请将实验一修改成采用定时器定时方式控制。实验指导书修改实验目的2,“中断处理程序”修改为“子程序”;删除实验说明4;实验框图,“中断子程序”修改为“子程序”,“中断返回”修改为“返回”。参考程序:

ORG0000HMOVTMOD,#10H;置T1为方式1MOVTL1,#00H;延时50mS的时间常数

MOVTH1,#4CHMOV30H,#00HMOVR1,#00HMOVDPTR,#TABSETBTR1LL:JNBTF1,$MOVTL1,#00H;延时50mS常数

MOVTH1,#4CHCLRTF1INCR1CJNER1,#20,LLMOVR1,#0ACALLLT1AJMPLLLT1:;子程序

MOVA,30H;置常数表偏移量

MOVCA,@A+DPTR;读常数表

MOVP1,A;送P1口显示

INC30HANL30H,#07HRET;LED显示常数表TAB:DB05H,0AH,50H,0A0HDB55H,0AAH,0FFH,00HEND实验三外部中断实验要求:以按键为中断申请,每按键一次,切换双色灯的显示颜色,红绿轮流显示。实验目的:掌握单片机外部中断的使用方法;注意:74LS273的地址仍为8300H;用开关发出外部中断所需的低电平信号,若采用电平触发方式,在中断程序返回前,必须撤销低电平信号,否则将反复中断;若采用跳变方式就不会有这问题。请参考程序框图自己编程!将实验二修改成中断方式。返回实验指导书修改删除“四.实验说明”中第二段文字,以免误解:

“本例中使用了INT0中断,一般中断程序进入时应保护PSW,ACC以及中断程序使用但非其专用的寄存器。本例的INT0程序保护了PSW,ACC,2等三个寄存器并且在退出前恢复了这三个寄存器。另外中断程序中涉及到关键数据的设置时应关中断,即设置时不允许重入。本例中没有涉及这种情况。”

ORG 0000H AJMP MAIN

ORG 0003H ;中断入口 AJMP PINT0

ORG 0030H

;主程序

MAIN:SETB IT0 ;负跳变触发 或:CLR IT0 ;低电平触发

SETB EX0 ;开INT0中断

SETB EA ;开总允许开关

MOVA,#0FH MOV DPTR,#8300HHere:SJMP Here ;执行其它任务

ORG 0200H

;中断服务程序

PINT0:MOVX @DPTR,ACPL A

或:JNB P3.2,$;等待按键释放

CLR IE0 ;清除误触发

RETI ;返回主程序

END实验五实验要求:使用62256,作为数据空间0~7FFFH,对其进行读写,检验硬件线路;实验目的:学习片外存储器扩展方法;学习数据存储器不同的读写方法;学习延时程序的编写方法;实验方法:检验硬件线路一般使用55H(0101,0101B)与AAH(1010,1010B),可以有效检查总线是否短路、断路或接错。注意:实验装置使用的晶振为11.0592MHZ,主要是为了得到准确的串行通讯波特率,计算延时程序时应该注意机器周期时间。请参考程序框图自己编程!参考程序:

ORG0000HSTART:MOVDPTR,#4100H;置外部RAM读写地址

MOVA,#55H;测试的数据一

MOVB,AMOVX@DPTR,A;写外部RAMMOVXA,@DPTR;读外部RAM

XRLA,B;比较读回的数据

JNZERROR

MOVA,#0AAH;测试的数据二

MOVB,AMOVX@DPTR,AMOVXA,@DPTRXRLA,BJZPASS;测试通过ERROR:SETBP1.0;测试失败,点亮LEDSJMP$PASS:CPLP1.0;LED状态(亮/灭)转换

MOVR1,#00H;延时DELAY:MOVR2,#00HDJNZR2,$DJNZR1,DELAYLJMPSTART;循环测试

END返回实验七实验要求:8031内部定时器T0工作于计数器方式,累计来自

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论