单片机程序设计题库及答案

更新时间:2023-11-28 06:05:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

1.实现片外数据存储器数据传送(2000H)-->(2100H) MOV DPTR,#2000H MOVX A,@DPTR MOV DPTR,#2100H MOVX @DPTR,A

2.查表法求Y=X2。设X(0≤X≤15)在片内RAM的20H 单元中,要求查表求Y,存入片内RAM 21H单元。 1) ORG 1000H

SQU: MOV DPTR,#3000H ;确定表首地址(基地址) MOV A,20H ;取 X(变量:偏移量) MOVC A,@A+DPTR ;查表求Y=X2 MOV 21H,A ;保存Y(结果) RET ;子程序结束 … ;其它程序段 ORG 3000H ;常数表格首地址 TAB: DB 00,01,04,09,… ,225 ;平方表 END 2)ORG 1000H ;程序起始地址

SQU: MOV A,20H ;取X ADD A,#3 ;修正偏移量 MOVC A,@A+PC ;查表求Y=X2 (PC=1005H) MOV 21H,A ;存结果 RET ;子程序结束 TAB: DB 00,01,04 … ;平方表 DB 09,… ,225

3.分析下面程序

MOV R0, #0C8H;(R0)=200 CLR P1.7;P1.7为低电平

LOOP: CPL P1.7;P1.7变反(1 μs ) NOP;(1 μs ) NOP;(1 μs )

DJNZ R0,LOOP;(R0)≠0 则转 (2μs)

4.设计一个延时10ms的延时子程序,已知单片机使用的晶振为6MHZ。

机器周期数 ORG 0020H

1 MOV R0, #0AH ;外循环10次 1 DL2: MOV R1, #MT ;内循环MT次 1 DL1: NOP

1 NOP ;空操作指令

2 DJNZ R1, DL1 2 DJNZ R0, DL2 RET

内循环DL1到指令DJNZ R1,DL1 的计算:(1+1+2)ⅹ2μsⅹMT=1000μs

MT=125=7DH 总的延时时间: {1+[1+(1+1+2)ⅹ125+2]ⅹ10}ⅹ2μs=10.062ms 5.试计算延时程序的执行时间

DELAY: MOV R6,#64H (=100) 1 I1: MOV R7,#0FFH(=255) 1 I2: DJNZ R7,I2 2 DJNZ R6,I1 2 RET 2 延时时间计算:(设时钟fOSC=12MHz) T=1us

t=(1×1+1×100+2×100×255+2×100+2×1)×T= 51.303 ms 6. DELAY:MOV R6,#100 1 D1:MOV R7,#10 1 D2:NOP 1 DJNZ R7,D2 2 t=6.606 ms DJNZ R6,D1 2 RET 2

计算延时程序的执行时间(设时钟fOSC=6MHz,T=2us) 。 7.十六进制数转换为ASCII码:

HASC:CJNE A,#0AH,N N:JNC N1(C=0跳N1) ADD A,#30H SJMP SE

N1:ADD A,#37H SE: RET

8.设从片内RAM30H单元和40H单元有两个16字节数,把它们相加,结果放于30H单元开始的位置处(设结果不溢出)。 ORG 1000H MOV R0,#30H MOV R1,#40H MOV R2,#16 CLR C

LOOP:MOV A,@R0 ADDC A,@R1 MOV @R0,A INC R0 INC R1 DJNZ R2,LOOP END

9.按下面公式编写程序,x为无符号数,存在20h单元y存放在21h单元

ORG 0030H MOV A, 20H x?40?x CJNE A, #21H, LOOP1 ?y?20?x?40?2xLOOP1: JC NEXT1

?x CJNE A, #40H, LOOP2 x?20?LOOP2: JNC NEXT2

MOV B, #2 MUL AB AJMP NEXT2 NEXT1: CPL A

NEXT2: MOV 21H, A END

从内部RAM 22h单元开始存有一个无符号数数据块,长度n存于21h中。求出数据块中的最小数,存于20h中。 ORG 0030H

MOV R0, #22H ;数据块起始地址

MOV R1, 21H ;数据个数n MOV 20H,#0FFH ; 最大数 LOOP: MOV A, @R0 ; 取新数

INC R0 ; 为取下一个新数作准备 CJNE A, 20H, LOOP1 ; 与原最大数比较 LOOP1:JNC NEXT ; 大,原最小数保留

MOV 20H, A ; 小,改变最小数 NEXT: DJNZ R1, LOOP ;循环 END

10.ASCII码转换为十六进制数: AHEX:CLR C SUBB A,#30H CJNE A,#0AH,N N: JC N1 SJMP AE

N1: SUBB A,#11H CJNE A,#06H,N2 N2: JNC ERR ADD A,#0AH SJMP AE

ERR: MOV A,#0FFH AE: RET

8位二进制转换成BCD码。(用十进制表达的二进制码) BINBCD1: MOV B, #100

DIV AB

MOV @R0, A INC R0

MOV A, #10

XCH A, B ;(A)=原(B),(B)=10 DIV AB

