单片机习题教材_第1页
单片机习题教材_第2页
单片机习题教材_第3页
单片机习题教材_第4页
单片机习题教材_第5页
已阅读5页,还剩108页未读 继续免费阅读

下载本文档

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

文档简介

习题第1章习题幻灯片2第3章习题幻灯片10C第3章习题幻灯片25第6章习题幻灯片36第8章习题幻灯片63第10章习题幻灯片76第12章习题幻灯片98第2章习题幻灯片3第4章习题幻灯片18第5章习题幻灯片28第7章习题幻灯片48第9章习题幻灯片70第11章习题幻灯片88第13章习题幻灯片1013.8051与8751的区别是

。A.内部数据存储单元数目不同 B.内部数据存储器类型不同C.内部程序存储器的类型不同 D.内部寄存器的数目不同8.AT89C51单片机相当于MCS-51系列单片机中的哪一种型号的产品?答:相当于MCS-51系列中的87C51,只不过是AT89C51芯片内的4KBFlash存储器取代了87C51片内的4KB的EPROM。第1章习题C3*.内部RAM中,位地址为40H、88H的位,该位所在字节的字节地址分别为

。幻灯片815*.若A中的内容为63H,那么,P标志位的值为

。解:(A)=01100011,“1”的个数为偶数,P=0。6*.AT89C51单片机复位后,R4所对应的存储单元地址为

,因上电时PSW

=

。这时当前的工作寄存器区是

组工作寄存器区。第2章习题28H88H004H00H011*.判断以下有关PC和DPTR的结论

是正确的。A.DPTR是可以访问的,而PC不能访问B.它们都是16位寄存器C.在单片机运行时,它们都具有自动加“1”的功能D.DPTR可以分为2个8位的寄存器使用,但PC不能第2章习题A、B、D13*.PC的值是

。A.当前正在执行指令的前一条指令的地址;B.当前正在执行指令的地址;C.当前正在执行指令的下一条指令的地址;D.控制器中指令寄存器的地址。第2章习题C15.AT89C51单片机的片内都集成了哪些功能部件?各个功能部件的最主要的功能是什么?(1).1个微处理器(CPU);(2).128个数据存储器(RAM)单元;(3).4KBFlash程序存储器;(4).4个8位可编程并行I/O口(P0口、P1口、P2口、P3口);(5).1个全双工串行口;(6).2个16位定时器/计数器;(7).一个中断系统,5个中断源,2个优先级;(8).21个特殊功能寄存器(SFR)。第2章习题1.在AT89C51单片机中,若采用6MHz晶振,一个机器周期为

。解:1个机器周期4.片内字节地址为2AH单元的最低位的位地址是

;片内字节地址为88H单元的最低位的位地址是

。幻灯片83第2章习题2µs50H88H8.通过堆栈操作实现子程序调用,首先要把

的内容入栈,以进行断点保护。调用返回时,再进行出栈,把保护的断点送回到

。10.判断下列

项说法是正确的。A.AT89C51单片机的CPU是由RAM和EPROM组成的B.区分片外程序存储器和片外数据存储器的最可靠的方法是看其位于地址范围的低端还是高端C.在AT89C51单片机中,为使准双向的I/O口工作在输入方式,必须保证它被事先预置为1D.PC可以看成是程序存储器的地址指针第2章习题PCPCC、D18.当AT89C51单片机运行出错或程序陷入死循环时,如何摆脱困境?答:按下复位按钮。第2章习题5*.在寄存器间接寻址方式中,其“间接”体现在指令中寄存器的内容不是操作数,而是操作数的

。第3章习题地址6*.已知程序执行前有(A)

=

02H,(SP)

=

52H,(51H)

=

FFH,(52H)

=

FFH。下述程序执行后,(A)

=

,(SP)

=

,(51H)

=

,(52H)

=

,(PC)

=

。POP DPH ;(SP)=51HPOP DPL ;(SP)=50HMOV DPTR,#4000H;(DPTR)=4000HRL A ;(A)=04HMOV B,A ;(B)=04HMOVC A,@A+DPTR;(A)=30HPUSH Acc;(SP)=51H,(51H)=30H第3章习题MOV A,B ;(A)=04HINC A ;(A)=05HMOVC A,@A+DPTR ;(A)=50HPUSH Acc;(SP)=52H,(52H)=50HRET ;(SP)=50H,(PC)=5030HORG 4000HDB 10H,80H,30H,50H,30H,50H50H50H50H30H5030H7*.假定(A)

=

83H,(R0)

=

17H,(17H)

=

34H,执行以下指令后,(A)

=

。ANL A,#17HORL 17H,AXRL A,@R0CPL A第3章习题

10000011∧0001011100001100;(A)∧17H→A(A)=03H;(A)∨(17H)→17H

00000011∨0011010011001110(17H)=37H;(A)⊕((R0))→A

00000011⊕0011011111000010(A)=34H;(A)=CBHCBH11*.判断下列说法

项是正确的。A.立即寻址方式是被操作的数据本身就在指令中,而不是它的地址在指令中B.指令周期是执行一条指令的时间C.指令中直接给出的操作数称为直接寻址第3章习题A、B15*.写出完成如下要求的指令,但不能改变未涉及位的内容。(1).把Acc.3,Acc.4,Acc.5和Acc.6清“0”。(2).把累加器A的中间4位清“0”。(3).使Acc.2和Acc.3置“1”。答:(1).ANLA,#87H ;87H=10000111B

(2).ANLA,#0C3H ;C3H=11000011B

(3).ORLA,#0CH ;0CH=00001100B也可以使用位操作指令,例如用CLRAcc.3对Acc.3清0例如用SETBAcc.2对Acc.2置1第3章习题3.假定累加器A中的内容为30H,执行指令1000H: MOVCA,@A+PC后,把程序存储器

