文档库 最新最全的文档下载
当前位置:文档库 › 单片机练习题参考答案

单片机练习题参考答案

单片机练习题参考答案
单片机练习题参考答案

单片机练习题参考答案

一、填空题

1.CPU、存储器、I/O口。

2.MOV 、 MOVX 、 MOVC

3.64K 、 64K

4.全“ 1 ”

5.上拉电阻

6.外部中断 0 、外部中断 1 、定时器 0 溢出中断、定时器 1 溢出中断、串

行口中断

7.RETI 、 RET

8.模式设定,定时

9.( A ) =76H , CY=0 , AC=0 , OV=1 , P=1

10.软件消抖动、硬件消抖动

11.独立式、行列式

12.共阴、共阳、静态显示、动态显示

13.00H~07H 、 08H~0FH 、 10H~17H 、 18H~1FH 、 0 、 1

14.低 8 位地址 / 数据复用总线、高 8 位地址总线

15.外部中断 0 、外部中断 1 、定时器 0 溢出中断、定时器 1 溢出中断、串

行口中断、 IE 、低

16.13、–128~+127B 、 2KB 、 64KB

17.复位控制、地址锁存控制、片外取指控制、片外程序存储器选择控制

18.FOSC/12,SCON,TB8

19.00~7FH,20~2FH,00~7FH,64KB

20.49,58H

21.3,256

22.00,07H,高(或“1”)

23.0

24.PSEN

25.ALE,P0口

26.2FFF

27.12,2μs

28.28H;88H。

29.50H;88H。

30.04H;00H;0。

31.PC;PC。

32.A,PC,DPTR。、

33.操作码,操作数,操作码。

34.1031H。

35.程序,数据。

36.地址。

37.00H, 0AAH。

38. (DPH)=3CH,(DPL)=5FH,(SP)=50H。

39.(SP)=62H,(61H)=30H,(62H)=70H。

40.0013H;001BH。

41.外部中断1;定时器T1。

42.PC、PC、程序存储器。

43.1。

44.相等。

45.片选。

46.16KB

47.程序,数据。

48.2KB,14。

49.0FFFH。

50.同步。

二、选择题

1. ③

2. ②

3. ①

4. ③

5. ③

6. ②

7. ②

8. ①

9. ②10. ②11. ① 12. ④ 13. ③14. ①15. ①16.②17. ②18. ③19. ③ 20. ③21. ① 22. ① 23. ②24. ②25. ②26.②27. ③28. ②29. ③30. ②31. ④ 32. ② 33. ①34. ④35.①36. ③37. ②38. ④39. ④40. ①41. ②42. ③43. ③44. ④45. ③

1.答:(A)=50H,(SP)=50H,(51H)=30H,(52H)=50H,(PC)=5030H。

2.答:(A)=0CBH。

3.答:A=80H,SP=40H,(51H)=50H,(52H)=80H ,PC=8050H。

4.答:(A )=ACH ,(SP )=60H

5.答:(32H )=24H ,(33H )=01H

程序功能是将30H 和31H 两单元的无符号数相加,结果存于32H 单元,进位存于33H 单元。

6.答:(A)=0CBH,(R0)=17H,(17H)=37H

7.答:(A)=1AH,(10H)=5FH,(2EH)=3DH,(40H)=2EH,(60H)=3DH。

8.答:3.(CY)=1,(AC)=1,(P)=0,(ACC)=00H,(R7)=0FFH。

四、设计编程题

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

MOV A,45H

ANL A,#0FH

ORL A,#0FH

MOV 45H,A

2.试编写程序,查找在内部RAM的30H~50H单元中是否有0AAH这一数据。若有,则将51H单元置为“01H”;若未找到,则将51H单元置为“00H”。

答:参考程序如下:

START: MOV R0,#30H

MOV R2,#20H

LOOP: MOV A,@R0

CJNE A,#0AAH,NEXT

MOV 51H,#01H

LJMP EXIT

NEXT: INC R0

DJNZ R2,LOOP

MOV 51H,#00H

EXIT: RET

3.试编写程序,查找在内部RAM的20H~40H单元中出现“00H”这一数据的次数,并将查找到的结果存入41H单元。

答:参考程序如下:

START: MOV 41H,#0

MOV R0,#20H

MOV R2,#20H

LOOP: MOV A,@R0

JNZ NEXT

