单片机原理与应用 试题库(1)

发布时间 : 星期二 文章单片机原理与应用 试题库(1)更新完毕开始阅读

MOV TL1,#56 ;送0.1ms定时初值 SETB ET1 ;允许T1中断 SETB EA ;开中断

MOV R0,#50 ;中断50次为5ms SETB TR1 ;启动T1计数 SJMP $ ;等待中断

TS: DJNZ R0,TS1 ;中断不够50次则跳转 MOV R0,#50 ;中断50次为5ms CPL P1.3 ;输出取反 TS1:RETI ;中断返回 END

67.已知AT89S52单片机的晶体振荡频率为12MHz,请编程从P1.6和P1.7口输出互补的(即互为反相)、频率为4Hz的方波。(要求:T1工作在方式1下,采用中断方式工作,在中断服务程序中控制P1.6和P1.7的输出)

参考答案:4Hz方波的周期为250ms,其半周期为125ms。只要利用T1产生5ms的定时中断,对该定时中断计25次即可得到125ms定时。5ms定时初值为:65536-5000*12/12=60536=0EC78H ORG 0000H

LJMP START ;跳转到START处 ORG 1BH

LJMP TS ;跳转到定时器1中断服务程序 ORG 40

START: MOV TMOD,#10H ;设T1为定时器,方式1 MOV TH1,#0ECH

MOV TL1,#78H ;送5ms定时初值 SETB ET1 ;允许T1中断 SETB EA ;开中断

MOV R0,#25 ;中断25(19H)次为125ms

CLR P1.6 ;P1.6输出低电平,P1.7复位后为高电平 SETB TR1 ;启动T1计数 SJMP $ ;等待中断 TS: MOV TH1,#0ECH

MOV TL1,#78H ;送5ms定时初值 DJNZ R0,TS1 ;125ms没到则跳转

MOV R0,#25 ;中断计次单元恢复初值 CPL P1.6 ;P1.6取反输出 CPL P1.7 ;P1.7取反输出 TS1: RETI ;中断返回 END

68.已知AT89S52单片机的晶体振荡频率为24MHz,请编程从P1.5输出频率为10Hz、占空比为10%(即高电平持续时间为信号周期的10%,低电平持续时间为信号周期的90%)的矩形波。(要求:T1工作在方式1下,采用中断方式工作,在中断服务程序中控制P1.5的输出)

参考答案:输出信号周期=1/10=0.1秒=100ms,因此输出信号的高电平持续时间为10ms,低电平持续时

41

间为90ms。设定T1的定时时间为10ms,对T1定时中断记9次即可得到90ms的定时。T1的定时初值=65536-10*1000*24/12=45536=0B1E0H ORG 0000H

LJMP START ;跳转到主程序入口

ORG 1BH ;T1中断服务程序入口地址 LJMP TS ;跳转到定时中断服务程序 ORG 30H

START: MOV TMOD,#10H ;设定T1为定时器,方式1 MOV TH1,#0B1H ;送10ms定时初值 MOV TL1,#0E0H

SETB ET1 ;允许T1中断 SETB EA ;开中断

MOV R2,#9 ;送低电平中断次数

SETB F0 ;高电平标志置1,表示输出高电平 SETB TR1 ;启动T1计数 SJMP $ ;等待中断

TS: MOV TH1,#0B1H ;送10ms定时初值 MOV TL1,#0E0H

JNB F0,TS1 ;如果目前输出低电平则转移

CLR F0 ;高电平标志清零,表示该输出低电平。 CLR P1.5 ;输出低电平 SJMP TS2

TS1: DJNZ R2,TS2 ;90ms没到则转移 MOV R2,#9 ;中断次数送R2

SETB F0 ;高电平标志置1,表示该输出高电平 SETB P1.5 ;输出高电平 TS2: RETI ;中断返回 END

69.已知80C51单片机的晶体振荡频率为6MHz,请编程从P1.3和P1.2口输出互补的(即互为反相)、频率为20Hz的方波。(要求:T0工作在方式2下,采用中断方式工作,在中断服务程序中控制P1.1和P1.0的输出)。

参考答案:20Hz方波周期=1/20=50ms,只需每25ms将输出取反即可。方式2下最大定时时间0.512ms,可以设定定时0.5ms,对于0.5ms定时中断计50次即可得到25ms定时。T0定时初值=256-500*6/12=6

ORG 0000H LJMP START ORG 0BH LJMP TS ORG 30H

START: CLR P1.2 ;P1.2清为低电平,P1.3上电后是高电平 MOV TMOD,#02H ;设T0为方式2,定时器 MOV TH0,#6 ;送0.5ms定时初值 MOV TL0,#6

42

MOV R2,#50 ;中断50次为25ms SETB ET0 ;允许T0中断 SETB EA ;开中断

SETB TR0 ;启动定时计数 SJMP $ ;等待中断

TS: DJNZ R2,TS1 ;10ms没到则返回 MOV R2,#50 ;中断50次为25ms CPL P1.3 ;输出取反 CPL P1.2 TS1: RETI END

70.已知AT89S51单片机应用系统的晶振频率为12MHz,现要求在P1.0上输出周期为200ms、占空比为1:1的方波,输出500个方波后停止输出,请编程实现。要求:使用T0,并工作在方式1、中断方式下,在中断服务程序中实现对P1.0输出方波进行控制。

参考答案:方波周期200ms,只需要每隔半周期100ms将P1.0取反即可。12MHz晶振下T0定时时间最大只有65.536ms,因此将T0的定时时间设为50ms,中断2次即为100ms。输出500个方波即P1.0的状态变化1000次即可。T0的定时初值为:65536-50000*12/12=15536=3CB0H ORG 0000H LJMP START ORG 0BH LJMP TS ORG 30H

START: MOV TMOD,#01H ;T0设为方式1 MOV TH0,#3CH ;送50ms定时初值 MOV TL0,#0B0H SETB ET0 SETB EA

MOV R2,#2 ;中断2次为100ms

MOV R3,#250 ;P1.0发生1000(250*4)次状态变化为输出500个方波 MOV R4,#4

SETB TR0 ;启动定时 SJMP $ ;等待中断

TS: MOV TH0,#3CH ;送50ms定时初值 MOV TL0,#0B0H

DJNZ R2,TS1 ;100ms未到则返回 MOV R2,#2 ;中断2次为100ms CPL P1.0 ;输出取反

DJNZ R3,TS1 ;输出变化不够250次则返回 MOV R3,#250 ;为下一次的250次循环赋初值 DJNZ R4,TS1 ;输出变化不到1000次则返回 CLR TR0 ;停止定时 TS1: RETI ;中断返回 END

43

44

联系合同范文客服:xxxxx#qq.com(#替换为@)