单元的内容送入累加器A中。解:取出指令后(PC)=1001H,(A)+(PC)=1031H第3章习题1031H12.判断以下指令的正误。(1).MOV 28H,@R2 (2).DEC DPTR (3).INC DPTR (4).CLR R0 (5).CPL R5 (6).MOV R0,R1(7).PHSH DPTR (8).MOV F0,C (9).MOV F0,Acc.3 (10).MOVX A,@R1(11).MOV C,30H (12).RLC R0第3章习题14.下列程序段的功能是什么?PUSH AccPUSHBPOP AccPOP B答:A的内容与B的内容互换。第3章习题第4章习题7*.试编写程序,查找在内部RAM的30H~50H单元中是否有0AAH这一数据。若有,则将51H单元置为“01H”;若未找到,则将51H单元置为“00H”。典型错误如下:START:MOV R0,#30H ;查找内部RAM的首地址

MOV R2,#20H ;查找次数LOOP: MOV A,@R0 CJNE A,#0AAH,NEXT MOV 51H,#01H ;查到,将51H单元置为“01H”NEXT: INC R0 ;指向下一个单元

DJNZ R2,LOOP ;次数未到继续查

MOV 51H,#00H ;未查到,将51H单元置为“00H”EXIT: RET第4章习题7*.试编写程序,查找在内部RAM的30H~50H单元中是否有0AAH这一数据。若有,则将51H单元置为“01H”;若未找到,则将51H单元置为“00H”。参考程序如下:START:MOV R0,#30H ;查找内部RAM的首地址

MOV R2,#21H ;查找次数,33个单元LOOP: MOV A,@R0 CJNE A,#0AAH,NEXT MOV 51H,#01H ;查到,将51H单元置为“01H”

RETNEXT: INC R0 ;指向下一个单元

DJNZ R2,LOOP ;次数未到继续查

MOV 51H,#00H ;未查到,将51H单元置为“00H”EXIT: RET第4章习题8*.试编写程序,查找在内部RAM的20H~40H单元中出现“00H”这一数据的次数,并将查找到的结果存入41H单元。START:MOV 41H,#0 ;次数单元清0 MOV R2,#21H ;查找次数,33个单元

MOV R0,#20H ;查找内部RAM的首地址LOOP: MOV A,@R0 JNZ NEXT

INC 41H ;=0,次数加1NEXT: INC R0 ;指向下一个单元

DJNZ R2,LOOP ;次数未到继续查

RET参考程序如下:第4章习题9*.在内部RAM的21H单元开始存有一组单字节无符号数,数据长度为20H,编写程序,要求找出最大数存入MAX单元。START:MOV R0,#21H ;查找内部RAM的首地址

MOV R2,#20H ;查找次数,32个单元

MOV MAX,#0LOOP: MOV A,@R0 CLR C SUBB A,MAX JNC NEXT ;(A)<(MAX),不管

MOV MAX,A ;(A)≥(MAX),(A)→MAXNEXT: INC R0 ;指向下一个单元

DJNZ R2,LOOP ;次数未到继续查

RETJC@R0典型错误如下:第4章习题9*.在内部RAM的21H单元开始存有一组单字节无符号数,数据长度为20H,编写程序,要求找出最大数存入MAX单元。参考程序如下:MAX DATA50H START:MOV R0,#21H ;查找内部RAM的首地址

MOV R2,#20H ;查找次数,32个单元

MOV MAX,#0LOOP: MOV A,@R0 CJNE A,MAX,$+3 JC NEXT ;(A)<(MAX),不管

MOV MAX,A ;(A)≥(MAX),(A)→MAXNEXT: INC R0 ;指向下一个单元

DJNZ R2,LOOP ;次数未到继续查

RET第4章习题6.试编写一个程序,将内部RAM中45H单元的高4位清“0”,低4位置“1”。答:参考程序如下:

MOV A,45H ANL A,#0FH ORL A,#0FH MOV 45H,A第4章习题10.若SP=60H,标号LABEL所在的地址为3456H。LCALL指令的地址为2000H,执行如下指令2000HLCALLLABEL后,堆栈指针SP和堆栈内容发生了哪些变化?PC的值等于什么?如果将指令LCALL直接换成ACALL是否可以?如果换成ACALL指令,可调用的地址范围是什么?

(1).SP=SP+1=61H (61H)=PC的低字节=03H SP=SP+1=62H (62H)=PC的高字节=20H (2).PC=3456H (3).不可以

(4).2KB=2048Byte0010000000000011,0011

010001010110C第3章习题4*.编写C51程序,将片外2000H为首址的连续10个单元的内容,读入到片内部40H到49H单元中。解:程序设计思路——采用指针的方法。选用指针px,px指向char型数据位于xdata,赋值px=2000H

选用指针px1,px1指向char型数据位于data,赋值px1=40H

在for循环中,*px1=*px;

并且当i++时,px++,px1++,。采用数组的方法。xdata

ucharbuf1[10]_at_0x2000dataucharbuf2[10]_at_0x40;在for循环中,buf2[i]=buf1[i]C第3章习题采用指针的方法参考程序如下:#defineucharunsignedcharvoidmain()

//主函数

{

datauchari;

ucharxdata*px; //指针px,指向char型数据位于xdata

uchardata*px1; //指针px1,指向char型数据位于data px=0x2000; px1=0x40; for(i=0;i<10;i++,px++,px1++) *px1=*px;

while(1);

}C第3章习题采用数组的方法参考程序如下:#defineucharunsignedcharxdata

