单片机期末复习题库
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
TL0 = T100us;
IE = 0x82; // EA=1, IT0 = 1
LEDBuf = 0;
LED = 0;
C100us = Tick;
TR0 = 1; //开始定时
while (1) {
LED = LEDBuf;
}
}
7.八位A/D转换器:
#define mode 0x82
xdata unsigned char CTL _at_ 0x9003;
return(CS0809); //读入结果
}
(中断方式读回A/D结果)
(void adc_int0()interrupt 0{
unsigned char b;
b = Read0809();
PA = b;
CS0809 = 0;
}
main(){ TCON=0x01;
IE=0x81;
CTL=mode;
CS0809 = 0;
解答题:
1.设单片机的fosc=12MHz,时器处于不同的工作方式时,最大计数范围分别是多少?
解答: 方式0的计数范围为: 1~8192 方式1的计数范围为: 1~65536 方式2的计数范围为:1~256 方式3的计数范围为: 1~256
2、写出MCS-51的所有中断源,并说明哪些中断源在响应中断时能自动清除中断标志,哪些中断源必须用软件清除,哪些由硬件清除?
6.程序计数器寄存器PC的作用? 复位后PC中值各为何?
答:程序计数器PC时一个16位的计数器,其内容为将要执行的指令的首地址,寻址范围达64KB,PC具有自动加1功能,以实现程序的顺序执行。PC不可寻址,无法对它进行读写。复位后,PC=0000H,使单片机从OOOOH单元开始执行。
7.89C51单片机时钟振荡频率为11.0592 MHZ,选用定时器T1工作
p1_0=!p1_0;//输出翻转电平
main(){
ITO=1;//中断初始化
IE=0x81;//中断初始化
while(1);//无限循环
}
P112 :实例1(中断方式) ;
#include<reg51.h>
sbitP2_0=P2^0;
timerl( )interrupt3{ //T1中断函数
P2_0=!P2_0;//P2.0取反
11.51单片机中5个中断源的名称和对应的中断服务程序入口地址是什么?
外部中断0,入口地址0003H 定时器TO,入口地址OOOBH 外部中断1,入口地址0013H 定时器T1,入口地址001BH 串行口中断,入口地址0023H
12.8051的定时器/计数器进行初始化的步骤是什么?
答:(1)工作方式一编程TMOD寄存
void main()
{
unsigned int index;
unsigned char xdata * ptr;
ptr = &Buffer; //起始地址
for (index = 0; index <= 255; index++) {
*ptr++ = 0(0xff); //清0,地址加一,如果置offh}
xdata unsigned char PA _at_ 0x9000;
xdata unsigned char CS0809 _at_ 0x8000;
unsigned char Read0809()
{ unsigned char i;
CS0809 = 0; //起动A/D
for (i=0; i<0x20; i++) ; //延时> 100us
模式2作为波特率发生器,波特率为4800b/s,求初值。
解:设置SMOD=0
X≌256-[11.0592x106x(0+1) ]/[384x4800]=250=FAH
8.消除按键的抖动,通常有哪两种方法? 简述什么是软件去抖动。
答:一种是软件去抖动,另一种是硬件去抖动。软件去抖动,就是通过设计延时程序,跳过按键机械抖动的过程,在按键稳定闭合或者稳定断开时,判断电平,从而得到正确的判断结果。
sbitP2_0=P2^0;
timerO()interrupt1{//TO 中断函数
P2_0=!P2_0;//取反P2^0
main(){
TMOD=0x02;//设置TO 定时方式2
THO=0x06;//计数初值a= (256- 250)% 256= 6
TLO=0x06;
EA=1;//开总中断
ETO=1;
void T0Int() interrupt 1
{ C100us--;
if (C100us == 0) {
C100us = Tick; // 100us记数器为0,重置记数器
LEDBuf = !LEDBuf; //取反LED
}
}
void main()
{
TMOD = 0x02; //方式2,定时器
TH0 = T100us;
}
5.外部中断技术,用单次脉冲申请中断,在中断处理程序中对输出信号进行反转
#include <reg51.h>
sbit LED = P1^0;
bit LEDBuf;
void ExtInt0() interrupt 0(2)//(若将中断源改为ITT1)
{ LEDBuf = !LEDBuf;
LED = LEDBuf;
TR0=1;//启动TO
while(1);
}
第7章: 上课补充的串口实例
P172: 实例8,
# include <reg51.h>
# include <absacc.h>
# define AD_IN7 XBYTE[0xfeff」 //IN7 通道访问地址
sbit ad_busy= P3^3; //A/D 转换结束标志定义
while(1);})
main()
{unsigned char b;
CTL = mode;
while(1){ b = Read0809();
PA = b; }}
3、分别写出单片机的三种总线是由哪些信号构成的。
解答: 地址总线: P2和PO端口。P2-提供高8位地址。PO一提供低8位地址。
数据总线: PO端口
控制总线: (1)/EA(2)ALE (3)/PSEN (4) /RD (5) /WR (6)空闲
的高位地址线等
4、ALE是什么信号?ALE信号的作用是什么?
解答: (1)地址锁存允许信号。(2)当单片机访问外部存储器时,该引脚的输出信号ALE用于锁存PO端口的低8位地址。ALE输出的频率为振荡频率的1/6。
5.位地址00H~7FH和内RAM字节地址00H~7FH编址相同。读写时会不会搞错?为什么?
解答:位地址00H~7FH和内RAM字节地址00H~7FH都是16进制数表示的地址,虽然编址相同,但两种地址分别出现在两种不同的指令中,在位操作指令中的地址是位地址,在字节操作指令中的地址是内RAM字节地址,在指令执行中,CPU不会搞错。
(2)计数初值,并装载到TH和TL;器;)
(3)中断方式工作时,开CPU中断和源中断--编程IE寄存器;
(4)启动定时器/计数器--编程TCON中TR1或TRO位。
单片机练习题
教材上的
P89:实例1(中断方式) ;
# include <reg51.h>
sbit p1_0=P1^0;//定义位变量
int0 srv( )interrupt 0{//中断服务函数
TH1=0xfc;//装载计数初值
TL1=0x18;
}
main(){
TMOD=0x10;//T1定时方式1
TH1=0xfc;//装载计数初值
TL1=0x18;
EA=1;//开总中断
ET1=1;//开T1中断
TR1=1;//启动T1
while(1);
}
P113:实例2
#include<reg51.h>
}
void main()
{ LEDBuf = 0;
LED = 0;
TCON = 0x01(0x04); //外部中断0下降沿触发(若将中断源改为ITT1)
IE = 0x81(0x84); //打开外部中断允许位(EX0)及总中断允许位(EA)(若将中断源改为ITT1)
while (1) ;
}
6.8051内部计数器
#include <reg51.h>
#define Tick 10000 // 10000 x 100us = 1s
#define T100us (256-50) // 100us时间常数(6M)
unsigned int C100us; // 100us记数单元
bit LEDBuf;
sbit LED = P1^0;
答:外部中断/INTO、定时器/计数器中断外部中断INT1、定时器/计数器中断TO、对于有些中断源,CPUT1串行口中断。在响应中断后会自动清除中断标志,如定时器溢出标志TFO、TF1和边沿触发方式下的外部中断标志IEO、IE1;而有些中断标志不会自动清除,只能由用户用软件清除,如串行口接收发送中断标志RI、TI;在电平触发方式下的外部中断标志IEO和IE1则是根据引脚/NT0和/INT1的电平变化的,CPU无法直接干预,需在引脚外加硬件(如D触发器) 使其自动撤销外部中断请求。
9.试编写一段对中断系统初始化的程序,使之允许/INTO、/INT1、TO和串行口中断,且使TO中断为高优先级中断。
解: MOV IE,#97H MOV IP,#02H 或
IE=0x97; IP=0x02;
10.串行口工作方式由SCON哪几位决定的,列表说明各工作方式的功能及波特率。
答: 串行口工作方式的选择由SCON的SMO、SM1这两位决定的。各工作方式的功能及波特率表格见书上
void maห้องสมุดไป่ตู้n (void) {
while (1) {
AD_IN7 =O; //启动IN7 通道A/D 转换
while(ad_busy== 1); //等待A/D 转换结束
P1=AD_IN7; //转换数据显示
}
实验: 实验1,5,6,7
1.存储器块清零
xdata unsigned char Buffer[256] _at_ 0x4000;
IE = 0x82; // EA=1, IT0 = 1
LEDBuf = 0;
LED = 0;
C100us = Tick;
TR0 = 1; //开始定时
while (1) {
LED = LEDBuf;
}
}
7.八位A/D转换器:
#define mode 0x82
xdata unsigned char CTL _at_ 0x9003;
return(CS0809); //读入结果
}
(中断方式读回A/D结果)
(void adc_int0()interrupt 0{
unsigned char b;
b = Read0809();
PA = b;
CS0809 = 0;
}
main(){ TCON=0x01;
IE=0x81;
CTL=mode;
CS0809 = 0;
解答题:
1.设单片机的fosc=12MHz,时器处于不同的工作方式时,最大计数范围分别是多少?
解答: 方式0的计数范围为: 1~8192 方式1的计数范围为: 1~65536 方式2的计数范围为:1~256 方式3的计数范围为: 1~256
2、写出MCS-51的所有中断源,并说明哪些中断源在响应中断时能自动清除中断标志,哪些中断源必须用软件清除,哪些由硬件清除?
6.程序计数器寄存器PC的作用? 复位后PC中值各为何?
答:程序计数器PC时一个16位的计数器,其内容为将要执行的指令的首地址,寻址范围达64KB,PC具有自动加1功能,以实现程序的顺序执行。PC不可寻址,无法对它进行读写。复位后,PC=0000H,使单片机从OOOOH单元开始执行。
7.89C51单片机时钟振荡频率为11.0592 MHZ,选用定时器T1工作
p1_0=!p1_0;//输出翻转电平
main(){
ITO=1;//中断初始化
IE=0x81;//中断初始化
while(1);//无限循环
}
P112 :实例1(中断方式) ;
#include<reg51.h>
sbitP2_0=P2^0;
timerl( )interrupt3{ //T1中断函数
P2_0=!P2_0;//P2.0取反
11.51单片机中5个中断源的名称和对应的中断服务程序入口地址是什么?
外部中断0,入口地址0003H 定时器TO,入口地址OOOBH 外部中断1,入口地址0013H 定时器T1,入口地址001BH 串行口中断,入口地址0023H
12.8051的定时器/计数器进行初始化的步骤是什么?
答:(1)工作方式一编程TMOD寄存
void main()
{
unsigned int index;
unsigned char xdata * ptr;
ptr = &Buffer; //起始地址
for (index = 0; index <= 255; index++) {
*ptr++ = 0(0xff); //清0,地址加一,如果置offh}
xdata unsigned char PA _at_ 0x9000;
xdata unsigned char CS0809 _at_ 0x8000;
unsigned char Read0809()
{ unsigned char i;
CS0809 = 0; //起动A/D
for (i=0; i<0x20; i++) ; //延时> 100us
模式2作为波特率发生器,波特率为4800b/s,求初值。
解:设置SMOD=0
X≌256-[11.0592x106x(0+1) ]/[384x4800]=250=FAH
8.消除按键的抖动,通常有哪两种方法? 简述什么是软件去抖动。
答:一种是软件去抖动,另一种是硬件去抖动。软件去抖动,就是通过设计延时程序,跳过按键机械抖动的过程,在按键稳定闭合或者稳定断开时,判断电平,从而得到正确的判断结果。
sbitP2_0=P2^0;
timerO()interrupt1{//TO 中断函数
P2_0=!P2_0;//取反P2^0
main(){
TMOD=0x02;//设置TO 定时方式2
THO=0x06;//计数初值a= (256- 250)% 256= 6
TLO=0x06;
EA=1;//开总中断
ETO=1;
void T0Int() interrupt 1
{ C100us--;
if (C100us == 0) {
C100us = Tick; // 100us记数器为0,重置记数器
LEDBuf = !LEDBuf; //取反LED
}
}
void main()
{
TMOD = 0x02; //方式2,定时器
TH0 = T100us;
}
5.外部中断技术,用单次脉冲申请中断,在中断处理程序中对输出信号进行反转
#include <reg51.h>
sbit LED = P1^0;
bit LEDBuf;
void ExtInt0() interrupt 0(2)//(若将中断源改为ITT1)
{ LEDBuf = !LEDBuf;
LED = LEDBuf;
TR0=1;//启动TO
while(1);
}
第7章: 上课补充的串口实例
P172: 实例8,
# include <reg51.h>
# include <absacc.h>
# define AD_IN7 XBYTE[0xfeff」 //IN7 通道访问地址
sbit ad_busy= P3^3; //A/D 转换结束标志定义
while(1);})
main()
{unsigned char b;
CTL = mode;
while(1){ b = Read0809();
PA = b; }}
3、分别写出单片机的三种总线是由哪些信号构成的。
解答: 地址总线: P2和PO端口。P2-提供高8位地址。PO一提供低8位地址。
数据总线: PO端口
控制总线: (1)/EA(2)ALE (3)/PSEN (4) /RD (5) /WR (6)空闲
的高位地址线等
4、ALE是什么信号?ALE信号的作用是什么?
解答: (1)地址锁存允许信号。(2)当单片机访问外部存储器时,该引脚的输出信号ALE用于锁存PO端口的低8位地址。ALE输出的频率为振荡频率的1/6。
5.位地址00H~7FH和内RAM字节地址00H~7FH编址相同。读写时会不会搞错?为什么?
解答:位地址00H~7FH和内RAM字节地址00H~7FH都是16进制数表示的地址,虽然编址相同,但两种地址分别出现在两种不同的指令中,在位操作指令中的地址是位地址,在字节操作指令中的地址是内RAM字节地址,在指令执行中,CPU不会搞错。
(2)计数初值,并装载到TH和TL;器;)
(3)中断方式工作时,开CPU中断和源中断--编程IE寄存器;
(4)启动定时器/计数器--编程TCON中TR1或TRO位。
单片机练习题
教材上的
P89:实例1(中断方式) ;
# include <reg51.h>
sbit p1_0=P1^0;//定义位变量
int0 srv( )interrupt 0{//中断服务函数
TH1=0xfc;//装载计数初值
TL1=0x18;
}
main(){
TMOD=0x10;//T1定时方式1
TH1=0xfc;//装载计数初值
TL1=0x18;
EA=1;//开总中断
ET1=1;//开T1中断
TR1=1;//启动T1
while(1);
}
P113:实例2
#include<reg51.h>
}
void main()
{ LEDBuf = 0;
LED = 0;
TCON = 0x01(0x04); //外部中断0下降沿触发(若将中断源改为ITT1)
IE = 0x81(0x84); //打开外部中断允许位(EX0)及总中断允许位(EA)(若将中断源改为ITT1)
while (1) ;
}
6.8051内部计数器
#include <reg51.h>
#define Tick 10000 // 10000 x 100us = 1s
#define T100us (256-50) // 100us时间常数(6M)
unsigned int C100us; // 100us记数单元
bit LEDBuf;
sbit LED = P1^0;
答:外部中断/INTO、定时器/计数器中断外部中断INT1、定时器/计数器中断TO、对于有些中断源,CPUT1串行口中断。在响应中断后会自动清除中断标志,如定时器溢出标志TFO、TF1和边沿触发方式下的外部中断标志IEO、IE1;而有些中断标志不会自动清除,只能由用户用软件清除,如串行口接收发送中断标志RI、TI;在电平触发方式下的外部中断标志IEO和IE1则是根据引脚/NT0和/INT1的电平变化的,CPU无法直接干预,需在引脚外加硬件(如D触发器) 使其自动撤销外部中断请求。
9.试编写一段对中断系统初始化的程序,使之允许/INTO、/INT1、TO和串行口中断,且使TO中断为高优先级中断。
解: MOV IE,#97H MOV IP,#02H 或
IE=0x97; IP=0x02;
10.串行口工作方式由SCON哪几位决定的,列表说明各工作方式的功能及波特率。
答: 串行口工作方式的选择由SCON的SMO、SM1这两位决定的。各工作方式的功能及波特率表格见书上
void maห้องสมุดไป่ตู้n (void) {
while (1) {
AD_IN7 =O; //启动IN7 通道A/D 转换
while(ad_busy== 1); //等待A/D 转换结束
P1=AD_IN7; //转换数据显示
}
实验: 实验1,5,6,7
1.存储器块清零
xdata unsigned char Buffer[256] _at_ 0x4000;