您的当前位置:首页正文

程序题及其答案

2023-03-07 来源:好走旅游网


1、认真阅读以下图的电气原理图,请写出8个LED发光二极管的地址,并写出程序使8个

include <>

unsigned char xdata *LEDAD;

121024642U2:A740413U2:B74045U2:CU2:DU2:E740413U3:B74041U3:A740498U2:F740474041174043U119XTAL1P0.0/AD0P0.1/AD1P0.2/AD2P0.3/AD3P0.4/AD4P0.5/AD5P0.6/AD6P0.7/AD7P2.0/A8P2.1/A9P2.2/A10P2.3/A11P2.4/A12P2.5/A13P2.6/A14P2.7/A15P3.0/RXDP3.1/TXDP3.2/INT0P3.3/INT1P3.4/T0P3.5/T1P3.6/WRP3.7/RD39383736353433322122232425262728101112131415161718XTAL29RST293031PSENALEEA12345678P1.0P1.1P1.2P1.3P1.4P1.5P1.6P1.780C51 数码管没有位驱动,建议利用7406进行位驱动。 #include\"\"

table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}; int count=99; void delay(int m) { int i;

for(i=0;ivoid Int0() interrupt 0 {

T1作为计数,记满1000溢出。

13

13

答: 1(1) ① T0的工作方式0时: tmax=2×12按时10ms可达要求,那么X=2-10ms13

16

13

fc =2×2us=

2us=2-10000us2us =3192=C78H=6318H =2×2us=

16

②T0工作在方式1时: tmax=2×1216

fc 按时10ms也可达要求,那么X=2-10ms ③T0工作在方式2或3时: tmax=2×1288

2us8

=EC78H

fc=2×2us=512us

按时500us,循环20次,X=2-500us2us=06H

(2) 方式0:2-100=8092=1F9CH=FC1CH X=M-计数值 方式1:2-100=FF9CH 方式2或3:2-100=9CH

(1) TMOD=0x00; TH0=0x63H; TL0=0x18H; TR0=1; ET0=1; EA=1;

(2) TMOD=0x50; TH1=0xffH; TL1=0x9cH; TR1=1;

8

16

13

ET1=1; EA=1;

八、 对按时器0采纳中断方式编程,晶振频率为12 MHz,采用方式1计数,使引脚输出周期为4ms的方波,C51源程序如下。1.写出定时器0中断服务程序 2.主程序中有3个错误,请指出并改正。 #include<>

sbit P1_1=P1^1; void main(void) {

TMOD=0x00; TH0=(65536-2000)/256 ; TL0=(65536-2000)%256; TF0=0; IE=0X60; while(1) ; } 答:

TMOD=0x01; ; break;

case 0x : …..; break; default: …….;break; }

10、采纳按时计数器T1,设计每秒闪烁一次的LED,其中接LED,不画电路,只需写出程序(LED共阳极)。 #include<>

#define uchar unsigned char uchar count; sbit light=P2^0; void main() {

TMOD=0X10;

TH1=(65536-10000*110592/120000)/256; TL1=(65536-10000*110592/120000)%256; ET1=1; EA=1; count=0; TR1=1; while(1) {

; } }

void time1() interrupt 3 {

TH1=(65536-10000*110592/120000)/256; TL1=(65536-10000*110592/120000)%256; count++; if(count==50)

{ count=0; light=~light;

} }

1一、试编程对8155进行初始化,设A口为选通输出,B口为选通输入,C口作为操纵联络口,并启动按时器/记数器按方式1工作,工作时刻为10ms,按时器计数脉冲频率为单片机的时钟频率24分频,fosc=12MHz。 解:算得初值=5000 =1388H

MOV DPTR,#7F04 ;按时器低八位寄放器地址 DPTR MOV A,#88H ;低8位初值 A

MOVX @DPTR,A ; 低8位初值 低8位寄放器 INC DPTR ;DPTR指向按时器高8位 MOV A,#13H ;高8位初值 A

MOVX @DPTR,A ;高8位初值 高8位寄放器 MOV DPTR,#7F00H ;8155命令寄放器地址 DPTR MOV A,0C5H ;命令字 A

MOVX @DPTR,A ;命令字 命令寄放器

1二、已知如图,8155的PA口用于输出,PB口用于输入,PC口用于输出,请: (1)写出8155的各I/O口的口地址和存储器的地址范围。 (2)编写出8155初始化程序。B155命令字格式:

答:

初始化程序:

MOV DPTR,#0100H MOV A,#0DH MOVX @DPTR,A 13、试编程对8155进行初始化,设A口为选通输出,B口为选通输入,C口作为操纵联络口,并启动按时器/记数器按方式1工作,工作时刻为10ms,按时器计数脉冲频率为单片机的时钟频率24分频,fosc=12MHz。(12分) 解:算得初值=5000 =1388H

MOV DPTR,#7F04 ;按时器低八位寄放器地址 DPTR MOV A,#88H ;低8位初值 A

MOVX @DPTR,A ; 低8位初值 低8位寄放器 INC DPTR ;DPTR指向按时器高8位 MOV A,#13H ;高8位初值 A

MOVX @DPTR,A ;高8位初值 高8位寄放器 MOV DPTR,#7F00H ;8155命令寄放器地址 DPTR MOV A,0C5H ;命令字 A

MOVX @DPTR,A ;命令字 命令寄放器

14、 应用单片机内部按时器T0工作在方式1下,从输出周期为2ms的方波脉冲信号,已知单片机的晶振频率为6MHZ。

16

请(1)计算时刻常数X,应用公式X=2-t(f/12) (2)写出程序清单

16

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

16-36

=2-1*10*6*10/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 SJMP LOOP

1五、已知一MCS—51单片机系统的片内RAM 20H单元寄存了一个8位无符号数7AH,片外扩展RAM的8000H寄存了一个8位无符号数86H,试编程完成以上两个单元中的无符号数相加,并将和值送往片外RAM的01H、00H单元中,同时将所编写程序运行完成后的数据和状态添入下表中给出的PSW的有关位和寄放器A、DPTR和RAM单元中。 CY 答: CY 0 A 01H DPTR 8000H 片外01H 0lH 片外00H 00H 片外8000H 86H A DPTR 片外01H 片外00H 片外8000H MOV DPTR,#8000H ;加数单元地址送DPTR MOVX A,@DPTR ;取加数之一 ADD A,20H ;两数相加

MOV R0,#00H ;和值的低位送片外00H单元 MOVx @R0,A INC R0

CLR A ;计算和值的高位 ADDC A,#00H

MOVx @R0,A ;高位送片外01H单元 RET

编程要考虑将进位位的值作为结果的一部份掏出来。采纳其他编程方式也能够,但结果是可不能改变的,和值=100H

1六、设计一个2×2行列式键盘电路并编写键盘扫描子程序。(20分) 解: (1)2×2行列式键盘电路如下图。

5V (2)键盘扫描子程序: : ACALL KS1 ;挪用判定有无键按下子程序 KEY1 89C51 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 ,LONE;第0行无键按下,转查第一行

MOV A,#00H ;第0行有键按下,该行首键号#00H A AJMP LKP ;转求键号

LONE: JB ,NEXT ;第一行无键按下,转查下一列

MOV A,#02 ;第一行有键按下,该行首键号#02 A LKP: ADD A,R4 ;键号=首行号+列号 PUSH ACC ;键号进栈爱惜 LK3: ACALL KS1 ;等待键释放 JNZ LK3 ;未释放,等待

POP AC ;键释放,键号 A RET ;键扫描终止

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

JNB ,KND ;判定2列全扫描完?扫描完,转KND

RL A ;没扫描完,扫描字左移一名,形成下一列扫描字 MOV R2,A ;扫描字 R2 AJMP LK4 ;扫描下一列

AJMP KEY1 ;全扫描完,返回 MOV A,#FCH ;全扫描字B A MOV P1,A ;全扫描字 所有行 MOV A,P1 ;读取列值

CPL A ;取正逻辑,高电平表示有键按下 ANL A,#0C0H ;屏蔽低6位,取高2位

RET ;出口状态(A)!=0,有键按下

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

D0 Q0 5V 本程序的硬件连接如下图。当输出高电 8013 74LS240 平常,LED灯亮,不然不亮。 其程序如下: D7 Q7 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

1九、蒸汽锅炉硬件报警系统如图2所示,LED4,3,2,1别离为对应液位上限报警,液位下限报警,蒸汽压力上限报警,蒸汽压力下限报警灯。当某一限位开关SL1,SL2,SL3,SL4闭合报警时,相应报警灯亮。请编程(int0触发方式为沿边触发)。 ORG 0000H

AJMP MAIN ;上电自动转主程序 ORG 0003H

AJMP ALARM;转中断效劳程序 ORG 0200H

MAIN:SETB IT0 ;置为边沿触发 SETB EX0 ;许诺中断 SETB EA ;CPU开中断 HERE:SJMP HERE;等待中断 ORG 0210H

ALARM:MOV A,#0FFH;设P1口为输入口 MOV P1,A

MOV A,P1;取报警状态 SWAP A;(P17~4)互换(P13~0) MOV P1,A ;输出报警信号 RETI End

20、已知一单片机应用系统如以下图所示。试回答下列问题并编写显示程序,显示“01234567”。

1.写出各口的地址和操纵字 A口地址:7F01H B口地址:7F02H C口地址:7F03H 操纵口地址:7F00H 操纵字:03H

2.显示程序(参考程序) ORG 0

AJMP MAIN ORG 0BH AJMP TO0 ORG 30H

MAIN:MOV SP,#40H ACALL CHUSHI MOV R4,#0FEH MOV R0,#37H MOV DPTR,#7F00H MOV A,#03H

MOVX @DPTR,A MOV IE,#82H MOV TCON,#10H MOV TMOD,#0H

LOOP1:AJMP LOOP1 CHUSHI: MOV A,#0H MOV R1,#30H MOV R2,#08H LOOP:MOV @R1,A INC A

INC R1

DJNZ R2,LOOP RET

TO0: MOV A,#0H MOV DPTR,#07F02H MOVX @DPTR,A MOV A,R4

CJNE A,#7FH,LOP MOV R0,#38H LOP: RL A MOV R4,A

MOV DPTR,#7F01H MOVX @DPTR,A DEC R0 MOV A,@R0 ACALL XIANS INC DPTR MOVX @DPTR,A RETI

XIANS:PUSH DPH PUSH DPL MOV DPTR,#TAB MOVC A,@A+DPTR POP DPL POP DPH RET

TAB:DB 3FH,06H,5BH,4FH,6DH,7DH,07H,7FH END

2一、已知某MCS-51单片机系统是拥12MHZ的外部晶体振荡器,请问:

(1)、 该单片机的按时器O(TO)工作在方式2时,TO的最大定不时刻为多少?(2分) (2)、 当单片机的按时器O(TO)工作在方式2时,要求每记满250us便生产一次按时器溢出,请问,TO中需要预置的初始值应为多少?(5分)

(3)、编程实现。主程序使得所有报警发光二极管灯灭,250微秒产生报警中断,使得相应报警灯亮。(假设发光二极管地址为0E000h,共阳极) 解:(1)

(2)tl0=6h,th0=6h (3)org 0000h Jmp main Org 000bh Jmp intert0 Org 100h

Main: mov tmod,#02h Mov tl0,#06h Mov th0,#06h Setb ea

Setb et0 Setb pt0 Setb tr0

Mov dptr,#0e000h Mov a,#0h Movx @dptr,a Here:jmp here Org 300h

Intert0: mov a,#0ffh

Mov dptr,#0e000h Movx @dptr,a Reti End

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