ucharbuf1[10]_at_0x2000; //位于xdata数组buf1[0]地址2000Hdataucharbuf2[10]_at_0x40; //位于data数组buf2[0]地址40Hvoidmain()

//主函数

{

datauchari;

for(i=0;i<10;i++)

buf2[i]=buf1[i];

while(1);

}C第3章习题5*.do-while构成的循环与do-while循环的区别是什么?答:主要区别是:

while循环的控制出现在循环体之前,只有当while后面表达式的值非0时,才可能执行循环体,因此有可能一次都不执行循环体;在do-while构成的循环中,总是先执行一次循环体,然后再判断表达式的值,因此无论如何,循环体至少要被执行一次。C第3章习题4.3*.用单片机设计一个节日彩灯控制器,P0口接有8个LED作指示灯,P1.0~P1.3接有4个按键开关,实现如下功能。按下P1.0键—全亮后全灭,交替闪烁;按下P1.1键—8只LED全灭;按下P1.2键—8只LED由上向下流动点亮;按下P1.3键—8只LED由下向上流动点亮;解:程序设计思路(1).只有一个键按下才有效,几个键同时按下视为无效,根据按下键的键值进行不同的处理。(2).采用软件延时,实现交替闪烁和流动点亮。P0.0P0.1P0.2P0.3P0.4P0.5P0.6P0.7P1.0P1.1P1.2P1.3+5VAT89C510EH0DH0BH07H0111101111011110C第3章习题参考程序如下:#include<reg51.h>#defineuintunsignedint#defineucharunsignedcharvoiddelay(

j

) //延时函数datauintj;{datauinti;while(j--)for(i=0;i<250;i++);}C第3章习题voidmain() //主函数{datauchara;

while(1) //不断循环

{

a=0; //保证同亮或同灭,交替闪烁

while((P1&0x0f)==0x0e) //P1.0按下处理

{a=~a; //全亮后全灭,交替闪烁

P0=a;

delay(2250); //调用延时函数,交替闪烁延时

}

P0=0xff; //全灭

while((P1&0x0f)==0x0d); //P1.1按下不作处理C第3章习题

a=1; //保证只有一个点亮

while((P1&0x0f)==0x0b) //P1.2按下处理

{a=a<<1; //左移一位

if(a==0)a=1; //全0

P0=~a; //低电平点亮

delay(2250);

} //流动点亮延时

while((P1&0x0f)==0x07) //P1.3按下处理

{a=a>>1; //右移一位

if(a==0)a=128; //若全0,则10000000

P0=~a; //低电平点亮

delay(2250);} //流动点亮延时

}}第5章习题2*.若(IP)=00010100B,则优先级最高者为

,最低者为

。解:00010100同级查询优先高低外部中断1定时器T1第5章习题8*.下列说法正确的是

。A.同一级别的中断请求按时间的先后顺序响应B.同一时间同一级别的多中断请求将形成阻塞,系统无法响应C.低优先级中断请求不能中断高优先级中断请求,但是高优先级中断请求能中断低优先级中断请求D.同级中断不能嵌套A、C、D第5章习题13*.某系统有3个外部中断源1、2、3,当某一中断源发出的中断请求使引脚变为低电平时(见图5-10),便要求CPU进行处理,它们的优先处理次序由高到低为3、2、1,中断处理程序的入口地址分别为1000H、1100H、1200H。试编写主程序及中断服务子程序(转至相应的中断处理程序的入口即可)。第5章习题参考程序如下:

ORG 0000H LJMP MAIN ORG 0013H LJMP INT_EX1 ORG 0030HMAIN: CLR IT1 ;采用电平触发,低电平有效中断

SETB EX1 ;允许外部中断1 SETB EA WAIT: LJMP WAIT ;用原地跳转代替一段用户程序第5章习题;以下为外部中断1服务子程序INT_EX1:JBP1.2,INT_IR3;是3号中断,转到对应中断处理程序

JBP1.1,INT_IR2;是2号中断,转到对应中断处理程序

JBP1.0,INT_IR1;是1号中断,转到对应中断处理程序

ORG1000HINT_IR3:插入相应中断处理程序

RETI ORG1100HINT_IR2:插入相应中断处理程序

RETI ORG1200HINT_IR1:插入相应中断处理程序

RETI第5章习题;以下为外部中断1服务子程序INT_EX1:JNBP1.2,NEXT1 ;P1.2=0,非3号中断,跳转NEXT1 LJMPINT_IR3 ;是3号中断,转到对应中断处理程序NEXT1:JNBP1.1,NEXT2 ;P1.1=0,非2号中断,跳转NEXT2 LJMPINT_IR2 NEXT2:LJMPINT_IR1 ORG1000HINT_IR3:插入相应中断处理程序

ORG1100HINT_IR2:插入相应中断处理程序

ORG1200HINT_IR1:插入相应中断处理程序第5章习题1.外部中断1的中断入口地址为

。定时器1的中断入口地址为

。11.编写外部中断1为跳沿触发的中断初始化程序段。解: SETB IT1 ;外部中断1为跳沿触发

SETB EX1 ;允许外部中断1中断

SETB EA ;CPU开中断0013H001BH第5章习题6.中断查询确认后,在下列各种AT89C51单片机运行情况下,能立即进行响应的是

