单片机原理与应用 试题库(1) 联系客服

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

采用中断方式工作,工作在方式1下,在中断服务程序中控制发光二极管的亮与灭。)

参考答案:共阴极接法的发光二极管需要高电平点亮,因此当P1.0为高电平时发光二极管点亮。需要利用T1产生1秒钟的定时,可以对T1的100ms中断计10次实现1秒定时。T1的定时初值为:65536-100*1000*6/12=15536=3CB0H

FLASH BIT 00H ;发光二极管点亮标志,“1”表示点亮 ORG 0 LJMP START ORG 1BH LJMP TS ORG 30H

START: MOV TMOD,#10H ;将T1设为方式1,定时器 MOV TH1,#3CH ;送100ms定时初值 MOV TL1,#0B0H

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

MOV R7,#10 ;中断10次为1秒钟

MOV R5,#2 ;发光二极管点亮时间为2秒 MOV R6,#3 ;发光二极管熄灭时间为3秒 SETB P1.0 ;点亮发光二极管

SETB FLASH ;通知中断服务程序发光二极管处于点亮状态 SETB TR1 ;启动T1计数 SJMP $ ;等待中断

TS: MOV TH1,#3CH ;送100ms定时初值 MOV TL1,#0B0H

DJNZ R7,TS2 ;1秒未到则返回

MOV R7,#10 ;100ms中断计数值重新赋值

JNB FLASH,TS1 ;如果发光二极管处于熄灭状态则转移 DJNZ R5,TS2 ;点亮的时间2秒未到则返回 MOV R5,#2

CLR P1.0 ;熄灭发光二极管 CLR FLASH SJMP TS2

TS1: DJNZ R6,TS2 ;熄灭的时间没到3秒则返回 MOV R6,#3

SETB P1.0 ;点亮发光二极管 SETB FLASH TS2: RETI END

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

参考答案:要求输出频率为500Hz的方波,其周期为1/500=2ms,故只需每隔半个周期(1ms)将输出取反即可。设定T1定时为1ms,则T0的定时初值为:65536-1000*24/12=63536=0F830H

37

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

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

SETB ET1 ;允许T1中断 SETB EA ;开中断 CLR P1.6 ;输出初始化 SETB P1.7

SETB TR1 ;启动T1计数 SJMP $ ;等待中断

TS: MOV TH1,#0F8H ;送1ms定时初值 MOV TL1,#30H

CPL P1.0 ;输出取反 CPL P1.1 TS1: RETI END

62.已知AT89S51单片机的晶体振荡频率为12MHz,请编程从P1.0口输出频率为50Hz的方波。(要求:T0工作在方式2下,采用中断方式工作,在中断服务程序中控制P1.0的输出)

参考答案:50Hz方波的周期=1/50=20ms,因此只需每隔10ms将P1.0取反就可以了。T0在方式2下最大的定时时间为256微秒(对于12MHz晶振),可以将定时时间设为250微秒,然后对250微秒定时中断计40次即以得到10ms的定时。T0的定时初值=256-250*12/12=6 ORG 0 LJMP START ORG 0BH LJMP TS ORG 30H

START: MOV TMOD,#2 ;将T0设为方式2,定时器 MOV TH0,#6 ;送定时初值 MOV TL0,#6

SETB ET0 ;允许T0中断 SETB EA ;开中断

MOV R2,#40 ;中断40次为10ms SETB TR0 ;启动T0计数 SJMP $ ;等待中断 TS: DJNZ R2,TS1

MOV R2,#40 ;中断40次为10ms到 CPL P1.0 ;输出取反 TS1: RETI ;中断返回 END

38

63.AT89S51单片机应用系统的晶体振荡器频率为3MHz,请编程实现从单片机的P1.0引脚输出25Hz方波。(要求:T1采用中断方式工作,工作在方式2下,在中断服务程序中控制P1.0的输出。)

参考答案:25Hz方波的周期=1/25=40ms,即每隔20ms将P1.0输出取反即可。T1在方式2下的最大定时时间为:256*12/3=1024微秒=1.024毫秒,因此只需要定时1ms,然后对1ms定时计20次即可得到20ms的定时。T1定时初值=256-1000*3/12=6。 ORG 0000H LJMP START ORG 1BH LJMP TS ORG 30H

START: MOV TMOD,#20H ;设T1为定时器,方式2 MOV TH1,#6 ;送1ms定时初值 MOV TL1,#6

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

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

TS: DJNZ R2,TS1 ;20ms未到则转移 MOV R2,#20 ;中断20次为20ms CPL P1.0 ;输出取反 TS1: RETI ;中断返回 END

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

参考答案: 100Hz的方波其周期=1/100=10ms,只需要每隔5ms将输出取反即可。T1在24MHz晶振情况下方式2的最大定时时间=256*12/24=128微秒,因此只需要定时0.1ms,并对中断次数计50次即可得到5ms的定时。T1定时初值=256-100*24/12=6 ORG 0 LJMP START ORG 1BH LJMP TS ORG 30H

START: MOV TMOD,#20H ;设T1为方式2,定时器 MOV TH1,#6 ;送0.1ms定时初值 MOV TL1,#6

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

MOV R2,#50 ;中断50次为5ms CLR P1.0

SETB TR1 ;启动T1计数

39

SJMP $ ;等待中断

TS: DJNZ R2,TS1 ;不到5ms则转移 MOV R2,#50 ;中断50次为5ms CPL P1.0 ;输出取反 CPL P1.1

TS1: RETI ;中断返回 END

65.已知AT89S51单片机的晶体振荡频率为24MHz,请编程从P1.0口输出频率为2Hz的方波。(要求:T0工作在方式1下,采用中断方式工作,在中断服务程序中控制P1.0的输出)

参考答案:2Hz的方波其周期为500ms,半周期是250ms。利用T0定时25ms,并对中断计10次即可。25ms的定时初值为:65536-25000*24/12=15536=3CB0H ORG 0 LJMP START ORG 0BH LJMP TS ORG 30H

STRAT: MOV TMOD,#1 ;设T0为定时器,方式1 MOV TH0,#3CH

MOV TL0,#0B0H ;送25ms定时初值 MOV R0,#10 ;中断10次为250ms SETB ET0 ;允许T0中断 SETB EA ;开中断

SETB TR0 ;启动T0计数 SJMP $ ;等待中断 TS: MOV TH0,#3CH

MOV TL0,#0B0H ;送25ms定时初值 DJNZ R0,TS1

MOV R0,#10 ;中断计次单元重新赋值 CPL P1.0 ;输出取反 TS1: RETI END

66.AT89S51单片机应用系统的晶体振荡器频率为24MHz,请编程实现从单片机的P1.3引脚输出100Hz方波。(要求:T1采用中断方式工作,工作在方式2下,在中断服务程序中控制P1.3的输出。)

参考答案:100Hz方波的周期是1/100=10ms,其半周期为5ms。将T1定时0.1ms,对定时中断计50次即可。T1的定时初值为:256-100*24/12=56=38H ORG 0000H LJMP START ORG 1BH LJMP TS ORG 30H

START: MOV TMOD,#20H ;设T1为定时器,方式2 MOV TH1,#56

40