微控制器原理与应用复习
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
微控制器原理与应用
一、简答题
1.MC9S12DG128 MCU核心包括哪些部分?
2.MC9S12DGl28微控制器片内资源包括哪些?
3.MC9S12DG128有几种操作模式?MC9S12DG128有哪两种引脚封装形式?分别适用哪些操作模式
4.S12系列微控制器有哪些时钟信号,分别提供给哪些部分? MC9S12DG128片内总线时钟频率最高可达多少?
5.
6.简要说明程序状态寄存器CCR各位的作用。
7.S12CPU寄存器具有哪些特点?
9.累加器有哪些作用? S12CPU有哪些累加器?
10.ROM和RAM存储器特点,用途
11. EEPROM存储器特点?
12.微控制器存储器的主要类型有哪几种?现在应用比较广泛的是哪几种?说出它们主要特点。
13.微控制器I/O端口功能? 12系列微控制器的外围接口采用设计方式?
14.S12系列微控制器I/O技术包括哪些量的输入/输出?S12外围接口设计特点?有哪些端口?
15.S12 MCU接口功能的特点?I/O口最多可达到多少个?与用户自行扩充的I/O口有什么区别?
16.S12的中断可分为哪两种,怎样控制? 有什么不同?
17.S12中断优先级排序怎样确定?
19.S12增强型定时器模块作用?
20.什么是输入捕捉?MC9S12DGl28每个IC通道组由哪些部分组成?
第 1 页共12 页
21. S12微控制器有哪两种产生PWM波形方法?并说出S12PWM模块的特性。
22.比较S12微控制器产生PWM波形两种方法优缺点?并说出MC9S12DGl28PWM模块的结构。
23.在S12微控制器PWM模块,什么是左对齐方式?左对齐方式整个输出周期?左对齐方式占空比?在S12微控制器PWM
24.在S12微控制器PWM模块,什么是中心对齐方式?整个输出周期?占空比?
1. 注解如下C程序,并说出功能。
/* This function waits for th timer overflow.Then it changes the LEDs bargraph display */
#include <hidef.h> /* common defines and macros */
#include <MC9S12XS128.h> /* derivative information */
#pragma LINK_INFO DERIVATIVE "mc9s12xs128"
int counter;
void TimerOverflow(void)
{ while (TCNT != 0x0000);
while (TCNT == 0x0000);
counter++;
if (counter == 8) PORTB = 0x7f; //
if (counter == 7) PORTB = 0xbf;
if (counter == 6) PORTB = 0xdf; //
if (counter == 5) PORTB = 0xef;
if (counter == 4) PORTB = 0xf7; //
if (counter == 3) PORTB = 0xfb;
if (counter == 2) PORTB = 0xfd; //
if (counter == 1) PORTB = 0xfe;
}
void main(void)
{
TSCR1 = 0x80; //使用IC/OC功能
TSCR2 = 0x03; //禁止定时器溢出中断,计数器自由运行,预分频系数8
counter = 0;
DDRB=0xff; //
PORTB=0xff; //
asm{
nop
}
第 2 页共12 页
for (;;)
{
TimerOverflow();
if (counter >= 8)
{ counter = 0;
TSCR2 = 0x05;
}
}
}
程序功能:Main初始化定时器计数器,B口工作方式和初始状态后,先调用TimerOverflow函数,函数检测计数TCNT值返0后,变量counter加1,根据counter 值,B口相应位输出低电平,然后判别,当counter计到8时, counter返回0计数,以此循环调用TimerOverflow函数和判别。
如用B口输出低电平点亮发光二极管,则可实现走马灯实验。
2.void setbusclock( void)
{
CLKSEL=0X00; //disengage PLL to system
PLLCTL_PLLON=1; //turn on PLL
SYNR =0xc0 | 0x05;
REFDV=0x80 | 0x01;
POSTDIV=0x00; //pllclock=2*osc*(1+SYNR)/(1+REFDV)=96MHz;
_asm(nop); //BUS CLOCK=48M
_asm(nop);
while(!(CRGFLG_LOCK==1)); //when pll is steady ,then use it;
CLKSEL_PLLSEL =1; //engage PLL to system;
void PWMInit(void) //ZHUTAO 23级联
{
PWME = 0x00; //PWM禁止
PWMCTL = 0x30; //通道01,23级联
PWMPRCLK= 0x55; //ClockA=ClockB=40/32=1.25MHz
//PWMSCLA=3; //CLOCKA/6; 1.25M/6=208K
//PWMSCLB=3; //CLOCKB/2;
PWMCLK = 0X00; //时钟来源选择pwm01 选择ClockA,pwm23 选择ClockB
PWMPOL = 0XFF; //PWM输出起始为高电平
PWMCAE = 0X00; //左对齐方式
PWMPER01= 20000; //设定通道01输出频率(1.25M/2.5k=50Hz),控制方向
第 3 页共12 页
PWMPER23=3000;
PWMDTY01=2250;
PWMDTY23=0; //速度初始化
PWME = 0x0F;
3. 注解程序,并说出功能
程序段如下:
#include<hidef.h>
#include<mc9s12dgl28.h>
#pragma LINK_INFODERIVATIVE”mc9s12dgl28b”
unsigned char PulseCnt;
voidmain(void)
{
asm sei;//
TIOS=0x00;//
TSCRl=0x80; //
TSCR2=0x01; //
TCTL4=0x02; //
TIE=0x01;//
TFLGl=0x01;//
DLYCT=0x01;//
PulseCnt=0x00 //
asm cli;
for(;;){}
}
功能:设置TC0为输入捕捉功能,中断使能,利用输入捕捉功能对定时器通道0的脉冲信号(下降沿)进行计数。
4. 注解程序,并说出功能
程序段如下:
#include<hide.h>
#include<mc9s12dQ土28.h>
#pragma LINK_INFO DERIVATIVE”mc9s12dgl28b”
unsigned char PulseCnt;
Void main(void)
{
asm sei;//
第 4 页共12 页
ICSYS=0x03;//
TIOS=0x00;//
PACTL=0x54;//
DLYCT=0x01;//
PulseCnt=0;//
MCPLQPOLP0=0;//
MCFLCG_MCZF=1;//
MCCTL=0x5C;//
MCCNT=OxFFFF;//
EnableInterrupts;
for(;;)
{ }
}
功能:设置脉冲累加器的16位汁数器B通道,设置模数计数器的预计值定时100 ms,中断使能。
5. 注解程序,并说出功能
程序段如下:
void main(void)
{
unsigned int index;
unsigned int cnt;
unsigned char distab[8] = {0x01, 0x02, 0x04, 0x08, 0xl0, 0x20, 0x40, 0x80};
SPI_Init ( ) //
for(;; )
{
if( index > 7) //
{
index = 0 //
}
S PI_SendByte(distab[ index + + ] ) //
w hile(cnt -- ) //
}
void SPI_Init(void)
SPIOCR1 = 0X54; //
SPIOCR2 = 0X18; //
SPIOBR = 0X07; //
SPIOSRSTR = OXBO; //
void SPI_SendByte(unsigned char dar)
{
第 5 页共12 页
SPIODRSTR =dat; //
while((SPIF & 0X80) = 0);//
}
6. 注解程序,并说出功能
程序段如下:
//初始化SCI0
void Sci0Open(void)
{
SCIOBD = 52; //
SCIOCR1 = 0; //
SCIOCR2 = 0x2c; //
}
//读SCI
unsigned char Sci0Read()
{ if(SCIOSRi_RDRF = = 1) //
{
SCIOSRi_RDRF = 1; //
return SCIODRL; //
}
}
//写SCI
void SciOWrite(unsigned char chSend)
{
SCIOSRi_TDRE = 1; //
SCIODRL = chSend; //
Delay(5); //
}
//接收中断
interrupt void SCI0_ISR(void)
{ unsigned char chi
ch = Sci0Read( ) //
}
MC9S12DGl28片内资源包括8KB RAM、128KB FLASH、2KB EEPROM;SCI、SPI、PWM 串行接口模块:PWM模块可设置成4路8位或2路16位,可宽范围选择逻辑时钟频率;它还提供2个8路10位精度A/D转换器、控制器局域网模块CAN和增强型捕捉定时器,并支持背景调试模式(BDM)。
MCU核心包括具有单线背景调试接口(BDM)和运行监视功能的增强S12CPU;MCU的(FLASH、RAM、EEPROM)3种存储器;程序存储器的页面模式控制;PLL时钟和复位模块
第 6 页共12 页
COP;具有中断识别、读/写控制、工作模式等控制功能的系统综合模块 (SIM);可用于系统扩展的分时复用总线端口,其中A口、B口可作为外扩存储器或接口电路时的分时复用地址/数据总线,E口的部分口可作为控制总线;多电压调整器,包括数字电路和模拟电路电源电压。
MC9S12DG128有LQFP-112和 LQFP-80两种引脚封装形式,LQFP-80封装形式微控制器没有出用于扩展的端口,分别不适用扩展操作模式
MC9S2DGl28微控制器模式。
(1)用户模式
①普通和仿真操作模式:包括普通单片模式、普通扩展宽模式、普通扩展窄模式、仿真扩展宽模式和仿真扩展窄模式。
②特殊操作模式:包括带BDM的特殊单片模式、特殊测试模式(Freescale特有)和特殊设备模式(Freescale特有)。
(2)低功耗模式
低功耗模式包括:停止模式、伪停止模式和等待模式。
在每种模式下,都有其相应的默认内存映像和外部总线配置。
晶振时钟:时钟振荡电路提供,所有时钟信号的来源,也为MCU与其他外接芯片之间的通信提供可靠的同步时钟信号
内核时钟:提供HCSl2内核
总线时钟:是整个MCU系统的定时基准和工作同步脉冲,其频率固定为晶体频率的1/2。
当晶振频率为12 MHz时,总线时钟频率为6 MHz。
MC9S12DG128片内总线时钟频率最高可达25 MHz
C,它们反映了上一条指令执行结果的特征;第2部分是3个MCU控制位:中断屏蔽位X、I和STOP指令控制位S,这3位通常由软件设定,控制S12CPU的操作。
CCR是真正的专用寄存器,除C、H位之外,其他各位都不参与任何运算。
累加器作用可保存操作数及运算结果,一般具有移位功能.
S12CPU有2个8位累加器:累加器A和累加器B,累加器又可称为数据寄存器,因此累加器A和累加器B又分别称为寄存器A和寄存器B。
寄存器A和寄存器B加起来可看成一个16位寄存器D,其高8位在寄存器A,低8位在寄存器B。
实际上寄存器D和A、B指的是同一个寄存器,只是名字不同而已,D寄存器不受复位影响。
第7 页共12 页
累加器D、A、B主要用于算术运算,BCD调整指令只能使用累加器A。
8位乘法指令固定使用累加器A、B,16位乘法指令固定使用寄存器D、Y,除法指令固定使用寄存器D、X、Y,位检测指令只针对累加器A、B。
对于大多数算术运算指令,累加器用作目的寄存器。
S12CPU寄存器具有以下特点:
一般RAM存储器只能实现数据的读/写,而寄存器能够在读/写的同时还方便地通过指令实现移位、置位、清零、位测试等一系列复杂操作;
读/写寄存器中的数据传送速度最快,数据更新最快。
这也是寄存器区别与其他RAM 存储器的重要特点。
通常,微控制器内部的寄存器数量十分有限,MC9S12DGl28微控制器的内部寄存器为512字节,且寄存器功能各有侧重,应用范围较广。
S12CPU的5个内部寄存器D(A、B),X、Y,SP,PC,CCR、特点与使用。
其他功能寄存器的具体用法详见以后相关章节。
微控制器存储器的主要类型有:只读存储器(ROM)、随机存储器(RAM)、光可擦除可编程只读存储器(EPROM)、电可擦除可编程只读存储器(EEPROM)和闪存(FLASH)。
RAM、FLASH和EEPRO~I,各大公司推出的新型号中、高档次微控制器,几乎都集成有这3种存储器。
RAM是可读/写存储器,RAM是易失性存储器,即意味着一旦掉电就会丢失所有的数据。
它采用“随机访问”机制,每个地址的访问时间相等。
EEPROM是非易失性存储器。
使用一般DC电源就可以编程和擦除EEPROM,虽然它不能像RAM一样用程序直接写入数据,但可以用特殊的方法写入数据。
FLASH存储器具有电擦除、可编程、非易失和高速度等特性,FLASH对于单芯片应用系统是理想的程序存储模块,它允许在现场进行代码更新。
ROM是一种非易失性半导体存储器,其中,位于每个地址的二进制信息已被固定而不能改变。
用来永久保存不需要擦除的程序信息。
ROM保存的通常是最终的应用程序。
RAM是可读/写存储器,在微控制器中用于保存需要经常改变的数据。
RAM是易失性存储器,即意味着一旦掉电就会丢失所有的数据。
它采用“随机访问”机制,每个地址的访问时间相等。
EEPROM存储器具有可在线改写、掉电保持、保密、稳定等优点。
与RAM的读/写操作相比,EEPROM的写入速度较慢,需要按照特定的方式去写,但读取的过程与RAM一样,更适合于保存少量常数和数据。
EEPROM存储器可用来存放MCU系统中不需要频繁擦写的重要参数,
S12系列微控制器的外围接口采用模块化设计方式,即输入/输出I/O系统端口由
第8 页共12 页
许多标准模块组成,这些端口包括PORTA、PORTB、PORTE、PORTK、PORTH、PORTJ、PORTM、PORTS、PORTP和PORTT。
各个端口在通用功能的基础上还有一些特殊功能。
I/O端口是微控制器与外部世界进行信息交换不可缺少的部分,在整个微控制器系统中占有极其重要的地位。
微控制器的I/O技术包括数字量的输入/输出和模拟量的输入/输出。
微控制器所处理的信息(包括程序和数据)大都要由输入设备提供,而处理的结果则要通过输出设备输出。
S12MCU的每一种接口大都具有双重或多重功能,即通用I/O功能和特殊接口功能。
在单片模式下,A口、B口和部分E口也可以用作通用I/O接口。
如果所有接口工作在通用I/O方式下,那么I/O口将达到63个。
这些双重功能的I/O口本身及其控制逻辑完全集成在MCU内部,其体积、功耗、可靠性、应用简单方便程度都与用户自行扩充的I/O口有着重要区别。
S12系列微控制器I/O技术包括数字量的输入/输出和模拟量的输入/输出。
内部有丰富的I/O资源,同时也集成了多种功能模块。
由于MCU的封装引脚数量有限,这些I/O引脚大都为复用功能引脚,即同一引脚可以具有不同的功能,又称引脚复用。
这些功能可通过寄存器的设置与程序配合,发挥各种功能。
S12系列微控制器的外围接口采用模块化设计方式,即输入/输出I/O系统端口由许多标准模块组成,这些端口包括PORTA、PORTB、PORTE、PORTK、PORTH、PORTJ、PORTM、PORTS、PORTP和PORTT。
各个端口在通用功能GPIO的基础上还有一些特殊功能。
S12的中断可分为:可屏蔽中断与不可屏蔽中断,两种中断都可以通过对CCR(X、I 位)的设置对其进行屏蔽。
X位控制不可屏蔽中断,I位控制可屏蔽中断。
X、I位为0时分别允许相应的中断。
不同的是X位复位后一旦被清零就不能再次对其进行设置,无论是通过直接设置、堆栈弹出、位清除等都不能再次对该位置1;而I位是任意时刻可设置的,随时可以打开和关闭可屏蔽中断。
也就是说,不可屏蔽中断只能被设置一次,而可屏蔽中断则可以多次打开与关闭。
不可屏蔽终端一旦打开,无法关闭,仅用于十分关键的环节。
可屏蔽中断的优先级默认由中断向量在向量表中的排序确定,位于映射表较高位置中断向量的优先级比较低位置中断向量优先级高。
但可屏蔽中断的优先级可通过向最高优先级中断寄存器HPRIO写相应的代码值来修改。
该寄存器可在任意时刻读出,但只有当I位为1,即禁止可屏蔽中断时,才可以更改HPRIO寄存器的值。
不同的中断必须向HPRIO 写入不同的值。
最高优先级中断寄存器HPRIO
复位后,HPRIO寄存器的默认值为$F2(11110010B),此时中断向量最高优先级是外部中断·IRQ,最后一个写入HPRIO寄存器有效代码值所指定的中断为当前中断的最高优先级。
某个中断的优先级被改变后,其他中断的优先级顺序保持不变。
对该寄存器写入一
第9 页共12 页
个不合规定的数值将使IRQ中断自动恢复为最高优先级。
ECT实际上是一个16位的可编程计数器,它的基本时钟频率可以通过预分频器设置,用于产生波形输出、测量输入波形、统计脉冲或边沿个数以及作为时间基准。
它也可以在不需S12MCU干预的情况下产生脉宽调制输出。
它不仅具有一个16位递减模数计数器,而且是一个功能完善的定时器,具有自动重装载和中断能力,又可为IC、PAI寄存器向保持寄存器的传送提供定时控制信号。
MDC还可作为具有定时中断功能的独立时钟基准
当相应引脚发生有效事件时,定时器将值捕捉到IC寄存器。
又分为非缓冲IC通道,缓冲IC通道,输入捕捉是通过捕获自由运行计数器来监视外部事件,可以应用于信号检测、频率测量、脉冲宽度和输入计数。
4个非缓冲IC通道各自具有一个捕捉寄存器,当输入引脚发生动作事件时,会将引脚电平变化那一时刻定时计数器的值捕获到相应通道的捕捉寄存器中。
其他4个缓冲IC通道除了各自具有一个捕捉寄存器外,每个通道还有一个缓冲器称为保持寄存器,它允许在不产生中断的条件下,连续捕捉两次不同时刻的值。
当IC寄存器的值被读取或锁存到保持寄存器时,IC寄存器清空。
同样,保持寄存器被读取时保持寄存器清空
S12微控制器产生PWM波形的方法主要有两种:软件输出比较和PWM硬件模块。
FreescaleSl2微控制器集成了PWM模块专门用于输出PWM波。
S12的PWM模块的特性如下:
》8位8通道;
》每个通道可独立产生连续脉冲输出;
》每个PWM通道具有专用计数器;
》4个可程控选择的时钟源;
》脉冲输出极性可选;
》输出频率可与总线时钟频率相同;
》占空比可调范围为0~100%,最高分辨率为0.15%;
》周期和占空比双缓冲;
》每个通道可选择中心对齐或左对齐方式;
》具有中断特性的紧急切断功能。
S12微控制器产生PWM波形的方法主要有两种:软件输出比较和PWM硬件模块。
软件输出比较:利用输出比较功能可以通过软件设定输出任意脉冲,但会占用CPU资源,而且不易产生精确的脉冲序列。
PWM硬件模块:使用时不影响运行计数器,也极少占用CPU资源。
FreescaleSl2微控制器集成了PWM模块专门用于输出PWM波,
MC9S12DGl28BPWM结构
MC9S12DGl28B集成了8路8位独立PWM通道,S12微控制器PWM模块是由独立运行的8位脉冲计数器PWMCNT、两个比较寄存器PWMPERE和PWMPDTY等组成。
通过相应设置
第10 页共12 页
可变成4个16位PWM通道,每个通道都有专用的计数器,PWM输出极性和对齐方式可选择,8个通道分成两组,共有4个时钟源控制。
通道0、1、4、5为一组,使用时钟源ClockA和ClockSA;通道2、3、6,7构成另一组,使用时钟源ClockB和ClockSB。
在S12微控制器PWM模块中,设定占空比常数所决定的时间是从周期原点开始计时的,称为左对齐方式。
该方式下,脉冲计数器为循环递增计数,计数初值为0。
当PWM模块使能(启动)寄存器的PWME=l时,PWM启动,计数器PWMCNT从0开始对时钟信号递增计数,开始一个输出周期。
当计数值与占空比常数寄存器PWMDTY相等时,比较器1输出有效,将触发器置位,而PWMCNT继续计数;当计数值与周期常数PWMPER寄存器相等时,比较器2输出有效,将触发器复位,同时也使PWMCNT复位,结束一个输出周期,然后PWMCNT又重新开始计数,开始一个新的输出周期。
图10-3 PWM左对齐方式
输出周期=通道时钟周期×(PWMPERx+1) (10-1)
PWM输出信号的脉宽可通过PWMDTYx脉宽控制寄存器来设定相应通道的占空比,计
算公式如下:
占空比=[(PWMPERx-PWMDTYx)/(PWMPERx+1)]×100%
占空比=[(PWMDTYx+1)/(PWMPERx+1)]×100%
在S12微控制器P删模块中,占空比常数所决定的时间位于周期中央时,则称为中心对齐方式,如图所示。
在中心对齐方式下,脉冲计数器为双向计数,计数初值为0。
当脉宽调制使能寄存器的PWME=1时,PWM启动,计数器PWMICNT从0开始对时钟信号递增计数,开始一个输出周期。
当计数值与占空比常数PWMDTY相等时,比较器1输出有效,触发器翻转。
而PWMCNT继续计数,当计数值与周期常数PWMPER相等时,比较器2输出有效,改变PWMCNT的计数方向,使其递减计数。
当计数值再次与PWMDTY相等时,比较器1输出又一次有效,使触发器再次翻转,然后PWMCNT继续递减计数,等PVWMCNT 减回至0时,完成一个输出周期。
所以在这种模式下,整个输出周期就是周期常数PWMPER 的2倍,而高电平输出时间为周期常数PWMPER与占空比常数PWMDTY的差值的2倍。
输出周期=通道时钟周期×(PWMPERx+1)
输出信号的脉宽可通过PWMDTYx脉宽控制寄存器来设定相应通道的占空比,计算公
第11 页共12 页
式如下:
:占空比=[(PWMPERx-PWMDTYx)/PWMPERx)×100%:占空比=[PWMDTYx/PWMPERx)×100%
第12 页共12 页。