。A.当前正在进行高优先级中断处理B.当前正在执行RETI指令C.当前指令是DIV指令,且正处于取指令的机器周期D.当前指令是MOVA,R3D第6章习题3*.定时器/计数器用作定时器模式时,其计数脉冲由谁提供?定时时间与哪些因素有关?答:定时器/计数器用作定时器时,其计数脉冲由系统振荡器产生的内部时钟信号12分频后提供。定时时间与时钟频率和定时初值有关。外部脉冲初值越大,定时越短。第6章习题7*.已知系统采用6MHz晶振,编写程序,要求使用T0采用方式2定时,①.使P1.0输出周期为80µs的方波脉冲。②.使P1.0输出周期为400µs,占空比为10%的矩形脉冲(高电平40µs,低电平360µs)。第6章习题7.①.使P1.0输出周期为80µs的方波脉冲。80us40us40us解①:T0定时40us,每40us产生一次中断,在中断服务程序中对P1.0取反。①P1.040us计算T0定时40µs初值x特殊功能寄存器设置00000010TMOD:02H方式2定时第6章习题

ORG 0000H LJMP MAIN ORG 000BH CPL P1.0 RETI ORG 0030HMAIN: MOV TMOD,#02H ;定时器/计数器T0为定时方式2 MOV TL0,#236 ;定时40us初值赋值

MOV TH0,#236 ;定时40us初值赋值

SETB TR0 ;启动T0,开始计数

SETB ET0 ;允许T0中断

SETB EA ;CPU开中断WAIT: SJMP WAIT ;无事可做7题①.参考程序——中断方式第6章习题

ORG 0000H LJMP MAIN ORG 0030HMAIN: MOV TMOD,#02H ;定时器/计数器T0为定时方式2 MOV TL0,#236 ;定时40us初值赋值

MOV TH0,#236 ;定时40us初值赋值

SETB TR0 ;启动T0,开始计数LOOP: JNB TF0,LOOP ;时间未到,等待

CPL P1.0 ;时间到,取反

CLR TF0 ;清时间到标志

SJMP LOOP7题①.参考程序——查询方式第6章习题7.②.使P1.0输出高电平40µs,低电平360µs的矩形脉冲。解②:方法1设计思想仍然定时40µs中断,先输出“0”,采用R7计数,主程序中初始R7=0。中断程序中:R7+1→R7,判断:R7<9,不管;R7=9,输出“1”;R7>9,输出“0”,并使R7=0。123456789100R7=0P1.012360µs40µs第6章习题

ORG 0000H LJMP MAIN ORG 000BH LJMP IT0P ORG 0030HMAIN: MOV TMOD,#02H ;T0为定时方式2 MOV TL0,#236 ;定时40us初值赋值

MOV TH0,#236 ;定时40us初值赋值

SETB TR0 ;启动T0,开始计数

SETB ET0 ;允许T0中断

SETB EA ;CPU开中断

MOV R7,#0 ;R7=0 CLR P1.0 ;先输出“0”WAIT: SJMP WAIT7题②.方法1参考程序第6章习题IT0P: INC R7 ;R7+1→R7 CJNE R7,#9,NEXT SETB P1.0 ;R7=9,P1.0=1 RETINEXT: JC EXIT ;R7≠9处理,R7<9,不管

CLR P1.0 ;R7>9,

P1.0=0 MOV R7,#0 ;R7=0EXIT: RETI中断程序中:R7+1→R7,判断:R7<9,不管;R7=9,输出“1”;R7>9,输出“0”,并使R7=0。7题②.方法1参考程序第6章习题987654320910R7=10P1.087360µs7.②.使P1.0输出高电平40µs,低电平360µs的矩形脉冲。解②:方法2设计思想仍定时40µs中断,先输出“1”。用R7(j)计数,主程序中初始R7(j)=10。中断程序中:R7(j)-1→R7(j),判断:R7(j)≠0,输出0;R7(j)=0,输出“1”;并使R7(j)=10。1第6章习题#include<reg51.h>#defineucharunsignedcharsbitP1_0=P1^0;voidmain() //主函数dataucharj=10; //全局变量j{

TMOD=02; //T0为定时方式2TL0=236; //定时40us初值赋值

TH0=236; //定时40us初值赋值

TR0=1; //启动T0,开始计数

ET0=1; //允许T0中断

EA=1; //CPU开中断

P1_0=1; //先输出“1”while(1);}7题②.方法2参考程序第6章习题voidT0_int(

)

intrruput1 //T0中断函数{j--;

if(j==0){P1_0=1;j=10;}

elseP1_0=0;}7题②.方法2参考程序仍定时40µs中断,采用R7(j)计数,主程序中初始R7(j)=10。中断程序中:R7(j)-1→R7(j),判断:R7(j)≠0,输出0;R7(j)=0,输出“1”;并使R7(j)=10。第6章习题7.②.使P1.0输出高电平40µs,低电平360µs的矩形脉冲。解②:方法3设计思想——此方法更通用,不需要两时间是整数倍计算40us定时初值:ECH,计算360us定时初值:4CHECH+4CH=38H,即ECH=38H-4CH,4CH=38H-ECH初始设置时,TL0=4CH,P1.0=0;TH0=ECH。中断后,会自动(TH0)→TL0,中断程序中:CPLP1.0;并且38H-(TH0)→TH0TL0TH0TL0=4CHP1.0360µs40µsTH0=ECHTL0=ECHTH0=4CHTL0=4CHTH0=ECH第6章习题

ORG 0000H LJMP MAIN ORG 000BH LJMP IT0P ORG 0030HMAIN: MOV TMOD,#02H ;T0为定时方式2 MOV TL0,#4CH ;定时360us初值赋值

MOV TH0,#ECH ;定时40us初值赋值

SETB TR0 ;启动T0,开始计数

SETB ET0 ;允许T0中断

SETB EA ;CPU开中断

