您的当前位置:首页单片机必考大题

单片机必考大题

2022-01-12 来源:小侦探旅游网
4、MCS-51单片机系统时钟为12MHZ,试利用定时/计数器0控制每隔200S从P1.6口输出1个4S低电平脉冲。

主程序(此部分6分)

ORG 0000H ;系统复位入口

AJMP 0100H ;系统主程序从0100H开始 ORG 000BH ;定时器0中断入口 AJMP 0500H ;定时器0中断服务程序放在0500H处 ORG 0100H MOV SP,#30H ;置栈顶 MOV TH0,#9CH ;设置定时器初值 MOV TL0,#9CH ; MOV TMOD,#06H ;设置定时器0为模式2 SETB TR0 ;启动定时器0 SETB ET0 ;允许定时器0中断 SETB EA ;开系统中断 SETB P1.6 。。。。。。。。。

中断服务程序(此部分6分)

ORG 0500H

T200US: PUSH PSW ;栈保护 CLR P1.6 ;P1.6输出低电平 NOP ;延时4s NOP NOP

SETB P1.6 ;P1.6输出高电平

POP PSW SETB ET0 ;开中断 RETI

2.设计1个子程序,将8位二进制数(0-FFH)转换为BCD码数(0-256)。 入口: (A)=二进制数

出口: (R0+1)=BCD数的十位数、个位数 (R0)=BCD数的百位数

BINBCD1: MOV B,#100

DIV AB MOV @R0,A INC R0 MOV A,#10 XCH A,B DIV AB SWAP A ADD A,B

;(A)=百位数,(B)=余数 ;保存百位数

;(A)=十位数,(B)=余数(个位数) ;放到A的高4位

;合成,A的高4位为十位数,低4位为个位数

MOV @R0,A RET

;保存十位数、个位数

3.应用单片机内部定时器T0工作在方式1下,从P1.0输出周期为2ms的方波脉冲信号,已知单片机的晶振频率为6MHZ。 请(1)计算时间常数X,应用公式X=2(2)写出程序清单

16

-t(f/12)

解:X=216-t(F/12)

=216-1*10-3*6*106/12 =OFEOCH

ORG 3000H

START:MOV TMOD,#01H

MOV TL0,#OCH MOV THO,#OFEH SETB TR0

LOOP: JBC TFO,DONE

SJMP LOOP

DONE: MOV TL0,#OCH

MOV THO,#OFEH CPL P1.0 SJMP LOOP

4.设计一个2×2行列式键盘电路并编写键盘扫描子程序

KEY1: ACALL KS1 ;调用判断有无键按下子程序 JNZ LK1 ;有键按下,转LK1 AJMP KEY1 ;无键按下,返回 LK1: ACALL T12MS ;调延时12ms子程序 ACALL KS1 ;查有无键按下

JNZ LK2 ;若有,则为键确实按下,转逐列扫描 AJMP KEY1 ;无键按下,返回 LK2: MOV R4,#00H ;首列号 R4 MOV R2,#FEH ;首列扫描字 R2 LK4: MOV A,R2 ;列扫描字 P1口 MOV P1,A ;使第一列线为0

MOV A,P1 ;读入行状态

JB ACC.0,LONE;第0行无键按下,转查第一行 MOV A,#00H ;第0行有键按下,该行首键号#00H A LONE: LKP: LK3: NEXT: 字

AJMP LKP ;转求键号

JB ACC.1,NEXT ;第一行无键按下,转查下一列 MOV A,#02 ;第一行有键按下,该行首键号#02 A ADD A,R4 ;键号=首行号+列号 PUSH ACC ;键号进栈保护 ACALL KS1 ;等待键释放 JNZ LK3 ;未释放,等待 POP AC ;键释放,键号 A RET ;键扫描结束

INC R4 ;列号加1,指向下一列 MOV A,R2 ;列扫描字 A

JNB ACC.1,KND ;判断2列全扫描完?扫描完,转KND RL A ;没扫描完,扫描字左移一位,形成下一列扫描MOV R2,A ;扫描字 R2 AJMP LK4 ;扫描下一列 AJMP KEY1 ;全扫描完,返回

MOV A,#FCH ;全扫描字11111100B A MOV P1,A ;全扫描字 所有行 MOV A,P1 ;读取列值

CPL A ;取正逻辑,高电平表示有键按下 ANL A,#0C0H ;屏蔽低6位,取高2位 RET ;出口状态(A)!=0,有键按下 5.片内RAM40H开始的单元内有10B二进制数,编程找出其中最大值并存于50H单元中

解 START: MOV R0,#40H ;数据块首地址送R0 MOV R7,#09H ;比较次数送R7 MOV A,@R0 ;取数送A LOOP: INC R0

MOV 30H,@R0 ;取数送30H CJNE A,30H,NEHT ;(A)与(30H)相比 NEXT: JNC BIE1 (A)≥(30H)转BIR1 MOV A,30H ;(A)<(30H),大数送A

BIE1: DJNZ R7,LOOP ;比较次数减1,不为0,继续比较 MOV 50H,A ;比较结束,大数送50H RET

6.编程将片内RAM30H单元开始的15B的数据传送到片外RAM3000H开始的单元中去。

解:STRAT:MOV R0,#30H MOV R7,#0FH MOV DPTR,#3000H LOOP: MOV A,@R0 MOVX @DPTR,A INC R0 INC DPTR DJNZ R7,LOOP RET

7.编制一个循环闪烁灯的程序。有8个发光二极管,每次其中某个灯闪烁点亮10次后,转到下一个闪烁10次,循环不止。画出电路图。

MOV A,#01H ;灯亮初值

SHIFT: LCAIL FLASH ;调闪亮10次子程序 RR A ;右移一位 SJMP SHIFT ;循环 FLASH: MOV R2,#0AH 闪烁10次计数 FLASH1; MOV P1,A ;点亮

LCALL DELAY ;延时 MOV P1,#00H ;熄灭 LCALL DELAY ;延时 DJNZ R2,FLASH1 ;循环

RET

因篇幅问题不能全部显示,请点此查看更多更全内容