430单片机个人总结Word格式文档下载.docx
- 文档编号:19132462
- 上传时间:2023-01-04
- 格式:DOCX
- 页数:15
- 大小:482.79KB
430单片机个人总结Word格式文档下载.docx
《430单片机个人总结Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《430单片机个人总结Word格式文档下载.docx(15页珍藏版)》请在冰豆网上搜索。
作为片内外设时,用来设置是输出的片内外设还是输入的片内外设,如P1.6管脚用作片内外设时,TA0.1是输出,CA6是输入),当PxDIR=0时,用作输入,当PxDIR=1时,用作输出;
图3
图4
三中断函数
标准中断函数的格式为;
#pragamvector=中断向量
__interruptvoidISR(void)
{
用户程序;
}
四低功耗模式
进入低功耗程序模式为(以进入低功耗LPM0模式为例):
_EINT();
LPM0;
以上两句程序等价为:
_BIS_SR(LPM0_bits+GIE);
那么退出低功耗程序为:
LPM0_EXIT;
五Flash操作(msp430f149单片机)
Flash被划分成mainmemory和informationmemory,两者没有太大区别,只是两者的容量和物理地址不同。
CPU:
中央处理器(centerprocessingunit),是一台计算机的运算核心和控制核心。
它的功能是解释处理指令。
主要由运算器(算术逻辑运算单元ALU,arithmeticlogicunit)、高速缓冲存储器(cache)、数据总线(databus)、控制总线(controlbus)、地址总线(addressbus)组成。
它与内部存储器(memory,程序存储器和数据存储器)和输入/输出(I/O)设备合称为电子计算机三大核心部件。
Flash就是memory的一种。
对flash进行操作时,其频率需在257kHz~476KHz之间,同时单片机的供电电压不能低于2.7V。
对flash的操作有三种:
读、写和擦除;
默认方式是读。
擦除操作:
对flash进行擦除操作时,需要进行一个假写入,假写入的目的是启动flash时钟发生器和启动擦除操作,若果假写入的地址不在需要擦除的段内,该假写入不能启动该段的擦除。
擦除flash所需的时间是固定的,并不取决于需要擦擦除的flash的数量,mass擦除的时间t=10593/fFTG,segment擦除的时间t=4819/fFTG,色
写入flash步骤:
1、关闭看门狗电路和总中断;
2、设置FCTL2(FCTL2寄存器用来设置flashtiming);
3、设置指针指向需要写入段的首地址;
4、设置FCTL1、FCTL3(FCTL1用来控制flash的操作方式是写操作还是擦除操作,默认是读操作;
FCTL3用来控制能否对flash进行操作),需要首先设置FCTL1控制flash为擦除操作(在写入之前需要先擦除);
5、假写入(用来启动擦除操作,若是从flash中启动擦除操作(),那么在擦除过程中,CPU将会停止运行;
擦除完成后,CPU继续执行后面的代码);
怎么理解从flash中启动擦除操作
个人理解:
就是通过上位机下载到单片机的程序保存在flash中,而没有保存到RAM中。
擦除指令代码也是保存在flash中。
6、擦除操作完成后,设置FCTL1(设置Flash为写入模式);
7、写入flash程序;
8、写入完成后,设置FCLT1、FCTL3(FCTL1设置flash为默认模式;
FCTL3锁存flash,让程序无法对flash进行操作)
c语言程序如下:
voidmain(void)
uchar*Flash_ptr;
//flashpointer
uinti,value;
//value为需要写入的数值;
WDTCTL=WDTPW+WDTHOLD;
//关闭看门狗;
FCTL2=FWKEY+FSSEL0+FN0;
//设置flashtiming
value=0;
Flash_ptr=(uchar*)0x1080;
//设置flashpointer为需要写入的flash段的首地址
FCTL1=FWKEY+ERASE;
//设置flash为擦除模式;
FCTL3=FWKEY;
//打开flash操作,默认为读模式,用户不能对flash进行其他操作
*Flash_ptr=2;
//假写入一个数值(假写入的目的是启动擦除操作)
FCTL1=FWKEY+WRT;
//设置flash为写模式
for(i=0;
i<
128;
i++)//写入程序
{
*Flash_ptr++=value;
FCTL1=FWKEY;
//关闭写入模式
FCTL3=FWKEY+LOCK;
//关闭flash,用户不能对flash写/擦除操作,只能读
如何理解从flash启动对flash的操作、从RAM启动flash的操作?
回答:
对flash进行的这段代码存放在哪里,就是从哪里启动flash的操作,如果该段代码放在RAM中,那么即是从RAM启动flash的操作;
如果这段代码放在flash中,即是从flash启动flash操作。
如何判断程序是存放在Flash中还是RAM中?
x86架构的PC机cpu在运行时,程序是存储在RAM中的,PC机在运行程序的时候将程序从外存(硬盘)调入到RAM中运行,CPU从RAM中读取程序和数据;
而单片机等嵌入式系统则是存放在flash中的,单片机程序是固化在flash中,CPU运行时直接从flash中读取程序,从RAM中读取数据。
造成以上差别的原因在于:
x86架构的CPU是基于冯.诺依曼体系的,即数据和程序存储在一起的,而且pc机的RAM资源相当丰富,客观上能够有承受大量的程序数据;
单片机的架构大多是哈佛体系的,即程序和数据分开存储,而且单片机的片内RAM资源是相当有限的,内部的RAM过大会带来成本的大幅度提高。
冯.诺依曼结构(又称普林斯顿结构)和哈佛结构的区别?
两者的区别在于程序空间和数据空间是否是一体的。
冯诺依曼结构是将程序空间和数据空间合在一起的存储器结构。
程序指令存储地址和数据存储地址指向同一个存储的不同物理地址,因此程序指令和数据指令的宽度相同。
取指令和取操作数都在同一条总线上,通过分时复用的方式进行的,缺点是在高速运行时,不能达到同时取指令和取操作数,从而形成了传输过程的瓶颈。
常见的微控制器和中央处理器有:
Intel公司的x86微处理器、Intel公司的其他中央处理器、安谋公司的ARM7、MIPS公司的mips处理器。
哈佛体系的内部程序空间和数据空间是分开的,这样就可以同时去指令和操作数,从而大大提高了运算能力。
microchip公司的PIC系列芯片、摩托罗拉的MC68系列、zilog公司的Z8系列。
Atmel公司的AVR系列、安谋公司的ARM9、ARM10和ARM11、51单片机。
在通用计算机系统中(PC机),应用软件的多样性是的计算机要不断地变化所执行的代码的内容,并且频繁地对数据域代码占有的存储器进行重新分配,这种请款下,冯诺依曼结构占有绝对优势,因为同一编址可以最大限度地利用资源,而哈佛结构的计算机应用在这种请款下会对存储器资源产生理论上最大可达50%的浪费;
但是再嵌入式应用中,系统要执行的任务相对单一,程序一般是固化在硬件里。
当然这时使用冯诺依曼结构液可以,代码区和数据区在编译时一次性分配好了而已,但是其灵活性得不到体现,所以现在大量单片机还是使用的哈佛结构。
为什么说哈佛结构在嵌入式计算机中占有优势呢?
嵌入式计算机在工作时与通用计算机有着一些区别:
嵌入式计算机在工作期间的绝大部分时间是无人值守的,而通用计算机工作期间一般是有人操作的;
嵌入式计算机的故障可能会导致灾难性的后果,而通用计算机一般就是死死机,重新启动集合,这两点决定了对嵌入式计算机的一个基本要求:
可靠性。
使用冯诺依曼机构的计算机,程序空间不封闭,其程序空间的数据在运行期理论上可以被修改,此外程序一旦跑飞也有可能运行到数据区。
虽然都是一些不常见的特殊情况,但是看看哈佛机构的计算机在这些情况下是怎样的:
程序只能在密闭的代码区中运行,不可能跑飞到数据区。
总结
冯诺依曼原理:
程序只是一种特殊的数据,它可以像数据一样被处理,因此可以和数据一起存储在同一个存储器中,数据总线和地址总线复用。
哈佛结构是一种并行结构,程序存储器和数据存储器是两个独立的存储器,每个存储器独立编址、独立访问,与两个存储器对应的是系统的4条总线:
程序的数据总线和地址总线、数据的数据总线和地址总线
六UART通信(msp430f149单片机)
UART通信又称串行异步通信,串行同步/异步收发器通过RXD/TXD管脚将430单片机和外部系统相连。
如果RXD/TXD管脚没有接受/发送数据,则RXD/TXD管脚一致保持高电平状态。
UART的数据帧结构为:
1位停止位、8位数据位、1位奇偶校验位、1位停止位,在实际数据发送过程中,串口是以字符为基本单位来发送的。
收发步骤(UART初始化设置):
1、设置IO口为RXD、TXD;
2、设置SWRST=1(正常情况时,一个PUC(上电复位)信号后,SWRST自动设置=1,因此可以不用设置SWRST);
3、设置相关寄存器(RXD/TXD使能、数据格式、波特率的时钟源、波特率大小);
4、清除SWRST(即设置SWRST=0),这样USART模块才能工作;
5、打开接收、发送中断();
6、接收/发送处理程序部分;
voiduart_init()//uart初始化函数
P3SEL|=BIT4+BIT5;
//setP3.4asTXD,P3.5asRXD
ME1|=UTXE0+URXE0;
//EnableUSART0transmitandrecieve
UCTL0|=CHAR;
//8bitcharacter
UTCTL0|=SSEL0;
//UCLK=ACLK
UBR00=0x0D;
//32768/2400
UBR10=0x00;
UMCTL0=0x6B;
UCTL0&
=~SWRST;
//初始化UART0状态机
IE1|=URXIE0;
//enableRXDinterrupt
发送程序处理部分:
先判断UxTXBUF是否空闲;
若空闲,则将要发送的数据送入到UxTXBUF中;
程序如下所示:
while(!
(IFG1&
UTXIFG0));
TXBUF0=value;
(value为要发送的变量)
七上电复位(POR)和上电清除(PUC)
PUC信号是上电清除信号。
POR(Power-On-Reset)是上电复位信号,它只在以下两个事件发生时产生:
1、芯片上电。
2、RST/NMI设置成复位模式,在RST/NMI引脚上出现低电平信号。
POR信号的产生总会产生PUC(Power-UP-Clear)信号,但PUC信号的发生不会产生POR信号。
PUC信号是上电清除信号,产生它的事件为:
1、发生POR信号。
2、处于看门狗模式下,看门狗定时时间到。
3、看门狗定时器写入错误的安全键值。
4、RST/NMI设置成NMI模式,在RST/NMI引脚上出现低电平信号,
5、FLASH存储器写入错误的安全键值。
八WDT+模块(msp430g2553单片机)
WDT+模块通过WDTCTL寄存器中的WDTTMSEL位来进行对应的功能选择,可以设置为watchdog模式,也可以设置为internaltimer模式。
Watchdog模式:
什么是看门狗?
在由单片机构成的微型计算机系统中,由于单片机的工作常常会受到来自外界电磁场的干扰,造成程序的跑飞,而陷入死循环,程序的正常运行被打断,由单片机控制的系统无法继续工作,会造成整个系统陷入停滞状态,发生不可预料的后果,所以出于对单片机运行状态进行实时监测的考虑,便产生了一种专门用于检测单片机程序运行的芯片,俗称“看门狗”。
Internaltimer模式:
简单来说就是定时器模式。
九比较器comparator_A+(msp430g2553单片机)
Comparator_A+是一个模拟电压比较器,所有msp430x2xx系列的单片机均有此模块。
操作步骤:
1.使能比较器模块,即设置CAON位;
2.参考电压大小选择,即设置CAREFx位;
3.参考电压方向选择(参考电压是接入到比较器的+端还是-端),即设置CAEX位和CARSEL位;
4.待比较的电压输入位选择,即是选择CA0、还是CA1、还是CA2等;
5.因为第四步中设置了比较电压输入位,而这些位是与IO口复用,因此需要设置P口的功能选择位PxSEL以及方向位PxDIR;
十定时器(msp430g2553单片机)
MSP430有两个16位定时器Timer_A和Timer_B,两者基本相同。
在430单片机的定时器模块,经常会看见“Timer_A3、Timer_B3”和“Timer_B7”,这里的“3”和“7”是指Timer_A、Timer_B模块分别具有3个或7个捕获/比较寄存器。
Timer_A大致可分为四个功能模块:
计数器、比较/捕获寄存器0、比较/捕获寄存器1、比较/捕获寄存器2。
比较模式和捕获模式在单片机内部有不同的硬件电路。
Timer_A模块将定时器和捕获/比较模块集成到了一起。
对定时器的处理均是通过中断方式进行的。
在Timer_A模块中,具有两个中断向量,分别是TACCR0中断向量和TAIV中断向量。
TACCR0模块单独对应TACCR0中断向量,是一个单源中断,TACCR1、TACCR2、TAIFG对应TAIV中断向量,是一个多源中断。
因此2个中断向量实际上对应了4个中断。
Msp430g2553有两个Timer_A模块,分别是Timer0_A3、Timer1_A3。
Timer0_A3中用的很多寄存器都采用简写的方式,且容易理解记忆,而Timer1_A3中很多寄存器没有采用简写的方式,并且其书写方式与Timer0_A3中寄存器的书写方式不一样,因此在实际编程使用时,需重点注意
因为一个Timer_A模块具有2个中断向量,因此2553单片机具有4个定时器中断向量,Timer0_A3对应的中断向量为TIMER0_A0_VECTOR、TIMER0_A1_VECTOR;
Timer1_A3对应的中断向量为TIMER1_A0_VECTOR、TIMER1_A1_VECTOR。
前者的优先级均高于后者的优先级。
Timer0_A3的CCR0对应TIMER0_A0_VECTOR中断,Timer0_A3的CCR1、CCR2、定时器溢出对应TIMER0_A1_VECTOR中断。
对于中断过程的理解
计数器是主体,它是一个可开启和关闭的定时器。
如果开启它就是一直在循环计数,会有一个溢出中断。
如在连续计数模式时,当从0计数到0xffff时就会产生一个中断。
那么如何实现定时功能呢?
这需要靠3个比较/捕获寄存器(下用CCRx表示)。
当计数器寄存器TAR中的值增加到与CCR0或CCR1或CCR2寄存器中的值相等时,会分别触发对应的CCRx中断,这样可以通过定时器A得到3个定时时间。
CCRx有3个中断,再加上计数器本身的溢出中断,因此Timer_A模块共有4个中断
CCR0比较特殊,通过它可以改变计数器的最大计数值,当计数器计数到CCR0的值时自动将计数器清零,但是需要设置相应的工作模式,模式列表如下:
MCx
Mode
说明
00
停止
定时器暂停
01
增计数
计数器计数到CCR0,再清零计数
10
连续计数
计数器计数到0xffff,再清零计数
11
增减计数
增计数到CCR0,再减计数到0
范例:
Description:
采用Timer0_A3定时器,连续计数模式,利用定时器溢出中断在P2.1产生频率约为
的方波信号,利用CCR0比较中断(初值设为40000)在P2.2产生频率约为
的方波信号(SMCLK默认约为1MHz)。
voidmain()
WDTCTL=WDTPW+WDTHOLD;
//stopwatchdog
P2DIR|=0xff;
//setP2asoutput
TACCTL0=CCIE;
//enableCCRxinterrupt
TACCR0=50000;
//CCR0初值
TACTL=TASSEL_2+TACLR+MC_2+TAIE;
//定时器A的时钟源为SMCLK,计数器清零,连续计数模式,溢出中断允许
_EINT();
LPM0;
#pragmavector=TIMER0_A0_VECTOR
__interruptvoidTimer_A0(void)
P2OUT^=BIT2;
//P2.2取反
CCR0+=50000;
//CCR0置入计数值
#pragmavector=TIMER0_A1_VECTOR
__interruptvoidTimer_A1(void)
switch(TAIV)
case2:
break;
//CCR1中断未用
case4:
//CCR2中断未用
case10:
P2OUT^=BIT1;
//p2.1取反
break;
如何理解比较和捕获
比较:
CCR0中开始时有一个初始值,计数器在时钟的触发下,不断的计数,当计数器中的值等于CCR0中的值时,触发产生一个中断。
因此,比较模式一般是用在定时功能的。
是定时器的默认模式。
捕获:
外部输入信号触发中断,读取计时器的计数值,就可以测量信号脉宽、周期等参数。
捕获的方式有上升沿捕获、下降沿捕获、上升/下降沿捕获。
在捕获模式,当满足捕获条件,硬件自动将计数器TAR数据写入相应的寄存器CCRx。
如测量某窄脉冲(高电平)的脉冲长度,可定义上升沿和下降沿都捕获。
在上升沿捕获一个定时器数据;
再等待下降沿的到来,在下降沿又捕获到一个定时器数据。
那么两次捕获的定时器数据差就是窄脉冲的宽度(时间)。
根据下表来确定捕获模式的输入信号源。
Timer0_A3signalconnections
Inputpinnumber
Deviceinputsignal
Moduleinputname
Moduleblock
Moduleoutputsignal
Outputpinnumber
PW20,N20
PW28
RHB32
P1.0-2
P1.0-31
TACLK
Timer
NA
ACLK
SMCLK
PinOsc
INCLK
P1.1-3
P1.1-1
TA0.0
CCI0A
CCR0
TA0
CCI0B
P1.5-7
P1.5-5
Vss
GND
P3.4-15
P3.4-13
Vcc
P1.2-4
P1.2-2
TA0.1
CCI1A
CCR1
TA1
CAOUT
CCI1B
P1.6-14
P1.6-22
P1.6-21
P2.6-19
P2.6-27
P2.6-26
P3.5-19
P3.5-18
P3.0-19
P3.0-17
TA0.2
CCI2A
CCR2
TA2
CCI2B
P3.6-20
P3.6-19
注释:
上表中的“Px.x-x”的意义,“Px.x”代表P口,“x”代表对应封装中的第x号管脚;
“PW20,N20”、“PW28”、“RHB32”代表封装;
“TAx.x”中第一个“x”代表定时器模块x(2553单片机有两个Timer_A模块,分别是Timer0_A3和Timer1_A3,因此这里的“x”只能取0和1),第2个“x”代表定时器模块中的第x个捕获比较寄存器(2553单片机的两个定时器模块都具有3个捕获比较寄存器,因此这里的“x”可取值0,1,2)
如何用Timer的比较/捕获方式来软件模拟UART通信?
?
接收过程:
上图所示为一个3位数据帧的时序。
首先确定起始位,用来进行帧同步。
利用Timer的捕获模式来捕获起始位的下降沿。
定义Timer的CAP位为1,则进入捕获模式,如图所示,在A点捕获到起始位,系统将此刻的定时器值T存放到CCRx中,并由于捕获而产生中断。
在中断处理程序中,对A点所产生中断的处理非常重要,一进入中断就将捕获功能转换为比较功能。
另外设置TACTL中的MC0=1,启动定时器的增计数模式,并将1.5位的时间间隔(1.5T)加到CCRx中,即CCRx=1.5T。
同时将单片机内部的计数器TAR清零。
这样当单片机内部的计数器TAR的值达到1.5T(B点)时,就会由此比较功能触发中断,这样就实现了1.5位时间间隔的精确定时。
由于1.5T的时间跳过了起始位,刚好是在第一位数据位的中间,这时的数据位是最稳定的,没有电平的突变,在中断处理程序中可以读取输入引脚的状态,从而接收到Bit1的信息。
同时重新设定CCRx的值,将其设定为一位数
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 430 单片机 个人 总结