CLR P1.0 ;先输出“0”WAIT: SJMP WAIT7题②.方法3参考程序第6章习题IT0P: CPL P1.0 MOV A,#38H CLR C SUBB A,TH0 MOV TH0,A RETIECH+4CH=38H,即ECH=38H-4CH,4CH=38H-ECH初始设置时,TL0=4CH,P1.0=0;TH0=ECH。中断后,会自动(TH0)→TL0,中断程序中:CPLP1.0;并且38H-(TH0)→TH07题②.方法3参考程序第6章习题作业中也有更好的方法,但有一些错误,以下是中断服务程序IT0P: DJNZR1,LOOP1 SETBP1.0 MOVR1,#09H LCALLLOOP2LOOP1:CLR P1.0 LOOP2:RETISJMP87654321089R1=9P1.076320µs#0AH987654320101R1=10P1.098360µs第6章习题另外一种方法,不需要低电平时间是高电平时间的整数倍,更通用。如产生如图矩形波。100us60us40us计算40us定时初值:ECH计算60us定时初值:E2HECH+E2H=CEH主程序中:MOV TL0,#0E2H ;60us初值MOV TH0,#0ECH ;40us初值CLR P1.0中断服务程序:CPL P1.0MOV A,#0CEHCLR CSUBB A,TH0MOV TH0,ARETITL0TH0第6章习题1.下列

项说法是正确的。A.特殊功能寄存器SCON,与定时器/计数器的控制无关B.特殊功能寄存器TCON,与定时器/计数器的控制无关C.特殊功能寄存器IE,与定时器/计数器的控制无关D.特殊功能寄存器TMOD,与定时器/计数器的控制无关A第6章习题6.定时器/计数器的工作方式2有什么特点?适用于哪些应用场合?答:定时器/计数器的工作方式2具有自动恢复初值的特点,适用于精确定时,如波特率的产生。第7章习题6*.在异步串行通信中,接收方是如何知道发送方开始发送数据的?答:当接收方检测到RXD引脚上的有效的负跳变时,即可知道发送方开始发送数据。8*.假定串行口串行发送的字符格式为1个起始位、8个数据位、1个奇校验位、1个停止位,请画出传送字符“B”(42H)的帧格式。解:字符“B”的ASCII码为42H=01000010B,帧格式如图所示。起始位010000101奇校验位停止位D0D1D2D3D4D5D6D712*.AT89C51串行口按方式3进行数据通信,假定波特率为2400bit/s,偶校验,以中断方式传送数据。编写发送和接收的通信程序。要求:发送方,将RAM单元20H~25H的内容发送,共6个字节,其中25H的数据是20H~24H异或的结果,即纵向冗余校验码;接收方,接收到6字节数据,经奇偶校验,且纵向冗余校验(6字节异或为0)正确后,数据放在RAM20H~24H单元。时钟振荡频率为11.0592MHz。采用T1作波特率发生器。第7章习题解:程序准备:波特率为2400b/s,SMOD=0,查表初值为F4H。第7章习题T1作波特率发生器,定时模式,方式200100000TMOD:20H串行口方式3,非多机通信方式1100/10000SCON:C0H/D0H中断允许设置,只允许串行口中断10010000IE:90H作业中有用E0H/F0H第7章习题发送程序设计思想题目要求:将20H~25H的内容发送,其中25H的数据是20H~24H异或的结果,即纵向冗余校验码;①.初始化设置:定时器/计数器工作方式,根据波特率设置时间初值;设置串行口工作方式3;允许串行口中断,CPU开中断。②.求纵向冗余码放入25H;③.发送第一字节,注意将偶校验位送TB8,等待全部发完,全部发完后关中断。④.中断服务程序,每进入一次发送一字节。第7章习题 ORG 0000H LJMP MAIN ORG 0023H

LJMP COM_INT ORG 1000HMAIN: MOV SP,#60H ;设置堆栈指针

MOV TMOD,#20H ;设置定时器/计数器工作方式

MOV TH1,#0F4H ;设置波特率为2400 MOV TL1,#0F4H SETB TR1 ;开定时器T1 MOV SCON,#0C0H ;设置串行口工作方式为方式3 MOV IE,#90H ;允许串行口中断

(1).甲机发送方的子程序波特率设置第7章习题TRAN: MOV R0,#20H ;要发送数据的单元的首地址

MOV A,#00H ;求纵向冗余码LOOP: XRL A,@R0 INC R0 CJNE R0,#25H,LOOP MOV @R0,A ;纵向冗余码放在发送最后单元

MOV R0,#20H ;要发送数据的单元的首地址

MOV A,@R0 MOV C,PSW.0 MOV TB8,C ;偶校验位送TB8 MOV SBUF,A ;发送第一字节

HERE: CJNE R0,#25H,HERE MOV IE,#00H ;关中断

······

第7章习题COM_INT: CLR TI INC R0 MOV A,@R0 MOV C,PSW.0 MOV TB8,C ;偶校验位送TB8 MOV SBUF,A ;发送第一字节

RETI第7章习题接收程序设计思想题目要求:接收到6字节数据,经奇偶校验,且纵向冗余校验(6字节异或为0)正确后,数据放在RAM20H~24H单元。①.初始化设置:定时器/计数器工作方式,根据波特率设置时间初值;设置串行口工作方式3;中断设置允许串行口中断,CPU开中断。②.判断是否有出错标志F0,有,出错处理;③.判断是否接收到6字节数据,若是,进行纵向冗余校验,正确,将30H~34H数据放在RAM20H~24H单元。出错,出错处理。②.中断服务程序,a.每进入一次接收一字节,b.进行奇偶校验正确后,放入临时单元30H~35H;第7章习题 ORG 0000H LJMP MAIN ORG 0023H

LJMP COM_INT ORG 1000HMAIN: MOV SP,#60H ;设置堆栈指针

MOV TMOD,#20H ;设置定时器/计数器工作方式

MOV TH1,#0F4H ;设置波特率为2400 MOV TL1,#0F4H SETB TR1 ;开定时器

