《2022年单片机考试常见试题程序分析题.pdf》由会员分享,可在线阅读,更多相关《2022年单片机考试常见试题程序分析题.pdf(13页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、程序分析及编程1. 设 (A)=04H,(CY)=1, 写出下列各条指令的结果。RL A; (A)= 08HRR A; (A)= 02HRLC A; (A)= 09HRRC A; (A)= 82H2设(A)=7AH,(R0)=30H,(30H)=A5H,(CY)=1, 写 出 下列 各条指令的结果。 MOV A ,R0 (A)=30H (R0)=30H XCH A, R0 (A)=30H (R0)=30H XCHD A,R0 (A)=A5H (R0)=30H (30H)=30H ADD A,#30H (A)=D5H (CY)=1 ADDC A,30H (A)=06H (CY)=1 SUBB A
2、,#30H (A)=D5H (CY)=14. 已 知 程 序 执 行 前 有A=02H , SP=52H ,(51H ) =FFH ,(52H)=FFH。下述程序执行后:请问:A= ( ) ,SP= ( ) ,(51H )= ( ) , (52H )= ( ) ,PC= ( ) 。POP DPHPOP DPLMOV DPTR,#4000HRL AMOV B,AMOVC A,A+DPTRPUSH AMOV A,BINC AMOVC A,A+DPTRPUSH ARETORG 4000HDB 10H,80H,30H,50H,30H,50H答: (A)=50H , (SP )=50H , (51H)=
3、30H , (52H)=50H , (PC ) =5030H5. 假定 A=83H , (R0 )=17H ,(17H )=34H ,执行以下指令后, A的内容为() 。 :ANL A,#17HORL 17H,AXRL A,R0CPL A答:0CBH6.如 果DPTR=507BH ,SP=32H , (30H)=50H,(31H)=5FH , (32H)=3CH ,则执行下列指令精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 1 页,共 13 页 - - - - - - - - - - 后则: DPH=
4、( ) ,DPL=( ) ,SP= ( ) :POP DPHPOP DPLPOP SP答:DPH=3CH , DPL=5FH , SP=4FH7. 假定, SP=60H ,A=30H ,B=70H ,执行下列指令后,SP的内容为() ,61H单元的内容为() ,62H单元的内容为() 。PUSH APUSH B 答: 62H , 30H , 70H8. 计算下面子程序中指令的偏移量和程序执行的时间(晶振频率为 12MHz ) 。MOV R3,#15H ;1个机器周期DL1:MOV R4,#255 ;1个机器周期DL2:MOV P1,R3 ;2 个机器周期DJNZ R4,DL2 ;2个机器周期D
5、JNZ R3,DL1 ;2个机器周期RET ;2 个机器周期答:15348us 析: ( (22)25512)151215348us9. 假定 A=83H , (R0)=17H ,(17H )=34H ,执行以下指令后, A的内容为() 。ANL A,#17HORL 17H,AXRL A,R0CPL A 答:0CBH10. 如 果 (DPTR)=507BH ,(SP)=32H , (30H)=50H ,(31H)=5FH, (32H)=3CH,则执行下列指令后: DPH内容为() ,DPL 内容为() , SP内容为 () 。POP DPH;POP DPL;POP SP;答: (DPH)= 3
6、CH ,(DPL ) =5FH ,(SP )=50H11. 假 设外 部 数 据 存 储 器2000H单元的内容为80H ,执行下列指令后,累加器A中的内容为() 。MOV P2,#20HMOV R0,#00HMOVX A,R0答:累加器A 中的内容为(80H )精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 2 页,共 13 页 - - - - - - - - - - 12. 阅读下列程序段并回答问题 。(1). 该程序执行何种操作(2 ). 已知初值(60H )=23H , (61H )=61H ,运
7、行程序后 62H内容 CLR C MOV A ,#9AH SUBB A ,60H ADD A ,61H DA A MOV 62H ,A 答: 1 ) 、该程序是单字节BCD码运算,是将( 61H )( 60H )62H 2) 、 (62H )=38H13. 试编写 1 个程序,将内部 RAM 中 45H单元的高 4 位清 0,低 4 位置 1。答:MOV A, 45HANL A, #0FHORL A, #0FHMOV 45H, A14. 试编写程序,查找在内部RAM 的 30H 50H单元中是否有0AAH这一数据。若有,则将51H单元置为“ 01H ” ;若未找到,则将 51H单元置为“00H
8、 ” 。答:START: MOVR0,#30HMOVR2,#20HLOOP: MOV A,R0CJNEA,#0AAH,NEXTMOV51H,#01HLJMP EXITNEXT: INC R0DJNZR2,LOOPMOV51H,#00HEXIT: RET15. 编写程序,要求使用T0,采用方式 2 定时,在输出周期为 400s, 占空比为10:1 的矩形脉冲。解:根据题意,从输出的矩形脉冲的高低电平的时间为 10:1, 则高低电平的时间分别为 s 和s。 如果系统采用 6MHz晶振的话,sTcy2,因此高低电平输出取整,则约为364s 和36s。编写程序如下:ORG 0000HLJMP MAIN
9、ORG 000BHLJMP IT0P精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 3 页,共 13 页 - - - - - - - - - - MAIN:MOV TMOD,#02H ;定时器 / 计数器 T0为定时方式 2MOV TL0,#4AH ; 定时 364s 初值赋值SETB TR0 ; 启动 T0,开始计数SETB ET0 ;允许 T0 中断SETB EA ;CPU 开中断SETB WAIT: AJMP WAITIT0P: CLR EACLR ;关中断MOV R0,#9DLY: DJNZ R0
10、,DLY ;延时 26sMOV TL0,#4AH ; 定时 364s 初值赋值SETB SETB EARETI16. 设在外部 RAM 中有三个连续单元2001H,2002H ,2003H , 其中 2001H和 2002H单元中分别存放两个8位无符号二进制数, 比较这两个数的大小,然后将大数送到2003H单元。COMPARE:MOV DPTR, #2001HMOVX A , DPTRMOV R0,AINC DPTRMOVX A,DPTRSUBB A ,R0JNC LOOPMOV A, R0INC DPTRMOVX DPTR ,ARETLOOP:INC DPTRMOVX DPTR ,ARET
11、17.将内部 RAM 40H开始的 10 个单元,搬移到 50H开始的 10 个单元中。MOV R0,#40HMOV R1,#50HMOV R2, #10LOOP1:MOV A, R0MOV R1,AINC R0INC R1DJNZ R2 ,LOOP1RET18. 设单片机晶振频率为精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 4 页,共 13 页 - - - - - - - - - - 6MHz,使用定时器 0, 以工作方式 2,在引脚输出一个周期为 200us连续方波解: MOV TMOD,#02H
12、 MOV TH0, #0CEHMOV TL0 ,#0CEHSETB TR0LOOP: JBC TF0,LOOP1 AJMP LOOPLOOP1: CPL 19. 编写一段程序, 功能要求为:当引脚的电平正跳变时,对的输入脉冲进行计数;当引脚的电平负跳变时,停止计数,并将计数值写入 R0、R1(高位存 R1,低位存 R0)。答 : 将 的 输 入 脉 冲 接 入INT0,即使用 T0 计数器完成对口的脉冲计数。 编写程序如下:ORG 0000HLJMP MAINORG 000BHLJMP IT0PMAIN: JNB ,MAINMOV TMOD,#05H ;定时器/ 计数器 T0为计数方式 1SE
13、TB TR0 ;启动T0,开始计数SETB ET0 ;允许T0中断SETB EA ; CPU 开中断WAIT: JB ,WAITCLR EACLR TR0MOV R1,TH0MOV R0,TL0AJMP $IT0P: INC R2RETI20. 试编写一个程序(例如将 05H和 06H拼为 56H ) , 设原始数据放在片外数据区2001H 单元和2002H 单元中,按顺序拼装后的单字节数放入 2002H 。答:编程思路:首先读取2001H的值,保存在寄存器A中,将寄存器A的高四位和低四位互换, 再屏蔽掉低四位然后将寄存器A的值保存到 30H 中,然后再读取2002H的值,保存在寄存器A 中,
14、屏蔽掉高四位,然后将寄存器 A的值与 30H进行或运算,将运算后的结果保存在 2002H中。ORG 0000HMAIN :MOV DPTR ,#2001H;设置数据指针的初值精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 5 页,共 13 页 - - - - - - - - - - MOVX A,DPTR ;读 取2001H的值SWAP A ANL A,#0F0H ;屏蔽掉低四位MOV 30H ,A ;保存 AINC DPTR ;指针指向下一个MOVX A,DPTR ;读 取2002H的值ANL A,#0
15、FH ;屏蔽掉高四位ORL A,30H ;进行拼装MOVX DPTR,A ;保存到2002HEND21. 编写程序,将外部数据存储器中的4000H 40FFH单元全部清零。解:本题主要考察了对外部数据块的写操作; 编程时只要注意循环次数和MOVX 指令的使用就可以了。ORG 0000HMAIN : MOV A,#0;送预置数给 AMOV R0 ,#0FFH ;设置循环次数MOV DPTR ,#4000H;设置数据指针的初值LOOP : MOVX DPTR , A;当前单元清零INC DPTR ;指向下一个单元DJNZ R0,LOOP ;是否结束END22. 编写程序,采用8255A的 C 口按
16、位置位 / 复位控制字,将 PC7置 0,PC4置 1,(已知 8255A各端口的地址为 7FFCH-7FFFH ) 。解:本题主要考察对8255A的 C口的操作。 其方式控制字的高位为 0 时,低四位对C 口进行置位。由题目我们得到了方式控制字的地址为 7FFFH 。ORG 0000HMAIN: MOV DPTR,#7FFFH ;控制字寄存器地址送 DPTRMOV A,#0EH; 将 PC7置 0MOVX DPTR,AMOV A,#09H; 将 PC4置 1MOVX DPTR,AEND23. 试编写逻辑运算程序,功能为:精品资料 - - - 欢迎下载 - - - - - - - - - -
17、- 欢迎下载 名师归纳 - - - - - - - - - -第 6 页,共 13 页 - - - - - - - - - - F=X(Y+Z);F=XYZ其中 F X Y Z 均为位变量,依次存在以 30H为首址的位寻址区中。解(1) : F BIT 30H X BIT 31H Y BIT 32H Z BIT 33HLOG1:MOV C,Y ;YC ORL C,Z ;(Y+Z)C ANL C,X ;X(Y+Z)C MOV F,C ;X(Y+Z)FRET ;解(2) :LOG2:MOV C,Y ;YC ANL C,Z ;YZC ANL C,/X ;XYZC CPL C ;XYZC MOV F,
18、C ;XYZFRET ;24.试编写程序,统计内 RAM 30H50H单元中FFH 的个数,并将统计结果存51H 。解:编程如下:LOKF:MOV 51H,#0 ;计数器清零 MOV R0,#30H ;置数据区首址LOP: MOV A,R0 ;读数据 CPL A ;取反 JNZ LP1 ;判 FFH ,非 FFH ,转 INC 51H ;FFH,计数LP1: INC RO ;指向下一数据CJNE R0, #51H , LOP;判循环RET25 试编写程序,找出外 RAM 2000H200FH 数据区中的最精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师
19、归纳 - - - - - - - - - -第 7 页,共 13 页 - - - - - - - - - - 小值,并放入 R2中。解:编程如下:SECH:MOV DPTR,#2000H ;置外 RAM 数据区首址MOV R2 ,#OFH ;置外 RAM数据区长度( N-1) MOVX A,DPTR ;读第一个数据 MOV B,A; 假 设第 一个数据为最小值SLOP:INC DPTR ; 指向下一个数据 MOVX A,DPTR ;读下一个数据CJNE A,B,SLP1;新数据与最小值比较SLP1:JNC SLP2 ;新数据最小值,判断循环MOV B,A ;新数据最小值,新数据 BSLP2:D
20、JNZ R2,SLOP ;判循环结束否 MOV R2,B ;最小值R2 RET26已知 ROM 中存有 0100的平方表,首地址为 TABDS ,试根据累加器A(100)中的数值查找对应的平方值,存 入 内RAM31H30H( 双 字节)。解:编程如下:DSQR:MOVDPTR,#TABDS;置ROM 平方表首地址ADD A,Acc ;A2AMOVC A, A+DPTR ;读平方值高 8 位MOV 31H ,A ;平方值高 8位31HINC A ;指向平方值低8位MOVC A ,A+DPTR ;读平方值低 8 位MOV 30H ,A ;平方值低8 位30HRETTABDS :DW 0,0,0,
21、1,0,4,0,9,0,16,0,25,27H, 10H ; 0100平方表(双字节)27. 试编程实现3 字节无符号数加法: R7R6R5+R4R3R2R0(3 个连续单元 ) 。解:编程如下:ADD3 : MOV A,R5 ADD A,R2 ;低位加 MOV R0,A ;存低位和 INC R0 ;精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 8 页,共 13 页 - - - - - - - - - - 修改存储单元 MOV A,R6 ; ADDC A,R3 ;中位加 MOV R0,A ;存中位和 I
22、NC R0 ;修改存储单元 MOV A,R7 ; ADDC A,R7 ;高位加 MOV R0,A ;存高位和 RET 28. 试 编 写程 序 , 将外 部RAM2000H20FH数据块,传送到 3000H30FFH 区域。解:编程如下:DMOV:MOV DPTR,#2000H;置源数据区首址MOV R2 ,#00H ;置数据长度(256 个)DLOP:MOVX A ,DPTR ;读数据MOV DPH,#30H;置目的数据区高 8 位地址MOVX DPTR,A ;存数据MOV DPH,#20H;置源数据区高 8 位地址INC DPTR ;修改源数据区地址DJNZ R2,DLOP ;判循环结束否
23、RET29.从内 RAM20H 单元开始存有一组带符号数(补码) ,其个数已存放在 1FH单元。要求统计其中大于0,等于0 和小于 0 的数的个数,并把统计结果分别存入ONE ,TWO ,THREE3 个单元。解:编程如下: ONE EQU 30H TWO EQU 31H THREE EQU 32HSTOR :MOV R0,#20H ;置数据区首址SLOP: MOV A,R0 ;读数据 JZ LP1 ;数据 =0,转 JB ,LP2 ;数据0,转 INC ONE ;数据 0,ONE 单元加 1LP0: INC RO ;指向下一数据 DJNZ 1FH,SLOP ;判统计结束否未精品资料 - -
24、- 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 9 页,共 13 页 - - - - - - - - - - 结束循环 RET ; 统计结束,TWO单元加 1LP1: INC TWO ;数据=0,TWO 单元加 1 SJMP LPO ;返回循环体LP2: INC THREE ;数据 0,THREE 单元加 1 SJMP LPO ;返回循环体30. 设在内部数据存储器中存放有 20 个字节数据,其起始地址为 M 。 试编写程序,找出数 0AH的存放地址, 并送入 N单元。 若 OAH 不存在,则将 N单元清零。解:程序如下:
25、 M EQU 30H N EQU 2FHSECH:MOV R0,#M MOV R1,#20LOOP:CJNE R0,#0AH,LP1 MOV N,R0 RETLP1: INC R0 DJNZ R1,LOOP MOV N,#0 RET31. 试 编 写 程序 , 求 出内RAM20H 单元中“1”的个数,并将结果存入 21H单元。解:编程如下:LOK1:MOV 21H,#O MOV R2,#08H MOV A,20HLOP: RLC A JNC LP1 JNC 21HLP1:DJNE R2,LOP RET32. 试编写统计数据区长度的 程 序 , 设 数 据 区 从 内RAM30H 开始,该数据
26、区以 0结束, 统计结果送入 2FH中。解:编程如下:ADUP:MOV 2FH,#0 MOV R0,#30HALOP:MOV A,R0 JNZ LP1 RETLP1: INC 2FH INC R0 SJMP ALOP33. 从内 RAM30H 单元开始存放着一组无符号数, 其个数精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 10 页,共 13 页 - - - - - - - - - - 存在 21H单元中。试编写程序,找出其中最小的数,并将其存入 20H单元中。解:编程如下:SECH: MOV RO,#
27、3OH MOV 20H,#FFHSLOP: MOV A,R0 CJNE A,20H,NEXTNEXT: JNC SLP1 MOV 20H,ASLP1: INC R0 DJNZ 21H,SLOP RET34. 用程序实现 c=a2+b2。 设a2b2 存于内 RAM,AA,BB单元; c 为双字节,存于内RAMCC,DD 单元。解:该题可用于程序来实现。通过两次调用查平方表子程序来得到 a 和 b,并在主程序中完成相加。 编程如下: AA EQU 40H BB EQU 41H CC EQU 42H DD EQU 43HFUNC:MOV A,AA LCALL DSQR MOV DD,A MOV C
28、C,31H MOV A,BB LCALL DSQR ADD A,DD MOV DD,A ADDC A,CC MOV CC,A RET35利用定时、计数器T1测量某正脉冲宽度, 并存入内RAM31H30H 。设fosc=12MHz ,脉冲从引脚输入,宽度小于 65536us。解:编程如下:PLUS: MOV TMOD,#90H MOV TH1,#0 MOV TL1,#0 JB ,$ SETB TR1 JNB ,$ JB ,$ CLR TR1 MOV 31H,THO MOV 30H,TLO RET36. 设在内部 RAM 中 50H开始有连续的10 个单元,求这 10 个单元之和,结果放精品资料
29、- - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 11 页,共 13 页 - - - - - - - - - - 在 60H,61H,低位放在 60H ,高位在 61H.解:程序编写如下:ORG 0000HACALL ADDTENWAIT: AJMP WAITADDTEN:MOV R0 ,50HMOV R1,#10MOV A,#00HMOV 60H, AMOV 61H, ALOOP1:ADD A, R0INC R0MOV 60H,AJC LOOP2DJNZ R1,LOOP1RETLOOP2:MOV A,61H;ADD
30、 A,#01HDJNZ R1 ,LOOP1RETEND1、请用数据传送指令来实现 下列 要 求 的数据 传 送。(14 分)(1)把 R0的内容送到 R1MOV A,R0 MOV R1,A(2)内部 RAM20H 单元的内容传送到 A中。MOV A,20H(3)外部 RAM2000H 单元的内容送到 R0。MOV DPTR,#2000H (1分)MOVX A,DPTR(1 分)MOV R0 ,A (2分)(4)外部 ROM1000H 单元的内容送内部 RAM20H 单元。MOV DPTR ,#1000HMOV A,#00H(2 分)MOVC A ,A+DPTRMOV 20H,A (2 分)1.
31、 请将片外RAM 20H 25H单元清零 MOV R0,#20H MOV R7 ,#06H CLR A LOOP :MOVX R0,A INC R0 DJNZ R7,LOOP 2请将 ROM 3000H 单元内容送 R7 精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 12 页,共 13 页 - - - - - - - - - - MOV DPTR , #3000H CLR A MOVC A ,A+DPTR MOV R7 ,A 1、设(A)=38H,R0=28H,(28H)=18H,执行下列程序后, (A
32、)= 0E7H ORL A,#27HANL A,28HXCHD A ,R0CPL A 2、设(A)=38H,(20H)=49H,PSW=00H,(B)=02H, 填写以下中间结果。SETB CADDC A, 20H (A)= 82H(CY)= 0 (AC)= 1RLC A (A)= 04H (CY)= 1 (P)= 1MUL AB (A)= 08H(B)= 00H (OV)= 0SETB EA 精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 13 页,共 13 页 - - - - - - - - - -