收藏 分销(赏)

MSP430单片机学习心得总结.doc

上传人:s4****5z 文档编号:8659976 上传时间:2025-02-24 格式:DOC 页数:17 大小:66.50KB 下载积分:10 金币
下载 相关 举报
MSP430单片机学习心得总结.doc_第1页
第1页 / 共17页
MSP430单片机学习心得总结.doc_第2页
第2页 / 共17页


点击查看更多>>
资源描述
改变CCS字体方法: perferance>General>Apperance>Colors and Fonts >Basic>Text Font 将c语言编译成汇编语言之后执行。如果c语言结构不好,则编译后 会出现编译成汇编后代码冗余, 使得执行效率不高。 板子有可能与电脑连接出问题,可以拔下重插一次。 在单片机内部flash存储空间有剩余时,可以用于数据存储空间, 并且可以使用单片机程序进行数据管理。 POR PUC是复位信号 看门狗定时器溢出发生复位 复位时设置如下: 1.RAM堆栈的指针指到最顶端 2.初始化看门狗 3.初始化外设 GIE是总中断 具有欠压复位功能 工作电流小于20UA 待机电流小于0.8UA 4个特殊功能寄存器 R0是PC指针 R1是堆栈指针 R2是状态寄存器 R3是常数发生器 12个通用寄存器R4-R15 27条内核指令 24条仿真指令 7中地址模式 无累加器 三个时钟: ACLK辅助时钟:频率较低,低速外设 MCLK是主时钟,CPU运行的时钟,高频 SMCLK是次主时钟,高速外设 DCO是数字震荡控制器1M 8M 12M 16M共4个级别,可以通过 内置数据进行设置 内置VLO低频振荡器,频率为4-20khz。所以可以通过DCO进行分频 Timer_A频率可达系统振荡频率,用于定时器时,最小单位时间 是20ns 2553的电阻有0~15共16中。用RSEL选择。RSEL与DCO配合 ,值越大 频率越大。 LF是外接时钟 USART支持UART、SPI 共2种通讯方式 USCI支持 UART、I2C、SPI 共3种通讯方式 关于变量: static变量是对于局部变量而言,如果不定义成静态变量,则 每次执行时都会被重新初始化,静态变量则不重新初始化。 全局变量和静态变量是存储在RAM中的。 extern是外部变量,即将一个文件中的变量在另一个文件中 使用。如在文件1中声明了变量z,在文件2中声明extern int z 就可以使用文件1的z I/O口赋值方法与C51中的相同,可以使用OXxx或OXxxxx赋值。 对P管脚整体赋值是对寄存器的赋值操作 BIT0,BIT1,BIT2,BIT3分别表示二进制的第一位,二位, 三位为1,四位为1.表示0x01,0x02,,0x04,0x08. P1OUT|=BIT1,是除了第一位的寄存器值被改变,其他位的值 都不变,这样可以防止对其他位做了误操作。 关于逻辑操作: &0xff与|0x00则不改变原值 ^BIT0分为^0和^1,^1则每次之前的状态都改变,^0则每次之前的 状态都不变。因此^BIT0表示^0x0001,即前15位都不改变状态 只有最后一位翻转,可以用于位翻转操作。 <<移位操作经常用于数值计算以及某些循环操作。左移n位表示 *2^n. 必须先对需要的未进行输入输出设置,之后才能进行读写操作。 模数转换器具有14路输入。 定时器与比较器配合,可以得到某个时间函数,如果知道了某 物理量随时间的变化规律,就可以进行测量。 利用定时器和RAM等存储数据的模块或数组,可以实现任意PWM波的 产生,再利用电容的充放电作用可以模拟出任何的周期性波形,方 法如下:定时器赋初值,启动定时器,计数停止后进入中断,在中 断中将下一个要计的时间加在初值上,继续计数。如此循环。每次 进入中断时都翻转一下输出电平。定下某个循环的次数作为一个大 周期。 P口要选择作为I/O口还是作为寄存器,选定后还要在方向寄存器中 确定是输入还是输出。 PXDIR为0时,要使用PxREN进行上拉下拉操作,上拉则默认输入是高 电平,下拉则默认是低电平。如P1REN|=BIT0; 不操作时都默认为下拉。可以在P1REN寄存器里找到各位状态。 上电后P1DIR全部为0,即输入状态。P1OUT 的7~1都是1,p1.0是0. P1IN 的P1.1 P1.2为高,其他为低。 在使用时应该先分清自己是要输入还是要输出,然后可以根据需要 使用P1REN调整初始状态。 I/O口作为输出时,如果输出寄存器P1OUT是高,则对输入寄存器PIN 有影响,会直接将P1IN寄存器变为高电平,这就是那位学长说的要 注意的问题,要尽量避免,如在进行初始化时P1OUT =0X00;不应该 利用这一现象,这不正宗。 I/0口的中断注意事项: 1.寄存器名称根据芯片的寄存器名称设置,2553是IE1,IE2,不是 P1IE,P2IE (要以调试时的寄存器为准,不要看头文件中的。) 2.IE1为1是开中断,不要搞反了 3.将需要的端口的PxREN置1,即接上拉电阻。 4.标志位要软件清零 5.逻辑判断时要加括号,否则不能执行 6.不必局限于头文件中宏定义的OFIE,OFIFG等,P1,P2的所有管脚 都可以独立中断。可以独立设置。 7.PxSELx只要置1,那么中断就自动禁止,不管PxIE是什么 不同的编译软件的寄存器名称不一样,设置时需要根据实际的进行 设置,否则寄存器无效。!!!!!!!!!! 定时器是CCR0,CCR1,CCR2,CCR0的优先级最高,并且返回时不要 软件清除中断标志位,是自动复位的(相当于51的8位自动重装 定时器)。其他定时器必须软件清除中断标志位。CCR0,CCR1都是 计数值,相当于51的TH0,TL0.TH1,TL1. 关于定时器的连续工作模式和增计数模式???????? 数据段的数据个数一般要超过256个才能通过8路AD转换。 MCLK的频率等于机器频率,每一个周期都能够完成一个基本操作。 一个指令周期等于1-6个机器周期,根据指令而定。可以参照MSP430 时钟设置及其总结一文。 ACLK用于低速外设 MCLK用于CPU SMCLK用于高速外设 注意对寄存器进行位设置时的语法,可以是x|=a+b+c... x表示寄存器名称,a,b,c表示寄存器的位名。 多机USART通信时,数据格式为 :起始位 地址 停止位 起始位 数据 停止位 起始位 数据 停止位。。。,其中在空闲模式下,连续10个 以上高电平表示空闲,在此之后的一定是地址帧。在10个之内的一定 是数据帧。 看某种类型变量是几位时,可以用使其溢出后自动赋值的方法来得到。 进入中断要有以下几条语句: _BIS_SR(LPM4_bits + GIE); // Enter LPM4 w/interrupt,写在主函数中 #pragma vector=PORT1_VECTOR __interrupt void Port_1(void) { } 简易延时要把延时数据定义成全局变量。 串口接收部分的软件设置包括对错误数据的处理 和对地址、数据的判断及处理两个部分。 如果是正确的地址帧,则自动唤醒单片机, RXWAKE置位(只针对地址有效),如果URXWIE 软件置位则可以进入地址中断服务程序,进行 匹配。 GIE是全局中断,_BIS_SR( LPM1_bits+GIE); 通常这样用。 串口通信中的中断使能寄存器是IE2,书写并 不复杂。标志位寄存器是IFG2。 写入发送缓冲器时使得标志位复位, 发送缓冲器写入移位寄存器后标志位置位。 在发送中断打开的情况下会进入发送中断。响应 发送中断后标志位自动清零。不响应中断则不会 自动清零,需要软件清除。 (并不需要在发送中断中将标志位复位,因为 如果有继续发送的数据会在写入发送寄存器 时自动使得标志位复位。) 接收时收到完整字符并进入接收缓存后接收标志 置位。响应接收中断或读取接收缓存后使得标志 复位。 无论是软件设置标志位置位还是由于接收或发送 产生的标志位置位,都可以进入相应的中断。 2553的串口中没有ME1,ME2寄存器,即没有 串口使能寄存器。有中断使能寄存器IE1, IE2.功能不同。 全局变量可以被任意模块改变。累计改变。 RXWAKE是可以进行检测的标志位,在地址多机 模式下,收到的字符地址位置位则唤醒 。在空闲 模式下,接收到字符前检测到线路空闲则唤醒。 唤醒了则表示接收到的字符是地址。 芯片所有的寄存器在头文件中都有解释,即 SFR_8BIT(); 芯片总中断: _EINT(); 在写入发送寄存器时要检测是不是空闲,即检测 UCA0TXIFG是否置位,可以用 while((IFG2&UCA0TXIFG)==0); 头文件的定义与调试中寄存器界面的顺序是一样的 UCSWRST位置位,将使UCRXIE,UCTXIE,UCRXIFG ,UCRXERR,UCBRK,UCPE,UCOE,UCFE,UCSTOE 和 UCBTOE 位复位,UCTXIFG 位置位。(这就可 以解释为什么以上点之后就可以进入发送中断) 清除UCSWRST 将释放 USCI,使其进入操作状态。 数据接收中断的优先级最高 f/波特率 其实就是每个数据位采样的次数,因此 不应该小于3. 定时器连续模式用于产生给定的时间间隔.通过 中断实现。是比较模式,不需要设置输出模式。 #pragma vector=TIMER0_A1_VECTOR是定时器中断 和CCR1~CCR4中断向量。具体是哪些还要看头文件 中的解释。如: #define TIMER1_A1_VECTOR (12 * 1u) /* 0xFFF8 Timer1_A CC1-4, TA1 */表示CCR1~ CCR4以及TA1. #pragma vector=TIMER0_A0_VECTOR是CCR0中断 向量。 定时器增模式:产生PWM波(比较部分) 定时器连续模式:产生间隔中断处理一些事情, 也可用于键盘扫描,产生PWM波等(比较部分) 定时器增减模式:产生对称的波(比较部分) 定时器连续模式:结合捕获到的TACCRx来测 量时间间隔、频率、速度等(捕获部分) 以下是地址多机模式发送字符的函数格式: void sendchar(unsigned int address) { unsigned int i; UTCTL1|=TXWAKE; TXBUF1=address; while((UTCTL1&0X01)==0); UTCTL1&=~TXWAKE; for(i=0;i<=6;i++) { TXBUF1=Data[i]; while((UTCTL1&0X01)==0); } } 下位机(五个149)其中一个地址位为0x01的149接收上位机数据的程序为: /*************************************************/ /*说明:UART点对多点多机通信主机程序。 */ /*UART以9600bps,8位数据,1位地址,1位停止模式发送。 */ /*当地址位为1时判断地址,确认呼叫,接收后续字符串,并检查结束0。 */ /********************************************/ #include<msp430x14x.h> void InitRS_SLA1(void); #define ADDRESS1 0X01 //定义从机的地址位 unsigned char j1,count1=0; char Data1[20],Buffer1[20]; void InitRS_SLA1(void) { UCTL1&=~SWRST; //SWRST复位,USART允许 UCTL1=CHAR+MM; //8位数据位,1位停止位,地址位模式 URCTL1|=URXWIE; //只有地址字符使URXIFG置位 UBR01=0X03; UBR11=0X00; UMCTL1=0X4A; //使用32KHZ晶振时,波特率为9600bps UTCTL1=0X10; //选定ACLK(32KHZ晶振)为时钟源 ME2|=0X30; //UART1发送及接收模块允许 P3SEL=0XC0;  //P3.6,P3.7被UART1发送模块占用 P3DIR=0X40; //P3.6输出,P3.7输入 IE2|=URXIE1;  //接收中断允许 } interrupt[UART1RX_VECTOR] void UART1RX(void) { if(URCTL1&URXWIE) //接收为地址方式时,等待正确地指出现 { if(RXBUF1==ADDRESS1)//地址正确,改变接收为数据方式,准备接受 { URCTL1&=~URXWIE; count1=0; } } else  //接收为数据方式时 { Data1[count1]=RXBUF1; //数据存入Data数组中 if(Data1[count1++]==0) //是否到达末尾 { URCTL1|=URXWIE; //改变接收为地址方式 for(j1=0;j1<count1;j1++) Buffer1[j1]=Data1[j1]; //复制字符串 } } } 最新发现:UCDORM相当于URXWIE,即只有地址 才能使得RXIFG置位,UCTXADDR相当于TXWAKE, 即下一个要发送的字符是地址。 UCDORM在接收程序中用到,UCTXADDR在发送程序 中用到。 ADC10中的INCH_x表示所用通道的最大标号。从这 里开始进行采样。ENC=0;则在一次转化结束之后 跳到通道都没设置的初始化状态,MSC=0;则一次 转化后跳到需要触发信号触发的状态。 ADC10:单通道单次转换 一次转化以及转化结果进入ADC10MEM期间应保证 ENC=1;否则转化结果不确定。在采样保持期间ENC 可以变为0,此时结束转化。 ENC和ADC10SC可以不在同一条语句中。可以先ENC 再SC 单通道单次转换在转化结束(由于转化结果出现 或ENC=0引起)则不进行下一次转换,跳转到最初 的采样通道都没有选择的情况。 ADC10:序列通道单次转化 必须置MSC=1,否则再一次转化完成后不会继续向 下一通道采样转化,需要重新给触发信号。就像 单通道单次转换一样。 要把使用的通道选定 要把对应管脚的的复选功能打开 要软件开通各通道:ADC10AE0,ADC10AE1.因为序 列通道转换是从高A15向A0的方向采样的,由于并 不是这之间的所有通道都有采样的需要,所以要 使用通道开放功能,将需要采样的通道置1,不需 要采样的置零关闭。 ADC10:单通道多次转换 工作期间必须使得ENC=1;否则会在一次转化完成后 跳到没有定义采样通道的初始化位置。如果一次 转化完成后MSC=0;就不会继续转化,等待下一次 触发信号启动转化。 ADC10的停止方法: ①在单通道单次转换中,应检测到busy==0时令 ENC=0; ②在其他转换中直接令ENC=0;会在相应的多次 转化末时自动结束。 One-Block模式下直到所定义的一块的数据量被 传送完毕之后才会置标志位。 USCI包括USCI_Ax和USCI_Bx两个不同的模块,如果 同一模块有几个,则x从0开始编号。 I2C要注意master还是slaver,是发送器还是接收器 主从可以通过对UCMST编程确定,收发可以 通过对UCTR编程确定。 I2C自己的地址可以通过对UCBxI2COA(自己) 寄存器编程确定,对于主机还可以把要访问的 芯片地址写在UCBxI2CSA。还可以指定对于 general call(广播)是否回应。 I2C可以选择低功耗模式,使用SMCLK,系统自动 在需要SCL时启动SMCLK,以达到降低功耗的目的 但是SMCLK在其他模块也在使用,启用或关闭就会 影响其他模块的功能,建议不使用自动低功耗。 当芯片处于slave receive时,由于SCL由外部 芯片提供,所以可以工作在LPM4下。接受或发送 中断会唤醒芯片。 I2C有两个中断源,接收和发送共用一个中断向量, 四种通信状态标志共用一个中断向量。收发中断 用于收发数据,状态中断用于识别通信格式。 (UCALIFG/UCNACLKIFG/UCSTTIFG/UCSTPIFG) 以上四种状态中断与UART中的UCAxRXIFG接收中断 共用一个中断向量,数据收发与UCAxTXIFG共用一 个中断向量。 在接收到非应答或写入数据时UCBxTXIFG复位。 可以在中断中使用循环,将数据一次性发送出去。 也可以通过发送一个字节就退出发送中断,发送 结束后再次进入发送中断的方式多次发送。 从机可以将SCL拉低来暂时停止数据传输。 I2C作为主机接收数据:设置从机地址、发送起始 位,开通接收中断即可。发送起始位之后自动发送 从机地址,在从机应答后立即清除起始位UCTxSTT I2C作为主机发送模式:设置从机地址、发送起 始位,开通发送中断即可。发送起始位之后自动 发送从机地址。在发送起始位时立即置位发送标志 进入发送中断,可以把数据进行发送。,在从机 应答后立即清除起始位UCTxSTT 要在传送完某个字节的数据之后立即结束,应该 检测UCBxTXIFG是否置位,只有在置位之后发出 STOP,才能保证数据的完整传输和快速停止。 主机发送模式下,要停止数据可以在数据发送之后 立即发送停止位。在主机接收模式下,要停止数据 可以在接收完一个字节后发送非应答位和停止位。 看门狗在复位模式下不能使用LPM4.因为看门狗 总需要一个时钟源。在中断模式下各种低功耗模式 都可以使用 看门狗在复位模式下可以保证所使用的时钟源不受 低功耗模式影响,所以尽量不要选用SMCLK,否则 在低功耗时SMCLK不会被关闭。 LFXT1CLK可高可低,高达400k—16Mhz,低至32768 XT2CLK 只能是400k—16Mhz VLOCLK是内部非常低的振荡器,可达12Khz。 ACLK: LFXT1CLK VLOCLK MCLK: LFXT1CLK VLOCLK XT2CLK DCOCLK SMCLK: LFXT1CLK VLOCLK XT2CLK DCOCLK BCSCTL3中当XTS=0时说明LFXT1CLK选择低频率,可以 选择32768HZ或VLOCLK的12Khz,这可以使用LFXT1Sx 来选择。10为VLOCLK,00为32768hz。ACLK默认使用 LFXT1CLK,且默认为32768。当VLOCLK选中后 LFXT1CLK会自动停止,直接使用VLOCLK作为ACLK. 不同的低频需要选择电容,高频或外部数字信号不 需要选择电容。XCAPx=00;但是需要选择频率范围。 电容感测:先选择某些引脚具有电容感测功能,P1 的引脚连在TA0的计数器上,P2的引脚连在TA2. FLASH擦出操作时:先定义地址,再设置擦出模式, 再解锁,在写数据。 5529: 管脚2组为一大组,P12345678...分为PA~PD...。 所有的赋值时使用PA|=0Xxxxx的方式。仅仅对于 中断寄存P1IV,P2IV不使用PAIV的形式, 对于输入时的上拉下拉选择已经明确,是否上下拉 由PREN决定,上下或下拉选择则用PxOUT决定,1为 上拉,0为下拉。 各中断的优先级为P1.0最高,依次向下递减。 当管脚选择了复选功能,则中断功能立即失效。 SPI模式: 当接收的数据进入SBUF未及时读出即被覆盖,则 UCOE置位。
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 应用文书 > 心得体会

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:4009-655-100  投诉/维权电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服