MOV @R0, A INC R0 XCH AB

MOV @R0, A RET

11.要求每次按动按键,使外接发光二极管LED改变一次亮灭状态。 解:INT0输入按键信号,P1.0输出改变LED状态。 1、跳变触发:每次跳变引起一次中断请求。 ORG 0000H ;复位入口 AJMP MAIN ORG 0003H ;中断入口 AJMP PINT0 ORG 0100H ;主程序

MAIN:MOV SP,#40H ;设栈底 SETB EA ;开总允许开关 单片机 SETB EX0 ;开INT0中断 SETB IT0 ;负跳变触发中断 INT0 H: SJMP H ;执行其它任务 ORG 0200H ;中断服务程序 P1.0 PINT0:CPL P1.0 ;改变LED RETI ;返回主程序

2、电平触发:可避免一次按键引起多次中断响应。 1)软件等待按键释放(撤消低电平);(2)硬件清除中断信号(标志位)。 ORG 0000H ;复位入口 AJMP MAIN ORG 0003H ;中断入口 AJMP PINT0 ORG 0100H ;主程序 MAIN:MOV SP,#40H ;设栈底 SETB EA ;开总允许开关 SETB EX0 ;开INT0中断 CLR IT0 ;低电平触发中断 H: SJMP H ;执行其它任务 ORG 0200H ;中断服务程序 PINT0:CPL P1.0 ;改变LED

WAIT: JNB P3.2,WAIT ;等按键释放(P3.2即INT0) RETI ;返回主程序

假设系统时钟为6MHz,编写定时器T0产生1秒定时的程序。 (1)T0工作方式的确定

定时时间较长,采用哪一种工作方式? 由各种工作方式的特性,可计算出: 方式0最长可定时16.384ms; 方式1最长可定时131.072ms; 方式2最长可定时512s。

+5V 1

选方式1,每隔100ms中断一次,中断10次为1s。 (2)计算计数初值

因为:(216-X)×2×10-6 = 10-1 所以:X=15536=3CB0H

因此:TH0=3CH,TL0=B0H (3)10次计数的实现 采用循环程序法。 (4)程序设计

GATE C/T M1 M0 GATE C/T M1 M0 ORG 0000H

RESET: LJMP MAIN ;上电,转主程序入口T1 MAIN

T0 ORG 000BH ;T0的中断入口 LJMP IT0P ;转T0中断处理程序IT0P ORG 1000H MAIN: MOV SP,#60H ;设堆栈指针

MOV B,#0AH ;设循环次数10次 MOV TMOD,#01H ;设T0工作在方式1 MOV TL0,#0B0H ;给T0设初值 MOV TH0,#3CH SETB TR0 ;启动T0 SETB ET0 ;允许T0中断 SETB EA ;CPU开放中断 HERE: SJMP HERE ;等待中断

ITOP: MOV TL0,#0B0H ;T0中断子程序,重装初值 MOV TH0,#3CH ; DJNZ B,LOOP

CLR TR0 ;1s定时时间到,停止T0工作 LOOP: RETI

12.由P1.0输出方波信号,周期为2ms,设fosc=12MHz。

每隔1ms改变一次P1.0的输出状态。用T0非门控方式1定时。 计算时间常数:X=216-t/T=216-1000/1 =FC18H START:MOV TMOD,#01H MOV TL0,#18H MOV TH0,#0FCH SETB TR0 LOOP: JBC TF0,PTF0 SJMP LOOP PTF0: CPL P1.0 MOV TL0,#18H MOV TH0,#0FCH SJMP LOOP ORG 0000H AJMP MAIN ORG 000BH ;T0定时器 AJMP PT0INT

ORG 0100H MAIN: MOV SP,#60H MOV TMOD,#01H MOV TL0,#18H MOV TH0,#0FCH SETB EA SETB ET0 SETB TR0 HERE: SJMP HERE PT0INT: CPL P1.0 MOV TL0,#18H MOV TH0,#0FCH RETI

13.P1.7驱动LED亮1秒灭1秒地闪烁,设时钟频率为6MHz。

本题采用硬件方式:T0定时,定时10ms; T1计数T0的定时跳变信号P1.0的负跳变次数,计满100个跳变为1秒。(查询方法) T=2μs,X=5×105个T,而最大只能65536个T, 不能满足要求,必须借助硬件计数器或软件循环。T0定时初值: (方式1)t=10ms,X=5000D=1388H,C=(1388H)补=EC78H T1计数初值: (方式2) START: MOV TMOD,#61H MOV TL1,#0CDH MOV TH1,#0CDH CLR P1.0 SETB TR1 LOOP1: CPL P1.7

LOOP2: MOV TL0 ,#78H MOV TH0,#0ECH SETB TR0

LOOP3: JBC TF0,LOOP4 SJMP LOOP3

LOOP4: MOV TL0 ,#78H MOV TH0,#0ECH CPL P1.0 JBC TF1,LOOP1 SJMP LOOP2