INC 41H

NEXT: INC R0

DJNZ R2,LOOP

RET

4.在内部RAM的21H单元开始存有一组单字节无符号数,数据长度为20H,编写程序,要求找出最大数存入MAX单元。

5.某系统有3个外部中断源1、2、3,当某一中断源发出的中断请求使INT1引脚变为低电平时(见图5-10),便要求CPU进行处理,它们的优先处理次序由高到低为3、2、1,中断处理程序的入口地址分别为1000H、1100H、1200H。试编写主程序及中断服务子程序(转至相应的中断处理程序的入口即可)。

答:参见电路如图5-10所示,参考程序如下:

ORG 0000H

LJMP MAIN

ORG 0013H

LJMP INT_EX1

ORG 0030H

MAIN: CLR IT0 ;采用电平触发,低电平有效中断

SETB EX1 ;允许外部中断1

SETB EA

WAIT: LJMP WAIT ;用原地跳转代替一段用户程序

;以下为外部中断1服务子程序

INT_EX1: JNB P1.2,NEXT1 ;P1.2=0,不是3号中断,跳转NEXT1

LJMP INT_IR3 ;是3号中断,跳转到对应的中断处理程序NEXT1: JNB P1.1,NEXT2 ;P1.1=0,不是2号中断,跳转NEXT2

LJMP INT_IR2 ;跳转到2号中断处理程序

NEXT2: LJMP INT_IR1 ;跳转到1号中断处理程序

ORG 1000H

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

RETI ;中断返回

ORG 1100H

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

RETI ;中断返回

ORG 1200H

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

RETI ;中断返回

6.编写一段程序,功能要求:当P1.0引脚的电平正跳变时,对P1.1的输入脉冲进行计数;当P1.2引脚的电平负跳变时,停止计数,并将计数值写入R0、R1(高位存R1,低位存R0)。

答:将P1.1的输入脉冲接入INT0,即使用T0计数器完成对P1.1口的脉冲计数。参考程序如下:

ORG 0000H

LJMP MAIN

ORG 000BH

LJMP IT0P

MAIN: JNB P1.0,MAIN

MOV TMOD,#05H ;定时器/计数器T0为计数方式1

SETB TR0 ;启动T0,开始计数

SETB ET0 ;允许T0中断

SETB EA ;CPU开中断

WAIT: JB P1.2,WAIT

CLR EA

CLR TR0

MOV R1,TH0

MOV R0,TL0

AJMP $

IT0P: INC R2

RETI

7.试编写一个程序(如将05H和06H拼为56H),设原始数据放在片外数据区2001H单元和2002H单元中,按顺序拼装后的单字节数放入2002H。

答:本题主要考察对外部存储器的读、写操作的编程,只要正确使用MOVX指令就可以了。编程思路:首先读取2001H的值,保存在寄存器A中,将寄存器A的高4位和低4位互换,再屏蔽掉低4位然后将寄存器A的值保存到30H中,然后再读取2002H的值,保存在寄存器A中,屏蔽掉高4位,然后将寄存器A 的值与30H进行“或运算”,将运算后的结果保存在2002H中。

ORG 0000H

MAIN: MOV DPTR,#2001H ;设置数据指针的初值

MOVX A,@DPTR ;读取2001H的值

SWAP A

ANL A,#0F0H ;屏蔽掉低4位

MOV 30H,A ;保存A

INC DPTR ;指针指向下一个片外RAM单元

MOVX A,@DPTR ;读取2002H的值

ANL A,#0FH ;屏蔽掉高4位

ORL A,30H ;进行拼装

MOVX @DPTR,A ;保存到2002H片外RAM单元

END

8.编写程序,将外部数据存储器中的4000H~40FFH单元全部清“0”。

答:本题主要考察对外部数据块的写操作;编程时只要注意循环次数和MOVX 指令的使用就可以了。

ORG 0000H

MAIN: MOV A,#0 ;0给A

MOV 0,#0FFH ;设置循环次数

MOV DPTR,#4000H ;设置数据指针的初值

LOOP: MOVX @DPTR,A ;当前单元清“0”

INC DPTR ;指向下一个单元

DJNZ R0,LOOP ;是否结束

END

9.现有AT89C51单片机、74LS373锁存器、1片2764 EPROM和两片6264 RAM,请用它们组成一个单片机应用系统,要求如下:

