程序题及其答案.docx

上传人:b****4 文档编号:24826575 上传时间:2023-06-01 格式:DOCX 页数:18 大小:152.66KB
下载 相关 举报
程序题及其答案.docx_第1页
第1页 / 共18页
程序题及其答案.docx_第2页
第2页 / 共18页
程序题及其答案.docx_第3页
第3页 / 共18页
程序题及其答案.docx_第4页
第4页 / 共18页
程序题及其答案.docx_第5页
第5页 / 共18页
点击查看更多>>
下载资源
资源描述

程序题及其答案.docx

《程序题及其答案.docx》由会员分享,可在线阅读,更多相关《程序题及其答案.docx(18页珍藏版)》请在冰豆网上搜索。

程序题及其答案.docx

程序题及其答案

1、认真阅读以下图的电气原理图,请写出8个LED发光二极管的地址,并写出程序使8个发光二极管从左向右循环点亮。

include<>

unsignedcharxdata*LEDAD;

数码管没有位驱动,建议利用7406进行位驱动。

#include""

table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};

intcount=99;

voiddelay(intm)

{

inti;

for(i=0;i

{;}

}

voidInt0()interrupt0

{

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

答:

1

(1)①T0的工作方式0时:

tmax=213×

=213×2us=

按时10ms可达要求,那么X=213-

=213-

=3192=C78H=6318H

②T0工作在方式1时:

tmax=216×

=216×2us=

按时10ms也可达要求,那么X=216-

=EC78H

③T0工作在方式2或3时:

tmax=28×

=28×2us=512us

按时500us,循环20次,X=28-

=06H

(2)方式0:

213-100=8092=1F9CH=FC1CH

X=M-计数值

方式1:

216-100=FF9CH

方式2或3:

28-100=9CH

(1)TMOD=0x00;

TH0=0x63H;

TL0=0x18H;

TR0=1;

ET0=1;

EA=1;

(2)TMOD=0x50;

TH1=0xffH;

TL1=0x9cH;

TR1=1;

ET1=1;

EA=1;

八、对按时器0采纳中断方式编程,晶振频率为12MHz,采用方式1计数,使引脚输出周期为4ms的方波,C51源程序如下。

1.写出定时器0中断服务程序2.主程序中有3个错误,请指出并改正。

#include<>

sbitP1_1=P1^1;

voidmain(void)

{

TMOD=0x00;

TH0=(65536-2000)/256;TL0=(65536-2000)%256;

TF0=0;

IE=0X60;

while

(1);

}

答:

TMOD=0x01;

;break;

case0x:

…..;break;

default:

…….;break;

}

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

#include<>

#defineucharunsignedchar

ucharcount;

sbitlight=P2^0;

voidmain()

{

TMOD=0X10;

TH1=(65536-10000*110592/120000)/256;

TL1=(65536-10000*110592/120000)%256;

ET1=1;

EA=1;

count=0;

TR1=1;

while

(1)

{

;

}

}

voidtime1()interrupt3

{

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

MOVDPTR,#7F04;按时器低八位寄放器地址DPTR

MOVA,#88H;低8位初值A

MOVX@DPTR,A;低8位初值低8位寄放器

INCDPTR;DPTR指向按时器高8位

MOVA,#13H;高8位初值A

MOVX@DPTR,A;高8位初值高8位寄放器

MOVDPTR,#7F00H;8155命令寄放器地址DPTR

MOVA,0C5H;命令字A

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

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

(1)写出8155的各I/O口的口地址和存储器的地址范围。

(2)编写出8155初始化程序。

B155命令字格式:

 

答:

初始化程序:

MOVDPTR,#0100H

MOVA,#0DH

MOVX@DPTR,A

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

(12分)

解:

算得初值=5000 =1388H

MOVDPTR,#7F04;按时器低八位寄放器地址DPTR

MOVA,#88H;低8位初值A

MOVX@DPTR,A;低8位初值低8位寄放器

INCDPTR;DPTR指向按时器高8位

MOVA,#13H;高8位初值A

MOVX@DPTR,A;高8位初值高8位寄放器

MOVDPTR,#7F00H;8155命令寄放器地址DPTR

MOVA,0C5H;命令字A

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

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

(1)计算时刻常数X,应用公式X=216-t(f/12)

(2)写出程序清单

解:

X=216-t(F/12)

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

=OFEOCH

ORG3000H

START:

MOVTMOD,#01H

MOVTL0,#OCH

MOVTHO,#OFEH

SETBTR0

LOOP:

JBCTFO,DONE

SJMPLOOP

DONE:

MOVTL0,#OCH

MOVTHO,#OFEH

CPL

SJMPLOOP

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

CY

A

DPTR

片外01H

片外00H

片外8000H

 

 

 

 

 

 

答:

CY

A

DPTR

片外01H

片外00H

片外8000H

0

01H

8000H

0lH

00H

86H

MOVDPTR,#8000H;加数单元地址送DPTR

MOVXA,@DPTR;取加数之一

ADDA,20H;两数相加

MOVR0,#00H;和值的低位送片外00H单元

MOVx@R0,A

INCR0

CLRA;计算和值的高位

ADDCA,#00H

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

RET

编程要考虑将进位位的值作为结果的一部份掏出来。

采纳其他编程方式也能够,但结果是可不能改变的,和值=100H

1六、设计一个2×2行列式键盘电路并编写键盘扫描子程序。

(20分)

解:

(1)2×2行列式键盘电路如下图。

 

(2)键盘扫描子程序:

KEY1:

ACALLKS1;挪用判定有无键按下子程序

JNZLK1;有键按下,转LK1

AJMPKEY1;无键按下,返回

LK1:

ACALLT12MS;调延时12ms子程序

ACALLKS1;查有无键按下

JNZLK2;假设有,那么为键确实按下,转逐列扫描

AJMPKEY1;无键按下,返回

LK2:

MOVR4,#00H;首列号R4

MOVR2,#FEH;首列扫描字R2

LK4:

MOVA,R2;列扫描字P1口

MOVP1,A;使第一列线为0

MOVA,P1;读入行状态

JB,LONE;第0行无键按下,转查第一行

MOVA,#00H;第0行有键按下,该行首键号#00HA

AJMPLKP;转求键号

LONE:

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

MOVA,#02;第一行有键按下,该行首键号#02A

LKP:

ADDA,R4;键号=首行号+列号

PUSHACC;键号进栈爱惜

LK3:

ACALLKS1;等待键释放

JNZLK3;未释放,等待

POPAC;键释放,键号A

RET;键扫描终止

NEXT:

INCR4;列号加1,指向下一列

MOVA,R2;列扫描字A

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

扫描完,转KND

RLA;没扫描完,扫描字左移一名,形成下一列扫描字

MOVR2,A;扫描字R2

AJMPLK4;扫描下一列

AJMPKEY1;全扫描完,返回

MOVA,#FCH;全扫描字BA

MOVP1,A;全扫描字所有行

MOVA,P1;读取列值

CPLA;取正逻辑,高电平表示有键按下

ANLA,#0C0H;屏蔽低6位,取高2位

RET;出口状态(A)!

=0,有键按下

17、编制一个循环闪烁灯的程序。

有8个发光二极管,每次其中某个灯闪烁点亮10次后,转到下一个闪烁10次,循环不止。

画出电路图。

8013

D0Q0

74LS240

D7Q7

5V

本程序的硬件连接如下图。

当输出高电平常,LED灯亮,不然不亮。

其程序如下:

MOVA,#01H;灯亮初值

SHIFT:

LCAILFLASH;调闪亮10次子程序

RRA;右移一名

SJMPSHIFT;循环

FLASH:

MOVR2,#0AH闪烁10次计数

FLASH1;MOVP1,A;点亮

LCALLDELAY;延时

MOVP1,#00H;熄灭

LCALLDELAY;延时

DJNZR2,FLASH1;循环

RET

1九、蒸汽锅炉硬件报警系统如图2所示,LED4,3,2,1别离为对应液位上限报警,液位下限报警,蒸汽压力上限报警,蒸汽压力下限报警灯。

当某一限位开关SL1,SL2,SL3,SL4闭合报警时,相应报警灯亮。

请编程(int0触发方式为沿边触发)。

ORG0000H

AJMPMAIN;上电自动转主程序

ORG0003H

AJMPALARM;转中断效劳程序

ORG0200H

MAIN:

SETBIT0;置为边沿触发

SETBEX0;许诺中断

SETBEA;CPU开中断

HERE:

SJMPHERE;等待中断

ORG0210H

ALARM:

MOVA,#0FFH;设P1口为输入口

MOVP1,A

MOVA,P1;取报警状态

SWAPA;(P17~4)互换(P13~0)

MOVP1,A;输出报警信号

RETI

End

20、已知一单片机应用系统如以下图所示。

试回答下列问题并编写显示程序,显示“01234567”。

1.写出各口的地址和操纵字

A口地址:

7F01H

B口地址:

7F02H

C口地址:

7F03H

操纵口地址:

7F00H

操纵字:

03H

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

ORG0

AJMPMAIN

ORG0BH

AJMPTO0

ORG30H

MAIN:

MOVSP,#40H

ACALLCHUSHI

MOVR4,#0FEH

MOVR0,#37H

MOVDPTR,#7F00H

MOVA,#03H

MOVX@DPTR,A

MOVIE,#82H

MOVTCON,#10H

MOVTMOD,#0H

LOOP1:

AJMPLOOP1

CHUSHI:

MOVA,#0H

MOVR1,#30H

MOVR2,#08H

LOOP:

MOV@R1,A

INCA

INCR1

DJNZR2,LOOP

RET

TO0:

MOVA,#0H

MOVDPTR,#07F02H

MOVX@DPTR,A

MOVA,R4

CJNEA,#7FH,LOP

MOVR0,#38H

LOP:

RLA

MOVR4,A

MOVDPTR,#7F01H

MOVX@DPTR,A

DECR0

MOVA,@R0

ACALLXIANS

INCDPTR

MOVX@DPTR,A

RETI

XIANS:

PUSHDPH

PUSHDPL

MOVDPTR,#TAB

MOVCA,@A+DPTR

POPDPL

POPDPH

RET

TAB:

DB3FH,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)org0000h

Jmpmain

Org000bh

Jmpintert0

Org100h

Main:

movtmod,#02h

Movtl0,#06h

Movth0,#06h

Setbea

Setbet0

Setbpt0

Setbtr0

Movdptr,#0e000h

Mova,#0h

Movx@dptr,a

Here:

jmphere

Org300h

Intert0:

mova,#0ffh

Movdptr,#0e000h

Movx@dptr,a

Reti

End

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 解决方案 > 解决方案

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1