MOV SCON,#0D0H ;设置串行口工作方式为方式3

MOV IE,#90H ;串行口中断允许,CPU开中断

MOV R0,#30H ;接收数据存放单元的首地址

CLR F0 ;清出错标志(2).乙机接收方的子程序波特率设置第7章习题HERE: JB F0,NEXT CJNE R0,#36H,HERE MOV IE,#00H ;关中断

MOV A,#0LOOP: DEC R0 XRL A,@R0 CJNE R0,#30H,LOOP JNZ NEXT ;接收6个字节异或≠0,出错

MOV R1,#20H ;接收正确,放入20H~24HLOOP1: MOV A,@R0 MOV @R1,A INC R0 INC R1 CJNE R0,#35H,LOOP1 ·······

(2).乙机接收方的子程序第7章习题COM_INT: CLR RI MOV A,SBUF ;读出接收数据

JB PSW.0,JSBW1 ;奇偶校验,P=1转

JB RB8,ERR ;P=0,RB8=1,出错

SJMP JSBW2JSBW1: JNB RB8,ERR ;P=1,RB8=0,出错JSBW2: MOV @R0,A INC R0 RETIERR: SETB F0 MOV IE,#00H ;关中断

RETI 第7章习题作业中的错误:CJNERB8,C,LOOP2MOVA,@R2在中断服务程序中,奇偶校验错,转移到中断服务程序中ERR标号处;在主程序中,纵向冗余校验错,也转移到中断服务程序中ERR标号处。没有这样的指令没有这样的指令第7章习题2.在串行通信中,收发双方对波特率的设定应该是

的。3.下列选项中,

是正确的。A.串行口通信的第9数据位的功能可由用户定义B.发送数据的第9数据位的内容是在SCON寄存器的TB8位中预先准备好的C.串行通信帧发送时,指令把TB8位的状态送入发送SBUF中D.串行通信接收到的第9位数据送SCON寄存器的RB8中保存E.串行口方式1的波特率是可变的,通过T1的溢出率设定A、B、D、E相等第8章习题10*.编写程序,将外部数据存储器中4000H~40FFH单元全部清“0”。解:本题主要考察对外部数据块的写操作;编程时只要注意循环次数和MOVX指令的使用就可以了。CLEAR0: MOV A,#0 ;0给A MOV R0,#00H ;设置循环次数

MOV DPTR,#4000H ;设置数据指针的初值LOOP: MOVX @DPTR,A ;当前单元清“0” INC DPTR ;指向下一个单元

DJNZ R0,LOOP ;是否结束

RET #0FFH,只有255次0000H~3FFFH4000H~7FFFH8000H~BFFFHC000H~FFFFH第8章习题12*.请写出图8-14中4片程序存储器27128各自所占的地址空间。A15A14A13A12A11A10A9A8A7A6A5A4A3A2A1A0

0

0

0/10/1

0/1

0/1

0/1

0/1

0/1

0/1

0/1

0/1

0/1

0/1

0/1

0/1

0

1

0/10/1

0/1

0/1

0/1

0/1

0/1

0/1

0/1

0/1

0/1

0/1

0/1

0/1

1

0

0/10/1

0/1

0/1

0/1

0/1

0/1

0/1

0/1

0/1

0/1

0/1

0/1

0/1

1

10/10/1

0/1

0/1

0/1

0/1

0/1

0/1

0/1

0/1

0/1

0/1

0/1

0/1

第8章习题13*.现有AT89C51单片机、74LS373锁存器、1片2764EPROM和两片6264RAM,请用它们组成一个单片机应用系统,要求如下:(1).画出硬件电路连线图,并标注主要引脚;(2).指出该应用系统程序存储器空间和数据存储器空间各自地址范围。解:由于没有译码器,只能采用线选法;若增加一个译码器74LS39,则可以采用译码法。第8章习题线选法设计的电路如图IC12764C000H~DFFFHIC26264A000H~BFFFHIC362646000H~7FFFH110A15

A14A13A12A11A10A9A8A7A6A5A4A3A2A1A01

10

0/1

0/1

0/1

0/1

0/1

0/1

0/1

0/1

0/1

0/1

0/1

0/1

0/1

1

01

0/1

0/1

0/1

0/1

0/1

0/1

0/1

0/1

0/1

0/1

0/1

0/1

0/1

0

11

0/1

0/1

0/1

0/1

0/1

0/1

0/1

0/1

0/1

0/1

0/1

0/1

0/1

101011123第8章习题译码法设计的电路如图IC127640000H~1FFFHIC262642000H~3FFFHIC362644000H~5FFFH123000A15

A14A13A12A11A10A9A8A7A6A5A4A3A2A1A0

0

000/10/1

0/1

0/1

0/1

0/1

0/1

0/1

0/1

0/1

0/1

0/1

0/1

0

010/10/1

0/1

0/1

0/1

0/1

0/1

0/1

0/1

0/1

0/1

0/1

0/1

0

10

0/10/1

0/1

0/1

0/1

0/1

0/1

0/1

0/1

0/1

0/1

0/1

0/1

001010第8章习题2.假设外部数据存储器2000H单元的内容为80H,执行下列指令后累加器A中的内容为

。MOVP2,#20HMOVR0,#00HMOVXA,@R03.在存储器扩展中,无论是线选法还是译码法最终都是为扩展芯片的片选端提供

控制信号。4.起止范围为0000H~3FFFH的存储器的容量是

KB。解:存储器的容量=4000H=214=24×210=16×210=16KB80H片选16;提供高位地址;提供低位地址第8章习题8.区分AT89C51单片机片外程序存储器和片外数据存储器的最可靠方法是