P1.7LEDP1.0T180C51+5VT0定时20ms1ST1计数

六、设计题

1.某单片机控制系统有8个发光二极管。试画出89C51与外设的连接图并编程使它们由右向左轮流点亮。

答: 图 (5分) 构思 (3分) MOV A,#80H (1分)

UP:MOV P1,A (1分) RR A (2分) SJMP UP (1分)

2.某控制系统有2个开关K1和K2,1个数码管,当K1按下时数码管加1,K2按下时数码管减1。试画出8051与外设的连接图并编程实现上述要求。 答:图 (5分) 构思 (3分) 程序(4分) ORG 0000H LJMP MAIN ORG 0003H LJMP AINT0 ORG 0013H LJMP BINT1

MAIN: MOV IE,#83H SETB IT0 SETB IT1

MOV R0,#00H MOV DPTR,#TAB UP: MOV A,R0

MOVC A,@A+DPTR MOV P1,A SJMP UP

AINT0: INC R0

CJNE R0,#10,AINT01 MOV R0,#0 AINT01: RETI BINT1: DEC R0

CJNE R0,#0FFH,BINT11 MOV R0,#9 BINT11: RETI

1.已知在累加器A中存放一个BCD数(0~9),请编程实现一个查平方表的子程序。 1.SQR:1NC A

MOVC A,@A+PC RET

TAB:DB 0,1,4,9,16 DB 25,36,49,64,81

2.请使用位操作指令实现下列逻辑操作:BIT=(10H∨P1.0)∧(11H∨CY) 2.ORL C,11H

MOV 12H,C MOV C,P1.0 ORL C,/10H ANL C,12H MOV BIT,C RET

3.已知变量X存于VAR单元,函数值Y存于FUNC单元,按下式编程求Y值。

?1x?0?0x?0??Y=??1x?0

3. MOV A,VAR

CJNE A,#0,COMP

SJMP RES ;x=0,Y=0 COMP:JNC POSI ;x>0,Y=1 MOV A,#0FFH ;x<0,Y=-1 SJMP RES

POSI:MOV A,#01H RES:MOV FUNC,A RET

4.已知在R2中存放一个压缩的BCD码,请将它拆成二个BCD字节,结果存于SUM开始的单元中(低位在前)。 4. MOV R0,#SUM MOV A,R2 ANL A,#OFH

MOV @R0,A ;存低字节BCD MOV A,R2 ANL A,#0F0H SWAP A 1NC R0

MOV @R0,A ;存高字节BCD RET

5.将存于外部RAM 8000H开始的50H数据传送0010H的区域,请编程实现。 5. MOV DPTR,#8000H MOV R0,#10H MOV R2,#50H

LOOP:MOVX A,@DPTR ;取数 MOVX @R0,A ;存数 1NC DPTR 1NC R0

DJNZ R2,LOOP RET

1.已知如图,8155的PA口用于输出,PB口用于输入,PC口用于输出,请:

(1)写出8155的各I/O口的口地址和存储器的地址范围。1.(1) (2)编写出8155初始化程序。B155命令字格式: (2)初始化程序:

MOV DPTR,#0100H MOV A,#0DH MOVX @DPTR,A

2.已知如图并给出下列程序,请在读图并理解程序后回答下列问题: (1)程序功能为_巡回采集8个通道的数据 __。

(2)ADC0809的口地址为___ADC0809口地址为7FF0H~7FF7H(或7FF8~7FFFH)__。 (3)EOC的作用是_EOC为A/D转换结束信号,用来引起中断或查询,以便读取A/D的转换结果_。

(4)程序运行结果存于__外部RAM的A0H~A7H。_。 ADC:MOV DPTR,#7FFOH MOV R0,#0A0H MOV R2,#8 MOV A,#0

LOOP:MOVX @DPTR,A JB P3.3,$

MOVX A,@DPTR MOVX @R0,A 1NC DPTR 1NC R0

DJNZ R2,LOOP AJMP ADC

说明MCS—51单片机的下列各条指令中源操作数的寻址方式(可直接在每条指令后面书写) 1.ANL A,20H 直接寻址 2.ADDC A, #20H 立即寻址 3.JZ rel 相对寻址 4.CLR C 位寻址

5.RRA 寄存器寻址

六、使用简单指令序列完成以下操作(12分)

1.请将片外RAM20H—25H单元清零 MoV R0,#20H MOV R7,#06H CLR A

LOOP:MOVX @R0,A INC R0

DJNZ R7,LOOP

2.请将ROM3000H单元内容送R7 MOV DPTR, #3000H CLR A

MOVC A,@A+DPTR

MOV R7,A

1有一长度为10字节的字符串存放在8031单片机内部RAM中,其首地址为40H。要求将该字符串中每一个字符加偶校验位。(以调用子程序的方法来实现。)

源程序如下:

ORG MOV MOV

1000H R0,#40H R7,#10 A, ① @R0

NEXT: MOV

ACALL SEPA MOV INC

@R0,A R0

本文来源:https://www.bwwdw.com/article/r84t.html

Top