单片机复习02.docx
- 文档编号:11244447
- 上传时间:2023-02-26
- 格式:DOCX
- 页数:22
- 大小:642.04KB
单片机复习02.docx
《单片机复习02.docx》由会员分享,可在线阅读,更多相关《单片机复习02.docx(22页珍藏版)》请在冰豆网上搜索。
单片机复习02
六、编程题(16)
1.如图所示,此中断电路可实现系统的故障显示。
当系统各部分正常工作时,四个故障源的输入均为低电平,显示灯全部不亮。
当有某个部分出现故障时,则相应的故障源输入线由低电平变为高电平,通过INT0向8031申请中断,要求单片机查询其中断,并点亮相应的发光二极管。
试将下面的程序补充完整。
(P1.0、P3.0为一组;P1.1、P3.1为一组;其余类推。
)
解:
程序:
ORG0000H
AJMPMAIN
ORG0003H;外部中断0中断矢量
AJMPSUBINT0;跳转到外部中断0的服务子程序
MAIN:
SETBEX0
SETBIT0
SETBEA
ANLP1,#0F0H;P1.0,P1.1,P1.2,P1.3为输入
HERE:
SJMPHERE
SUBINT0:
JNBP1.0,L1;查询中断源,(P1.0)=0,转L1
SETBP3.0;是P1.0引起的中断,使P3.0LED亮
L1:
JNBP1.1,L2;查询中断源,(P1.1)=0,转L2
SETBP3.1;是P1.1引起的中断,使P3.0LED亮
L2:
JNBP1.2,L3;查询中断源,(P1.2)=0,转L3
SETBP3.2;是P1.2引起的中断,使P3.0LED亮
L3:
JNBP1.3,L4;查询中断源,(P1.3)=0,转L4
SETBP3.3;是P1.3引起的中断,使P3.0LED亮
L4:
RETI;中断返回
END
2.设时钟频率为6MHz,要求利用定时器T0产生1S(秒)的定时程序。
已知T0工作在方式1时产生100mS(毫秒)的定时时间常数为:
TL0=0B0H,TH0=3CH。
试将下面的程序补充完整。
(提示:
T0一次定时中断产生100mS,中断10次则可产生1S定时。
)
解:
参考程序:
ORG0000H
AJMPMAIN
ORG000BH;T0的中断地址
LJMPT0SERV;T0的中断子程序实际跳转去处
ORG30H
MAIN:
MOVSP,#60H
MOVB,#10;循环次数10
MOVTMOD,#01H;设置T0工作于模式1
MOVTL0,#0B0H;装入计数值低8位
MOVTH0,#3CH;装入计数值高8位
SETBTR0;启动T0计数
SETBET0;允许T0中断
SETBEA;允许CPU中断
SJMP$;等待CPU中断
T0SERV:
MOVTL0,#0B0H;重新赋计数值
MOVTH0,#3CH
DJNZB,LOOP;检查循环次数
CLRTR0;1S定时时间到,停止T0计数
LOOP:
RETI
END
3.设时钟频率为12MHz,要求利用定时器T1产生0.6S(秒)的定时程序。
已知T1工作在方式1时产生50mS(毫秒)的定时时间常数为:
TL0=0B0H,TH0=3CH。
试将下面的程序补充完整。
(提示:
T1一次定时中断产生50mS,中断12次则可产生0.6S定时。
)
解:
程序:
ORG0000H
AJMPMAIN
ORG001BH;T1的中断地址
LJMPT1SERV;T1的中断子程序实际跳转去处
ORG30H
MAIN:
MOVSP,#60H
MOVB,#12;循环次数12
MOVTMOD,#10H;设置T1工作于模式1
MOVTL1,#0B0H;装入计数值低8位
MOVTH1,#3CH;装入计数值高8位
SETBTR1;启动T1计数
SETBET1;允许T1中断
SETBEA;开CPU中断
SJMP$;等待中断
T1SERV:
MOVTL1,#0B0H;重新赋计数值
MOVTH1,#3CH
DJNZB,LOOP;检查循环次数
CLRTR1;0.6S定时时间到,停止T1计数
LOOP:
RETI
END
4.如图ADC0809与8031的接口。
要求用中断方式将8路模拟量的采样数据读入,并依次序存入外部扩展存储器(图中未画出)的10H~17H地址单元中。
试将下面的程序补充完整。
解:
根据电路ADC0809的8个通道地址分别为7FF8H~7FFFH。
每一个通道转换结束后,由EOC信号引起INT1中断,并在中断服务程序中读取转换值。
程序:
ORG0000H
AJMPMAIN
ORG0013H
AJMPINT1int
ORG0030H
MAIN:
MOVR0,#10H(1分);数据暂存区首地址
MOVR2,#08H(1分);8路计数初值
SETBIT1;INT1为脉冲触发方式
SETBEA;开系统中断
SETBEX1;开INT1中断
MOVDPTR,#7FF8H;指向ADC0809通道0地址
MOVX@DPTR,A;产生ALE.START信号,启动A/D转换
HERE:
AJMPHERE;等待中断
INT1int:
MOVXA,@DPTR;产生OE信号,读取转换值
MOVX@R0,A;存数
INCDPTR;指向下一个通道
INCR0;指向下一个暂存单元
DJNZR2,DONE;8路未转换完毕
RETI;转换完出口
DONE:
MOVX@DPTR,A;未转换完出口,产生ALE.START
;信号,启动A/D转换
RETI
5.如图所示,此中断电路可实现系统的故障显示。
当系统各部分正常工作时,四个故障源的输入均为低电平,显示灯全部不亮。
当有某个部分出现故障时,则相应的输入线由低电平变为高电平,通过INT0向8031申请中断,要求单片机处理其中断,并点亮相应的发光二极管。
试将下面的程序补充完整。
(P1.0、P1.4为一组;P1.2、P1.5为一组;其余类推。
)
程序:
ORG0000H
AJMPMAIN
ORG0003H;外部中断0中断矢量
AJMPSUBINT0;跳转到外部中断0的服务子程序
MAIN:
ANLSETBEX0
SETBIT0
SETBEA
ANLP1,#0F0H;P1.0,P1.1,P1.2,P1.3为输入
;P1.4,P1.5,P1.6,P1.7输出为0
HERE:
SJMPHERE
SUBINT0:
JNBP1.0,L1;查询中断源,(P1.0)=0,转L1
SETBP1.4;是P1.0引起的中断,使P1.4LED亮
L1:
JNBP1.1,L2;查询中断源,(P1.1)=0,转L2
SETBP1.5;是P1.1引起的中断,使P1.5LED亮
L2:
JNBP1.2,L3;查询中断源,(P1.2)=0,转L3
SETBP1.6;是P1.2引起的中断,使P1.6LED亮
L3:
JNBP1.3,L4;查询中断源,(P1.3)=0,转L4
SETBP1.7;是P1.3引起的中断,使P1.7LED亮
L4:
RETI;中断返回
END
6.如图为ADC0809与8031的接口。
要求采用查询方式对ADC0809的第一路(IN0)模拟信号每隔20mS采样一次,共采样100次,并将100个采样数据存入外部扩展RAM1000H开始的存储单元。
试将下面的程序补充完整。
解:
根据电路ADC0809的通道0地址为7FF8H。
每一次转换结束后,转换结束的EOC信号提供给P1.0脚,程序检测P1.0的状态即可得知转换是否结束,然后读取转换值。
程序:
ORG0030H
MAIN:
MOVSP,#60H
MOVR6,#10H;外部存储器数据区地址
MOVR7,#00H
MOVR2,#100;采样数据计数初值
MOVDPTR,#7FF8H;指向ADC0809通道0地址
CONV:
MOVX@DPTR,A;启动A/D转换,通道0
LOOP:
MOVA,P1;采集转换器状态P1.0
ANLA,01H;屏蔽无用位
CJNEA,#01,LOOP;等待转换结束
INT1int:
MOVXA,@DPTR;产生OE信号,读取转换值
PUSHDPL;保存DPTR中的ADC地址
PUSHDPH
MOVDPH,R6;采集数据存储地址
MOVDPL,R7
MOVX@DPTR,A;存数
INCDPTR;指向下一个RAM存储单元
MOVR6,DPH;RAM地址存储到R6R7
MOVR7,DPL
POPDPH;恢复ADC地址
POPDPL
LCALLD20mS;调用延时20mS子程序
DJNZR2,CONV;8路未转换完,继续
SJMP$
D20mS:
…..(略)
RET
END
7.如图所示,此中断电路可实现系统的故障显示。
当系统各部分正常工作时,四个故障源的输入均为低电平,显示灯全部不亮。
当有某个部分出现故障时,则相应的输入线由低电平变为高电平,通过INT0向8031申请中断,要求单片机处理其中断,并点亮相应的发光二极管。
试将下面的程序补充完整。
(P1.0、P1.1为一组;P1.2、P1.3为一组;其余类推。
)
解:
参考程序:
ORG0000H
AJMPMAIN
ORG0003H;外部中断0中断矢量
AJMPSUBINT0;跳转到外部中断0的服务子程序
MAIN:
ANLP1,#55H
SETBIT0
SETBEA
SETBEX0
HERE:
SJMPHERE
SUBINT0:
JNBP1.0,L1;查询中断源,(P1.0)=0,转L1
SETBP1.1;是P1.0引起的中断,使P1.1灯亮
L1:
JNBP1.2,L2;查询中断源,(P1.2)=0,转L2
SETBP1.3;是P1.2引起的中断,使P1.3灯亮
L2:
JNBP1.4,L3;查询中断源,(P1.4)=0,转L3
SETBP1.5;是P1.4引起的中断,使P1.5灯亮
L3:
JNBP1.6,L4;查询中断源,(P1.6)=0,转L4
SETBP1.7;是P1.6引起的中断,使P1.7灯亮
L4:
RETI;中断返回
END
8.如图ADC0809与8031的接口。
要求用查询方式将8路模拟量的采样数据读入,并依次序存入外部扩展存储器80H~87H地址单元中。
试将下面的程序补充完整。
解:
根据电路ADC0809的8个通道地址分别为7FF8H~7FFFH。
每一个通道转换结束后,由EOC信号提供给P1.0脚,程序检测P1.0的状态即可得知转换是否结束,然后读取转换值。
程序:
ORG0030H
MAIN:
MOVR0,#80H;数据暂存区首地址
MOVR2,#08H;8路计数初值
MOVDPTR,#7FF8H;指向ADC0809通道0地址
CONV:
MOVX@DPTR,A;产生ALE.START信号,启动A/D
;转换
LOOP:
MOVA,P1;采集转换器状态P1.0
ANLA,0FEH;屏蔽无用位
CJNEA,#01,LOOP;等待转换结束
INT1int:
MOVXA,@DPTR;产生OE信号,读取转换值
MOVX@R0,A;存数
INCDPTR;指向下一个通道
INCR0;指向下一个暂存单元
DJNZR2,CONV;8路未转换完毕
RET;转换完毕退出
9.采用中断方式利用T1的工作模式1产生10mS(毫秒)的定时,然后在P1.2引脚上输出频率为50Hz的方波。
请将下面的程序补充完整。
(下面的画线处仅表示该处可能需要补充指令,并不表示指令数目的多少,请根据自己的思路编写程序。
)
已知:
T1工作在模式1产生10mS定时的时间常数为TH1=0D8H,TL1=0F0H。
解:
要在P1.2引脚输出50Hz的方波。
半个周期使P1.2取反一次即可。
程序:
ORG0000H
LJMPMAIN
ORG001BH;T1中断入口
LJMPSUBT1;转向T1中断服务程序
ORG0030H
MAIN:
MOVSP,#60H
MOVTMOD,#10H;设置T1为模式1
MOVTL1,#0F0H;设置初始值
MOVTH1,#0D8H
SETBEA;CPU开中断
SETBET1;允许T1溢出中断
SETBTR1;启动T1
HERE:
SJMPHERE;等待T1中断
SUBT1:
MOVTL1,#0F0H;重装载技术时间常数
MOVTH1,#0D8H
CPLP1.2;在P1.2产生方波
RETI
END
10.如图所示,系统中采用8155扩展6位共阴LED,显示缓冲区在内部RAM中7AH开始的连续六个单元。
要求将显示缓冲区的6个字节的数据依次送出显示一遍,试将下面的显示子程序补充完整。
提示:
8155的A口、B口、C口、命令寄存器的地址分别为:
7F01H、7F02H、7F03H、7F00H。
显示缓冲区首地址7AH对应最左一位显示器,其余类推。
解:
提示:
8155的A口.B口.C口.命令寄存器的地址分别为:
7F01H.7F02H.7F03H.7F00H。
显示缓冲区首地址7AH对应最左一位显示器,其余类推。
程序
DIS:
MOVR0,#7FH;显示缓冲区末地址,对应最右边一位显示器
MOVR2,#01H;显示器位控的数据送R2
MOVA,R2
LP0:
MOVDPTR,#7F01H;8155A口地址送DPTR
MOVX@DPTR,A;显示器位控的数据输出
;提示:
下面的指令应为段码显示输出指令
INCDPTR;数据指针指8155PB口
MOVA,@R0;取显示数据
ADDA,#0DH;加入偏移量
MOVCA,@A+PC;取字型码
MOVX@DPTR,A;送出显示
ACALLD1MS;每显示一位,延时1MS,
;提示:
下面的指令应为位控判断与调整指令
DECR0;数据缓冲区地址减
MOVA,R2
JBACC.5,LP1;扫到最左面位?
RLA;未到,左移一位
MOVA,R2
AJMPLP0;6位没有显示完,跳转LP0以显示下一位。
LP1:
RET
LEDDAT:
DB3FH,05H,5BH,4FH,66H,6DH
DB7DH,07H,7FH,6FH,77H,7CH
DB39H,5EH,79H,71H,40H,00H
DIMS:
MOVR7,#02H;延时1MS子程序
DL:
MOVR6,#0FFH
DL1:
DJNZR6,DL1
DJNZR7,DL
RET
END
11.如图为DAC0832与8031的接口。
要求通过DAC0832产生锯齿波,请编写相应的子程序(锯齿波频率不限)。
提示:
D2MS为延迟子程序,可以调用,也可以另行编写。
解:
DAC0832在系统中的地址为7FFFH
源程序:
START:
MOVDPTR,#7FFFH;DAC0832地址
MOVA,#00H;锯齿波最低点
LOOP:
MOVX@DPTR,A
INCA;增加输出电压
ACALLD2MS;延时,改变输出信号频率
AJMPLOOP;循环
D2MS:
:
MOVR7,#04H;延时2MS字程序
DL:
MOVR6,#0FFH
DL1:
DJNZR6,DL1
DJNZR7,DL
RET
END
12.如图所示,系统中采用8155扩展6位共阴LED,显示缓冲区在内部RAM中60H开始的连续六个单元。
要求将显示缓冲区的6个字节的数据依次送出显示,试将下面的显示子程序补充完整。
提示:
8155的A口、B口、C口、命令寄存器的地址分别为:
7F01H、7F02H、7F03H、7F00H。
显示缓冲区首地址7AH对应最左一位显示器,其余类推。
解:
程序:
DIS:
MOVR0,#65H;显示缓冲区末地址
MOVR2,#01H;显示位寄存器
MOVA,R2
LP0:
MOVDPTR,#7F03H;8155PC口地址
MOVX@DPTR,A;C口输出
DECDPTR;数据指针指8155PA口
DECDPTR
MOVA,@R0;取显示数据
ADDA,#0DH;加入偏移量
MOVCA,@A+PC;取字形码
MOVX@DPTR,A;向PA口输出段显示数据(字型码)
ACALLD1MS;延时1MS
INCR0;数据缓冲区,指向下一位显示数据
MOVA,R2
JBACC.5,LP1;扫到最右面位?
RLA;未到,左移一位
MOVR2,A
AJMPLP0
LP1:
RET
LEDDAT:
DB3FH,05H,5BH,4FH,66H,6DH
DB7DH,07H,7FH,6FH,77H,7CH
DIMS:
MOVR7,#02H;延时1MS字程序
DL:
MOVR6,#0FFH
DL1:
DJNZR6,DL1
DJNZR7,DL
RET
END
13.如图为DAC0832与8031的接口。
要求通过DAC0832产生三角波,请编写相应的程序(三角波频率不限)。
解:
ORG0000H
LJMPMAIN
……
ORG0100H
MAIN:
MOVSP,#50H
MOVDPTR,#7FFFH;DAC0832地址
MOVA,#00H;最低点
UP:
MOVX@DPTR,A(3分)
INCA;增加输出电压
CJNEA,#0,UP(2分)
DOWN:
MOVA,#0FEH;
DOWN1:
MOVX@DPTR,A(2分)
DECA;降低输出电压
CJNEA,#0,DOWN1(2分)
MOVA,#01
AJMPUP(1分)
END
14.采用中断方式利用T0的工作模式0产生1mS(毫秒)的定时,然后在P1.0引脚上输出周期为2mS的方波。
请将下面的程序补充完整。
(下面的画线处仅表示该处可能需要补充指令,并不表示指令数目的多少,请根据自己的思路编写程序。
)
已知:
T0工作在模式0产生1mS定时的时间常数为TH0=0E0H,TL0=18H。
解:
要在P1.0引脚输出周期为2mS的方波,只要使P1.0每隔1mS取反一次即可。
程序:
ORG0000H
LJMPMAIN
ORG000BH;T0中断入口
LJMPSUBT0;转向T0中断服务程序
ORG0030H
MAIN:
MOVSP,#60H
MAIN:
MOVTMOD,#00H;设置T0为模式0
MOVTL0,#18H;设置初始值
MOVTH0,#0E0H
SETBEA;CPU开中断
SETBET0;允许T0溢出中断
SETBTR0;启动T0
HERE:
SJMPHERE;主程序省略,等待T0中断
SUBT0:
MOVTL0,#018H;重装载技术时间常数
MOVTH0,#0E0H
CPLP1.0;在P1.0产生方波
RETI
END
15.采用查询方式利用T0的工作模式0产生1mS(毫秒)的定时,然后在P1.0引脚上输出周期为2mS的方波。
请将下面的程序补充完整。
已知:
T0工作在模式0产生1mS定时的时间常数为TH0=0E0H,TL0=18H。
解:
要在P1.0引脚输出周期为2mS的方波,只要使P1.0每隔1mS取反一次即可。
程序:
ORG0000H
LJMPMAIN
……
ORG0030H
MAIN:
MOVSP,#60H
MOVTMOD,#00H;设置T0为模式0
MOVTL0,#18H;设置初始值
MOVTH0,#0E0H
SETBTR0;启动T0
LOOP:
JBCTF0,NEXT;查询并清除TF0,定时时间到否?
SJMPLOOP
NEXT:
MOVTL0,#18H;重装计数初值
MOVTH0,#0E0H
CPLP1.0;P1.0引脚取反
SJMPLOOP;重复产生方波
END
16.如图所示,系统中通过P0和P2口扩展6位共阴LED,显示缓冲区在内部RAM中79H开始的连续六个单元。
要求将6个显示缓冲字节单元的内容依次送显示六位显示器显示,显示缓冲区首地址79H对应LED显示器的最左边一位。
请将下面的子程序补充完整。
解:
显示子程序:
DIS:
MOVDPTR,#DISTAB;DPTR作显示字形码表指针
MOVR0,#7EH;显示缓冲区末地址
MOVR2,#01H;显示位寄存器
MOVA,R2
LP0:
NOP
MOVP2,A;P2为LED显示位选择口
MOVA,@R0;取显示数据
MOVXA,@A+DPTR;取字型码
MOVP0,A;送出显示
ACALLD1MS;每显示一位延时1MS,
DECR0;数据缓冲区地址减
MOVA,R2
JBACC.5,LP1;扫到最左面位?
RLA;未到,左移一位
MOVR2,A;保存显示位置
AJMPLP0
LP1:
RET
DISTAB:
DB3FH,05H,5BH,4FH,66H,6DH
DB7DH,07H,7FH,6FH,77H,7CH
DB39H,5EH,79H,71H,40H,00H
DIMS:
MOVR7,#02H;延时1MS字程序
DL:
MOVR6,#0FFH
DL1:
DJNZR6,DL1
DJNZR7,DL
RET
END
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 复习 02