。A.看其位于地址范围的低端还是高端B.看其离AT89C51单片机芯片的远近C.看其芯片的型号是ROM还是RAMD.看其是与RD信号连接还是与PSEN信号连接D第9章习题4*.常用的I/O端口编址有哪两种方式?它们各有什么特点?AT89C51单片机的I/O端口编址采用的是哪种方式?答:有两种。(1).独立编址方式。就是I/O地址空间和存储器地址空间分开编址。其优点是,I/O地址空间和存储器地址空间相互独立,界限分明。但是,却需要设置一套专门的读/写I/O的指令和控制信号。(2).统一编址方式。它是把I/O端口的寄存器与数据存储器单元同等对待,统一编址。统一编址的优点是不需要专门的I/O指令,直接使用访问数据存储器的指令进行I/O操作,简单、方便且功能强大。AT89C51单片机使用的是I/O和外部数据存储器RAM统一编址的方式。第9章习题6*.编写程序,采用82C55的PC口按位置位/复位控制字,将PC7置“0”,PC4置“1”(已知82C55各端口的地址为7FFCH~7FFFH)。解:按位置位/复位控制字是对控制寄存器操作,控制字最高位为0,低4位选择PC的位与置1或清0。控制寄存器地址7FFFH。SEPC: MOV DPTR,#7FFFH ;控制字寄存器地址送DPTR MOV A,#0EH ;将PC7置0——00001110 MOVX @DPTR,A MOV A,#09H ;将PC4置1——00001001 MOVX @DPTR,A RETA1A000A口 7FFCH01 B口 7FFDH10 C口 7FFEH11 控制口 7FFFH第9章习题11.设81C55TIMERIN引脚输入脉冲频率1MHz,要在81C55的TIMEROUT引脚上输出周期为0.1ms方波,试编写程序(I/O口地址为7F00H~7F05H)。解:(1).初值计算:输出方波周期为0.1ms,其频率为10kHz,将频率1MHz的脉冲100分频就是频率10kHz的方波,所以将定时器初值设置为64H。(2).地址分析64H40H01(3).寄存器设置M2M1=01定时器输出方波A2A1A0000 控制口7F00H001 A口 7F01H010 B口 7F02H011 C口7F03H011 TL7F04H011 TH7F05H(4).控制字D7D6组合用来设置计数器的操作。11启动计数器。C0H第9章习题参考程序START:MOV DPTR,#7F04H ;指针指向计数器低8位

MOV A,#64H ;送初值给A MOVX@DPTR,A ;初值送给计数器低8位

INC DPTR ;指向计数器高8位

MOV A,#40H ;计数器方波输出

MOVX@DPTR,A MOV DPTR,#7F00H ;指向命令/状态口

MOV A,#0C0H ;设定控制字

MOVX@DPTR,A ;启动计数器

END作业中2710H?第9章习题5.82C55的“方式控制字”和“PC口按位置位/复位控制字”都可以写入82C55的同一控制寄存器,82C55是如何来区分这两个控制字的?答:82C55通过写入控制字寄存器的控制字最高位来判断,最高位为1时,为方式控制字;最高位为0时,为PC口按位置位/复位控制字。第9章习题10.假设81C55的TIMERIN引脚输入的频率为4MHz,问81C55的最大定时时间是多少?解:81C55计数器的最大计数值为214,即初值为00H时,有最大计数值。计数一次的时间为一个周期的时间:最大定时时间==0.004096s答:当频率为4MHz时,81C55计数器最大定时时间为0.004096s。第10章习题3*.LED静态显示方式与动态显示方式有何区别?各有什么优缺点?静态显示时,数据是分开送到每一位LED上。静态显示亮度很高,但口线占用较多。动态显示时,数据同时送到每一个LED上,由位选线来确定是哪一位显示。口线占用较少,适合用在显示位数较多的场合。第10章习题6*.对于图10-10所示的键盘,采用线反转法原理编写出识别某一按键被按下并得到其键号的程序。解:程序设计思想①.线反转法读取按键特征码:先对P1口高4位送低电平,读取P1口低4位的值;再对P1口低4位送低电平,读取P1口高4位的值,将两次读到的值组合在一起(相或

)就得到了按键的特征码。②.根据按键特征码查找键值:将键0、键1、······键15的特征码依次放在程序存储区标号KEYCOD为首的区域。得到了按键的特征码后,依次与标号KEYCOD为首的区域的特征码比较,用R3作顺序计数,第0次比较相等,则是键0按下,R3=0,······第n次比较相等,则是键n按下,R3=n,16个特征码比较完后,无相等,认为按键无效。①.线反转法思想第1步:列线输出,行线输入列线输出为全低电平,则检测=0的行线,为按键所在行。第2步:行线输出,列线输入行线输出为全低电平,则检测=0的列线,为按键所在列。结合上述两步,可确定按键所在行和列。由此得到键3的特征码EEH键0:E7H,键1:EBH,键8:B7H,键13:7BH,1步:输出P1=F0H,输入P1=E0H;确定按下键在行1;2步:输出P1=0FH,输入P1=0EH;确定按下键在列4;000011110111000001111111第10章习题第10章习题②.根据按键特征码查找键值:将键0、键1、······键15的特征码依次放在程序存储区标号KEYCOD为首的区域。得到了按键的特征码后,依次与标号KEYCOD为首的区域的特征码比较,用R3作顺序计数,第0次比较相等,则是键0按下,R3=0,······第n次比较相等,则是键n按下,R3=n,16个特征码比较完后,无相等,认为按键无效。特征码表如下键0键1键2键3键4键5键6KEYCOD:DB0E7H,0EBH,0EDH,0EEH,0D7H,0DBH,0DDH······若(A)=EDH,开始R3=FFH第0次,R3+1,R3=0,(A)与E7H比较,相等R3=0是键值,不等继续第1次,R3+1,R3=1,(A)与EBH比较,相等R3=1是键值,不等继续第2次,R3+1,R3=2,(A)与EDH比较,相等R3=2是键值。第10章习题KEYIN: MOV P1,#0F0H ;列输出0 MOV A,P1 ;反转读键

