单片机简答题汇总单片机期末考试.docx
《单片机简答题汇总单片机期末考试.docx》由会员分享,可在线阅读,更多相关《单片机简答题汇总单片机期末考试.docx(12页珍藏版)》请在冰豆网上搜索。
单片机简答题汇总单片机期末考试
单片机简答题
1、什么是ISP技术,采用ISP技术的单片机有什么优点?
ISP称为在线系统可编程技术。
在ISP技术基础上,首先实现了系统程序的串行编程写入,使得不必将焊接在PCB印刷电路板的芯片取下,就可直接将程序下载到单片机的程序存储器中,其次,基于ISP技术的实现,使模拟仿真开发技术重新兴起。
利用IAP技术,实现了用户可随时根据需要对原有的系统方便地进行在线更新软件、修改软件,还能实现对系统软件的远程诊断、远程调试和远程更新。
2.说明单片机的RAM,FlashROM,EEPROM用途和特点?
随机存储器RAM。
在单片机中,RAM是用来存储系统程序在运行期间的工作量和临时数据的。
片内集成的RAM容量增加,不仅减少了在偏外扩展RAM的必要性,同时提高了系统的可靠性。
使单片机嵌入式系统的软件设计思想和方法有了许多的改变和发展。
FlashROM。
这种类型的单片机可供用户多次擦除和写入程序代码。
可实现大与1万次的写入操作。
内部集成的Flashrom不仅为用户在嵌入式系统的设计,开发和调试带来了极大的方便。
而且也适用于大批量产品的生产,并为产品的更新换代提供了更广阔的空间。
电可擦除存储器EEPROM。
这类存储器用于存放一些永久或比肩固定的系统参数,他的可擦写次数大于10万次。
具有掉电后不丢失数据的特点,并且通过体统程序可以随时修改。
3.ATmega16堆栈的工作过程和堆栈的作用?
AVR堆栈有自动硬件进栈(执行调用指令,响应中断)、自动硬件出栈(执行调用返回指令RET和中断返回指令RETI)和人工进/出栈(进栈指令PUSH和出栈POP指令)等指令。
堆栈主要应用于快速、便捷地保存临时数据、局部变量和中断调用或子程序调用的返回地址。
4、AVR复位方式有哪几种?
上电复位、外部复位、掉电检测复位、看门狗复位、JTAGAVR复位。
5、ATmega16单片机的中断系统采用两级控制,它是如何控制的?
当单片机检测到某个终端元产生符合条件的中断信号时,其硬件会自动将该中断标志位置“1”,这就以为着有中断信号产生并向MCU申请中断。
为了合理控制中断响应,在单片机内部还有相关的用于中断控制的中断允许标志位。
最重要的是全局中断标志位,当该标志位为“0”的时候,表示禁止MCU响应所以的可屏蔽中断的响应。
此时不管有无中断产生,MCU不会响应任何的中断请求。
只有全局中断允许标志位“1”时,才为MCU响应中断请求打开第一道闸门。
MCU响应中断请求的第二道闸门是每个中断源所具有的个子独立的中断允许标志位。
6、ATmega16单片机有几个外部中断,有几种触发方式?
ATmega16共有21个中断源,包含1个非屏蔽中断(RESET)、3个外部中断(INT0、INT1、INT2)(电平变化或者状态触发)和17个内部中断。
3种触发方式:
脉冲的上跳沿或下降沿(上升沿触发型或下降沿触发型)、高电平或低电平(电平触发型)、电平的变化(状态变化触发型)。
7、AVR八位定时器/计时器有几种工作方式,分别是什么?
4种:
普通模式、快速PWM模式、比较匹配清0计数器CTC模式、相位可调PWM模式。
8、简述快速PWM的工作过程?
计数器为单程向上计数器:
从0x00一直加到0xFF,在下一个计数脉冲来的时候便恢复,为0x00.然后开始加1计数。
9、简述相位修正PWM的工作过程?
计数器为双程计数器:
从0x00一直加到0xFF,在下一个计数脉冲达到时改变计数方向,从0xFF开始减1计数到0x00。
10、简述CTC模式定时器的工作过程?
计数器为单向加1计数器,一旦寄存器TCNT0的值与OCR0的设定值相等,就将计数器TCNT0清0为0x00,然后继续向上加1计数。
11、若采用定时器0的快速PWM模式,使用内部时钟,不经过分频,将OCR0的值设置为155,则输出的PWM的占空比是多少?
写出详细计算过程.
12、简述普通模式下定时器的工作过程?
计数器为单向加1计数器,一旦寄存器TCNT0的值达到0xFF(上限值),在下一个计数脉冲到来的时候,便恢复0x00,并继续单向加1。
定时器四种工作模式比较表
模式名称
初值
满值
频率
普通模式
由TCNT0设置
255
f=fclk/2N(满-初+1)
CTC模式
0
OCR0设置
f=fclk/2N(OCR0+1)
快速PWM模式
0
0xFF
在正向比较匹配输出模式下,当TCNT0与OCR0比较匹配时清零OC0;当TCNT0从OxFF到Ox00时,置位OC0;
f=fclk/256N
相位修正PWM模式
0
0xFF
在正向比较匹配输出模式下,当TCNT0的计数值与OCR0的值比较匹配时,清零OC0;打那个TCNT0的值与OCR0相同时,置位OC0;
f=fclk/510N
TCNT0是定时器0的计数寄存器,作用是对定时器0的脉冲计数。
OCR0是定时器0的输出比较寄存器,作用是存放定时器0的比较匹配值。
定时器1的计数寄存器是TCNT1A,TCNT1B。
定时器做外部时钟来源时,N的取值只有1;
定时器做内部时钟来源时,N的取值有1、2、4、8;
15、什么是IAP技术?
IAP与ISP的本质区别是什么?
说明其主要用途。
IAP是在ISP基础上实现的,使模拟仿真开发计数重新兴起,在单时钟、单指令运行的RISC结构的单片机中,可实现PC机通过串行电缆对目标系统的在线仿真调试,在ISP技术应用的基础上,又发展了IAP技术,也称为应用可编程技术,利用IAP计数,实现了哟过户可随时根据需要对原有系统方便地在线更新软件,修改软件,还能实现对系统软件的远程诊断、远程调试、和远程更新。
16、典型单片机由哪几部分组成?
每部分的基本功能和作用是什么?
单片机的基本组成包括CPU、数据寄存器、程序存储器、输入接口、输出借口。
17、了解AVR单片机的主要特点和性能。
程序寄存器为价格低廉,可擦写1万次以上,指令长度单元为16位的FlashROM.数据存储器为8位。
采用COMS技术和PISC架构,实现告诉、低功耗、休眠功能。
高度保密
工业级产品
超功能精简指令。
程序写入器件时,可使用并行输入方式。
也可以用串行在线下载、在线应用下载。
单片机内集成有模拟比较器,可组成廉价的A/D转换器。
18、熟悉ATmega16的外围引脚名称和基本作用。
电源、系统晶振、芯片复位引脚
芯片供电输入引脚,使用时连接到电源正极。
A
端口A和片内ADC模拟电路电源输入引脚,不使用ADC时,直接连接到电源正极;使用ADC时,应通过一个低通电源滤波器与
连接。
APEF使用ADC时,可作为外部ADC参考源的输入引脚。
GND芯片接地引脚,使用时接地。
XTAL2片内反相振荡放大器的输出端。
XTAL1片内方向振荡放大器和内部时钟操作电路的输入端。
芯片复位输入引脚。
19、说明AVR单片机I/O寄存器的作用和功能?
I/O引脚一共32只。
分为PA.PB,PC.PD4个8位端口,他们全是可编程控制的多功能复用的I/O引脚。
4个端口的第一功能是通过双向数字输入/输出口,其中每一位都可以由指令设置为独立的输入口或输出口。
在5V工作电压下,输出高电平时,每个引脚可输出高达20mA的驱动电流,而输入低电平时,每个引脚可吸收最大为40mA的电流、大部分I/O口都具备双重功能。
可分别与各种不同功能的外围接口电路组合成一些可以完成特殊功能的I/O口。
如定时器、计数器等。
20、ATMEGA16采用JTAG下载时,占用了哪个端口?
是何形式编程方式?
21、ATmega16单片机总线采用的是哈佛结构,简要说明其主要特点?
哈佛结构的计算机由CPU、程序存储器和数据存储器组成,程序存储器和数据存储器采用不同的总线,从而提供了较大的存储器带宽,使数据的移动和交换更加方便,尤其提供了较高的数字信号处理性能。
以串行总线方式为主的外围扩展技术具有方便、灵活、电路系统简单及占用I/O资源少等特点。
22、AVR单片机I/O口三个寄存器的名称和作用是什么?
当I/O口用于输入和输出时如何设置和应用这三个寄存器?
DDRXn
PORTXn
PUD
I/O方式
内部上拉电阻
引脚状态说明
0
0
X
输入
无效
三态(高组)
0
1/0
0
输入
有效/无效
有效时外部引脚拉低输出电流(uA)
0
X
1
输入
无效
三态(高阻)
1
0
X
输出
无效
推挽0输出,吸收电流(mA)
1
1
X
输出
无效
推挽1输出,输出电流(mA)
方向控制寄存器DDRx、数据寄存器PORTx和输入引脚寄存器PINx;
当DDRx=1时,I/O口处于输出方式。
当PORTx=1时,I/O口引脚呈现高电平,PORTx=0时,I/O口为低电平。
当DDRx=0时,I/O口处于输入方式。
此时引脚寄存器PINx中的数据就是外部引脚的实际电平。
DDRxn输出方式
PORTxn为1
PORTxn为0
输入(DDRxn=OxFF)
上拉电阻使能
不带上拉电阻
输出(DDRxn=0X00)
引脚输出高电平
引脚输出低电平
不管DDRxn内容是什么,向PINxn写1,就会使PORTxn值在0,1之间来回变化
AVR单片机的DDRX寄存器的作用是:
控制I/O口的输入输出方式,1为输出,0为输入。
PORTX寄存器的作用是:
当I/O输入时,是否使用上啦电阻,内部输出时,设置I/O口输出电平。
23、给出一个8位数码管显示器静态显示和动态扫描显示的设计方案,并比较这两个方案。
优点
缺点
静态显示
显示稳定、显示亮度高、程序简单
占用硬件资源大、耗电量大
动态显示
硬件资源小、耗电量小
稳定性差、程序设计复杂、MCU负担重
24、说明在动态扫描显示设计中,如何保证每个显示器的亮度一致,在系统应用中没有闪烁和熄灭现象。
为了保证各个数码管的显示效果不产生闪烁,则首先应保证在1s内循环扫描6个数码管的次数>25次,这里是利用了人眼的影像滞留效应。
在25ms时间间隔中,要逐一点亮6个数码管,而且每个数码管点亮的持续时间要相同,这样亮度才均匀。
还要考虑为每个数码管点亮的持续时间,如果这个时间长,则数码管的亮度高,否则暗。
25、ATmega16有几组I/O端口,了解I/O口上拉作用,AVR如何实现上拉?
上拉有什么作用?
简要说明之?
可控制的引脚内部上拉内阻,每一位引脚内部都有独立的、可通过编程设置的。
设定为上拉有效或无效的内部上啦电阻。
当I/O口用于输入状态。
且内部上啦电阻激活时,剐外部引脚被拉低,则构成电流源输出电流。
27、什么是中断?
计算机采取中断有什么好处?
说明中断的作用和用途。
中断是指计算机自动响应一个中断请求信号,暂时停止(中断)当前程序的执行,转而执行行为外部设备服务的程序,并在执行完服务程序后自动返回原程序执行的过程。
优点:
实现实时处理、实现分时操作、进行故障处理、待机状态的唤醒。
用途:
在系统运行过程中出现的难以预料的情况或故障,如掉电,可以通过中断系统即使向MCU请求中断。
28、什么叫中断源?
ATmega16有那些中断源?
各有什么特点?
中断源是指能够向MCU发出中断请求信号的部件和设备。
共有21个中断源。
包括内部中断源(定时器、串行通信口、摸/数转换器等)和外部中断源(外部设备、掉电)
29、请详细说明AVR中断响应的全过程。
在这个过程中,硬件完成了哪些工作,软件完成了哪些工作?
AVR在响应中断请求时,MCU会用4个始终周期自动、顺序地完成一下任务:
清0状态寄存器SREG中的全局中断允许标志为
,禁止响应其他中断。
将被响应中断的标志位清0(注意:
紧对于部分中断有此操作)。
讲中断断点的地址(即当前程序计数器PC的值)压入堆栈,并将SP寄存器中的堆栈指针减2;
自动将相应的中断向量地址压程序计数器PC,即强行转入执行中断入口地址处的指令。
AVR的中断响应和返回过程主要都是由硬件自动完成的。
中断现场的保护工作需要用户在自己边写的中断服务程序中,通过软件完成,以保证主程序在被打断时所使用的标志位和临时寄存器等不会被中断服务程序改变。
30、AVR的外部中断有几种触发方式?
适合那些应用场合?
4种中断触发方式:
上升沿触发、下降沿触发、任意电平变化触发、低电平触发;
低电平触发是不带中断标志类型的,即只要中断输入引脚PD2或PD3保持低电平,那么将一直会产生终端申请。
MCU对INTO和INT1引脚上的上升或下降沿变化的触发,需要I/O时钟信号的存在。
属于同步边沿触发的中断类型。
MCU对INT2引脚闪搞的上升沿或下降沿变化的触发及低电平的触发,是通过异步方式检测的,不需要I/O时钟信号的存在。
如果使用低电平触发方式的中断作为唤醒源,那么将MCU从掉电模式中被唤醒时,电平拉低后仍需要维持一段时间才能将MCU唤醒。
32、简述定时计数器的基本工作原理,它是如何实现定时器和计数器功能的?
33、当定时计数器工作在普通模式和CTC模式时,都可以产生一个固定的定时中断如果要求精确的定时中断,采用那种模式比较好?
为什么?
[例题6-1]简易彩灯控制系统
#include
#include
voidmain(void)
{
unsignedcharposition=0;//position为控制位的位置
PORTA=0xFF;//PA口输入全“1”,LED全灭
DDRA=0xFF;//PA口工作方式为输出方式
while
(1)
{
PORTA=~(1<if(++position>=8)position=0;
delay_ms(1000);
};
}
[例题6-4]单个LED数码管字符显示控制
#include
#include
flashunsignedchar
led_7[16]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,
0x7C,0x39,0x5E,0x79,0x71};
bitpoint_on;
voidmain(void)
{
unsignedchari=0;
PORTA=0xFF;
DDRA=0xFF;
while
(1)
{
for(i=0;i<=15;i++)
{
PORTA=led_7[i];
if(position_on)PORTA|=0x80;
delay_ms(1000);
}
position_on=~position_on;
};
}
[例题5-2]
#include//包括器件配置定义的头文件,不能缺少
#defineucharunsignedchar
#defineuintunsignedint
//#include//包括延时函数定义的头文件,使用延时函数时不能缺少
voiddelay_ms(uintms)
{
uinti,j;
for(i=0;i{
for(j=0;j<570;j++);
}
}
voidmain(void)
{
//定义PortC口的工作方式
PORTB=0xff;//PC口的第0位输出"1",LED不亮
DDRB=0xff;//定义PC口的第0位为输出方式
//主循环
while
(1)
{
delay_ms(1000);//调用CVAVR提供的毫秒延时函数,延时1s
PORTB=~PORTB;//PC口第0位输出取反
};
}
[例题7-1]用案件控制的1位LED数码管显示系统
#include
#defineucharunsignedchar
unsignedcharconstled_7[16]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,
0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71};
unsignedcharcounter;
voidmain(void)
{
PORTA=0xFF;
DDRA=0xFF;
GICR|=0xc0;
MCUCR=0x0a;
GIFR=0xC0;
counter=0;
SREG=0X80;
while
(1)
{
PORTA=led_7[counter];
};
}
#pragmainterrupt_handlerint0_isr:
2
voidint0_isr(void)
{
if(++counter>=16)counter=0;
}
#pragmainterrupt_handlerint1_isr:
3
voidint1_isr(void)
{
if(counter)--counter;
elsecounter=15;
}
[例题8-1]外部事件计数器
#include
//Timer0溢出中断服务
interrupt{TIM0_OVF}voidtimer0_ovf_isr(void)
{
TCNT0=0x83;//重新设置TCNT0的初值
PORTA.0=~PORTA.0//PA0取反输出
}
voidmain(void)
{
PORTA=0x01;
DDRA=0x01;//设置PA0输出方式
PORTB=0x01;
DDRAB0x00;//设置PB0(T0)输出方式
//T/C0初始化
TCCR0=0X07;
TCNT0=0x83;
OCR0=0x00;
TIMSK=0x01;//允许T0溢出中断
#asm(“sei”)//使能全局中断
while
(1)
{
//Placeyourcodehere
};
}
[例题8-2]2N分频系统设计
#include
//Timer0比较匹配中断服务
interrupt{TIM0_COMP}voidtimer0_ovf_isr(void)
{
PORTA.0=~PORTA.0;//PA取反输出
}
Voidmain(void)
{
PORTA=0x01;
DDRA=0x01;
PORTB=0x01;
DDRB=0x00;
//t/C0初始化
TCCR0=0X0F;//T/C0工作于CTC模式,T0上升沿触发
TCNT0=0x00;
OCRO=0x7C;//设置OCR0的比较值为124(0x7C)
TIMSK=0x02;//允许T/C0的比较匹配中断
#asm(“sei”)
while
(1)
{
//Placeyourcodehere
};
}