(1)画出硬件电路连线图,并标注主要引脚;

(2)指出该应用系统程序存储器空间和数据存储器空间各自的地址范围。

10.假设81C55的TIMERIN引脚输入的脉冲频率为1MHz,请编写在81C55的TIMEROUT引脚上输出周期为10ms的方波的程序(假设I/O口地址为7F00H~7F05H)。

答:将1MHz的脉冲改变为10ms的方波,实际上就是分频。分频前后频率之比为100∶1,这样只要将定时器初值设置为64H就可以了(假设I/O口地址为7F00H~7F05H)。

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,#0C2H ;设定控制字

MOVX @DPTR,A ;启动计数器

END

11.对于图10-10所示的键盘,采用线反转法原理编写出识别某一按键被按下并得到其键号的程序。

答:先对P1口高4位送低电平,读取P1口低4位的值;再对P1口低4位送低电平,读取P1口高4位的值,将两次读到的值组合在一起就得到了按键的特征码,再根据特征码查找键值。参考程序如下:

KEYIN: MOV P1,#0FH ;反转读键

MOV A,P1

ANL A,#0FH

MOV B,A

MOV P1,#0F0H

MOV A,P1

ANL A,#0F0H

ORL A,B

CJNE A,#0FFH,KEYIN1

RET ;未按键

KEYIN1: MOV B,A ;暂存特征码

MOV DPTR,#KEYCOD ;指向特征码表

MOV R3,#0FFH ;顺序码初始化

KEYIN2: INC R3

MOV A,R3

MOVC A,@A+DPTR

CJNE A,B,KEYIN3

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

RET

KEYIN3: CJNE A,#0FFH,KEYIN2 ;未完,再查

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

DB 0D7H,0DBH,0DDH,0DEH

DB 0B7H,0BBH,0BDH,0BEH

DB 77H,7BH,7DH,7EH

12.在一个由AT89C51单片机与一片ADC0809组成的数据采集系统中,ADC0809的8个输入通道的地址为7FF8H~7FFFH,试画出有关接口的电路图,并编写每隔1分钟轮流采集一次8个通道数据的程序,共采样50次,其采样值存入片外RAM中以2000H单元开始的存储区中。

答:接口电路可参见图11-17。参考程序如下:

MAIN: MOV R0,#20H

MOV R1,#00H

MOV R2,#00H

MOV R3,#50

MOV R8,#08H

LOOP: MOV DPTR,#7FF8H

LOOP1: MOVX @DPTR,A

MOV R6,#0AH

DELAY: NOP

NOP

NOP

DJNZ R6,DELAY

MOVX A,@DPTR

INC DPTR

MOV R2,DPL

MOV DPH,R0

MOV DPL,R1

MOVX @DPTR,A

INC DPTR

MOV R0,DPH

MOV R1,DPL

MOV DPH,#7FH

MOV DPL,R2

DJNZ R7,LOOP1

LCALL DELAY1M ;延时1分钟

DJNZ R3,LOOP

…………………

13.如图所示的电路,要求开机时灯灭,按一下按钮,灯D1亮,延时10秒后自动熄灭,若在灯亮期间再按一下按钮,则灯立即熄灭。试编写实现上述功能的完整程序。

参考程序如下:

LED BIT P1.0

KEY BIT P3.2

ORG 0

LJMP MAIN

ORG 000BH

LJMP INTT0

ORG 0100H

MAIN:

SETB LED

MOV R2,#200

MOV TMOD,#01

MOV TH0,#50H

MOV TL0,#50H

LOOP: JB KEY,LOOP

CLR LED

SETB TR0

SETB EA

SETB ET0

JNB KEY,$

NOP

JB KEY,$

CLR LED

CLR TR0

CLR EA

JNB KEY,$

LJMP LOOP

INTT0: MOV TH0,#50H

MOV TL0,#50H

DJNZ R2 ,STOP

CLR LED

CLR TR0

CLR EA

CLR ET0

MOV R2,#200

STOP: RETI

END

14.如图所示电路,要求完成实现按钮按压次数的计数及显示,按一次按钮,计数值加1(要求按十进制累加),计数及显示范围是:0~99,超过99则自动归零。请设计实现该功能的完整程序。要求对按钮的检测用中断实现,数码显示用动态扫描(数码管为共阴数码管)。

相关文档