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