ANL A,#0F0H MOV B,A ;行值保存在B寄存器

MOV P1,#0FH ;行输出0 MOV A,P1 ;反转读键

ANL A,#0FH ORL A,B ;得到特征码 CJNE A,#0FFH,KEYIN1 RET ;=FFH,未按键KEYIN1: MOV B,A ;特征码暂存B

MOV DPTR,#KEYCOD ;指向特征码表第10章习题

MOV R3,#0FFH ;顺序码初始化,-1开始KEYIN2: INC R3 MOV A,R3 MOVC A,@A+DPTR CJNE A,B,KEYIN3

MOV A,R3 ;找到,取顺序码

RETKEYIN3: CJNE R3,#0FH,KEYIN2 ;未完,再查

RET ;未找到,以未按键处理KEYCOD: DB 0E7H,0EBH,0EDH,0EEH ;特征码表

DB 0D7H,0DBH,0DDH,0DEH DB 0B7H,0BBH,0BDH,0BEH DB 77H,7BH,7DH,7EH第10章习题10.如果把图10-25所示的打印机的BUSY线断开,然后与AT89C51单片机的INT0线相接,请简述电路的工作原理并编写将以20H为起始地址的连续20个内存单元中的内容输出的打印程序。INT0地址:A:7CHB:7DHC:7EH控:7FH08255设置方式0输出:80H第10章习题解:本程序采用外部中断来完成数据打印,先打印一个数据,当BUSY线从高电平变成低电平时,再打印下一个数据。参考程序如下:

ORG 0000H LJMP MAIN ORG 0003H LJMP INORG 0030HMAIN: SETB EX0 ;允许外部中断

SETB IT0 ;下降沿中断

SETB EA ;CPU开中断

MOV R0,#7FH ;控制口地址

MOV A,#81H ;控制字:10000000,方式0输出

MOVX @R0,A第10章习题

MOV R1,#20H ;数据区首地址

MOV R2,#19 ;计数器:中断中输出19字节数据打印

MOV A,@R1 ;打印内容第1字节数据

MOV R0,#7CH ;A口地址

MOVX @R0,A ;打印第1字节数据

MOV R0,#7FH ;控制口地址

MOV A,#0EH ;按位置位/复位控制字:00001110 MOVX @R0,A ;PC7=0 MOV A,#0FH ;按位置位/复位控制字:00001111 MOVX @R0,A ;PC7=1 SJMP $PC7第10章习题IN: DJNZ R2,EX ;20个数据都结束了吗?

INC R1 ;指向下一个数据

MOV A,@R1 MOV R0,#7CH ;A口地址

MOVX @R0,A ;打印该字节数据

MOV R0,#7FH ;控制口地址

MOV A,#0EH ;按位置位/复位控制字:00001110 MOVX @R0,A ;PC7=0 MOV A,#0FH ;按位置位/复位控制字:00001111 MOVX @R0,A ;PC7=1EX: RETI第10章习题1.下列

项说法正确。A.HD7279是一个用于键盘和LED显示器的专用接口芯片B.在单片机与微型打印机的接口中,打印机的BUSY信号可作为查询信号或中断请求信号使用C.为给扫描法工作的8×8键盘提供接口电路,在接口电路中只需要提供两个输入口和一个输出口D.LED显示器的字型码是固定不变的A、B第10章习题5.说明矩阵式键盘按键按下的识别原理。答:按键设置在行、列线交点上,行、列线分别连接到按键开关的两端。行线通过上拉电阻接到+5V上,无按键按下时,行线处于高电平状态,而当有按键按下时,行线电平状态将由与此行线相连的列线的电平决定。列线的电平如果为低,则行线电平为低;列线的电平如果为高,则行线的电平亦为高。将行、列线信号配合起来并做适当的处理,才能确定闭合键的位置。第11章习题3*.判断下列说法是否正确。(1).“转换速度”这一指标仅适用于A/D转换器,D/A转换器不用考虑“转换速度”问题。(2).ADC0809可以利用“转换结束”信号EOC向AT89C51单片机发出中断请求。(3).输出模拟量的最小变化量称为A/D转换器的分辨率。(4).对于周期性的干扰电压,可使用双积分型A/D转换器,并选择合适的积分元件,可以将该周期性的干扰电压带来的转换误差消除。第11章习题9*.在一个由AT89C51单片机与一片ADC0809组成的数据采集系统中,ADC0809的8个输入通道的地址为7FF8H~7FFFH,试画出有关接口的电路图,并编写每隔1分钟轮流采集一次8个通道数据的程序,共采样50次,其采样值存入片外RAM中以2000H单元开始的存储区中。解:接口电路如图。通道地址A15=0A14~A3可任意,取1A2A1A0选择通道通道0地址:7FF8H通道1地址:7FF9H·······通道7地址:7FFFH第11章习题9.ADC0809的8个输入通道地址为7FF8H~7FFFH,并编写每隔1分钟轮流采集一次8个通道数据的程序,共采样50次,其采样值存入片外RAM中以2000H单元开始的存储区中。设计思想:AT89C51指令系统中,只有一个16位指针DPTR,在每次循环过程中,既要用DPTR指示不同的通道,又要用DPTR指示不同的存储单元,而不能用R1=2000H作指针——

温馨提示

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

评论

0/150

提交评论