MSP4304.docx
- 文档编号:981357
- 上传时间:2023-04-30
- 格式:DOCX
- 页数:28
- 大小:488.28KB
MSP4304.docx
《MSP4304.docx》由会员分享,可在线阅读,更多相关《MSP4304.docx(28页珍藏版)》请在冰点文库上搜索。
MSP4304
ZMSP430
①创建文件、编译连接、烧录:
(IAREmbededWorkbench)
<1创建新workspace:
file---new---workspace;
<2创建新Project;Project---creatnewProject…---C---main;
<3编译环境设置:
左侧‘1-DEBUG’(建的工程)--右键---Options
<1>Generaloptions---Devices---选择单片机型号;
<2>Debuger---Driver---选择FETDebuger---OK;
<4编译连接:
Make—保存即可;
<5烧录:
插上usb---DownloadandDebuge(Make右侧第3个)---Go(工具栏第2行,红x左侧)---烧录完成;
②常用操作:
<1在头文件上右键,选择OPEN…可以看其中的宏定义及包含文件;
<2在宏定义变量上右键GOTODefination…可看其值;
<3烧录,调试程序后,应将硬件拔掉,再插入,即在仅供电的情况下观察结果;
③生成hex文件:
打开IAR的工程选项:
project—options---Linker---output----勾中Output file下的选项---并将输出文件名后辍改为.hex.
----在Format选项框中选中Other,----Output 后 选择inter-extneded-----其他的值保持默认。
<1编译链接后生成的.hex文件在Debug\Exe里面;每次make后其文件会自动更新(即在proteus里选过文件后每次直接仿真即可);
四、c语言程序设计
1、扩展的数据类型和关键字:
(1)数据类型及长度:
(2)关键字扩展:
①__interrupt:
该关键字放在函数前面,用于标志该函数为中断函数;
<1一般与预处理指令“#pragmavector”连用,定义中断函数:
#pragmavector=TIMER0_A0_VECTOR
__interruptvoidTIMERO_A0_ISR(void){}
②__no_init:
使程序启动时不给变量赋初值;
__no_initchartmp;
<1c语言main函数运行之前会把RAM区域进行清零操作,该区域变量将全部清零,该关键字可使变量不被清零;
③关键词做了进一步限制;
<1volatile:
定义挥发性变量。
<1>编译器将认定该变量的值会随时改变,对变量的任何操作都不会被优化过程删除。
实际编程中,利用变量i递减或递加产生的软件延迟函数,会被编译器优化而不会执行,此时执行在i前加volatile即可;
volatileunsignedinti;
<2const:
定义本地全局变量;(只在本文本)
<3static:
定义常量;
(3)其他常用扩展:
单片机均在相应头文件中对寄存器、控制位做了宏定义。
①寄存器定义:
<1程序对单片机各模块的使用是通过配置相应寄存器实现的;
<2寄存器名:
如PxIN,PxOUT…;P1DIR|=BIT0;
②寄存器控制位:
<1cpu状态寄存器SR宏定义如下:
<1>LPM0即关闭CPU,即不再执行语句命令;
<2寄存器的名字可作为全局变量使用,控制位只能作为常量使用;
③位操作与位屏蔽:
一般将寄存器感兴趣的设置为1,其它全为0;
<1BIT0:
第一位为1,其它全为0;P1DIR|=BIT0+BIT2;//1.0,1.2为输出;
<2MC_1:
MC由两个控制位组成,MC_1表示两个位分别为01,MC_2表示10;对于1个控制位不能写_,BIT0_1不正确;
TA0CTL=TASSEL_2+MC_1+TACLR;//选择参考时钟为SMCLK,增计数,清除TAR
2、函数的扩展:
(1)中断函数:
格式:
#pragmavector=中断向量//指定中断入口地址(即中断向量)
__iterruptvoid自定义函数名(void){…}//为中断向量定义一个中断函数
①中断向量一般以宏定义出现:
在MSP430F261x.h中定义;
②中断标志为1个的,为单源中断源,多个的为多源中断源;
单源中断源的中断标志寄存器会自动清零,但共源中断的中断标志寄存器需要手工清零;
例:
<1看门狗:
#pragmavector=WDT_VECTOR
__iterruptvoidWDT_ISR(void){P2OUT^=BIT6;}
<2端口:
#pragmavector=PORT1_VECTOR
__iterruptvoidPORT1_ISR(void)
{if(P1IFG&BIT0){…//处理来自P1.0的中断}…
P1IFG=0;//必须手动清除中断标志位}
③对于可屏蔽中断,都需要打开总中断和各自模块的中断控制位;
2、内部函数;
(1)设置总中断开关的函数:
①关闭总中断:
void__disable_interrupt(void)
该函数的功能是关闭总中断(使GIE=0)。
该函数的简写形式为_DINT();
②打开总中断:
void__enable_interrupt(void)
该函数的功能是打开总中断(使GIE=1)。
该函数的简写形式为_EINT();
(2)设置低功耗模式的函数:
①进入:
void__low_power_mode_n(void)
该函数的功能是使CPU进入低功耗模式,其中n=0~4。
其简写形式为LPMx;常用于主函数;
<1
②退出:
void__low_power_mode_off_on_exit(void)
函数的功能是从中断函数返回时退出低功耗模式(任何低功耗模式)。
若要退出相应的低功耗模式,也可使用LPMx_EXIT;用于中断函数中;
(3)cpu操作状态寄存器SR的函数:
①获取当前SR的值:
<1unsignedshort__get_SR_register(void):
不适用于中断函数;
<2unsignedshort__get_SR_register_on_exit(void)只用在中断函数;
②对SR某些位清零:
需要清零的位为1,其它为0:
<1void__bic_SR_register(unsignedshort):
常用于函数;
简写形式为_BIC_SR(unsignedshort);
<2void__bic_SR_register_on_exit(unsignedshort)只用在中断函数;
简写形式为_BIC_SR_IRQ(unsignedshort);
③对SR某些位置1:
需要置1的位为1,其它为0:
<1void__bis_SR_register(unsignedshort):
常用于函数;
简写形式为_BIS_SR(unsignedshort);
<2void__bis_SR_register_on_exit(unsignedshort)只用在中断函数;
简写形式为_BIS_SR_IRQ(unsignedshort);
中断:
开:
_EINT();_BIS_SR(GIE);(仅GIE;有时并不灵)
关:
_DINT();_BIC_SR(GIE);
功耗;进:
LMP3;_BIS_SR(LMP3_bits);
出:
LMP3_EXIT;_BIC_SR_IRQ(LMP3_bits);
(4)其他函数:
更多可查:
intrinsics.H;
①执行空操作:
void__no_operation(void);简写形式为_NOP();
②__delay_cycles();
该本征函数在intrinsics.H里,意思是延迟__cycles个机器周期;
即__intrinsicvoid__delay_cycles(unsignedlong__cycles);
<1__delay_cycles(100);即延迟100个主时钟周期;、
第5章单片机输入输出接口
1、控制寄存器:
系统复位后,所有端口都为输入状态,且为一般IO端口;
(1)方向寄存器PxDIR:
0,输入方向;1,输出方向;P1DIR|=BIT0:
1.0为输出;
(2)输入寄存器PxIN:
该寄存器用于存放管脚当前的电平状态;
(3)输出寄存器PxOUT:
①端口被配置为IO功能+输出方向+上下拉电阻禁用:
写入该寄存器的值自动输出到相应管脚上;
②输入方向+上下拉电阻使用:
PxOUT表示相应管脚是上拉还是下拉电阻;
0表示下拉;1表示上拉;
(4)上下拉使能寄存器PxREN:
0,禁用上下拉电阻;1,使用上下拉电阻;
①msp430已将引脚上的上下拉电阻集成在IO端口电路中,但经测试仅2.4可以;
②上下拉电阻:
<1上下拉电阻是解决IO悬空不定状态的一种常用方法:
如果确保IO悬空是高电平,加一个上拉电阻至输入电源即可;如果确保IO悬空是低电平,加一个下拉电阻至地即可;
430的2.4口集成上下拉电阻,其它口可外加电阻(一般1k);
见E:
\PROTEUS\步进电机——ULN2003、步进电机、io中断\DJ_Qianjin_Houtui.DSN
<2端口悬空:
假设输入电源是5v,悬空时电压一般是3.3v,是一个中间态。
可能被当作是高电平,也可能是低电平,视单片机而定;
(5)功能选择寄存器PxSEL/PxSEL2:
功能见上图;P1SEL|=BIT1:
选择1.1为第二功能;
①对于P1、P2,如果不是一般IO功能,则其中断功能将被禁用,即使中断使能位打开,也不会引起中断;
②PxSEL.m=1+PxREN.m=1时,可能会烧坏内部上下拉电阻,不推荐使用该组合;
(6)中断使能寄存器PxIE:
每个引脚的中断功能都可由相应的中断使能位控制;0禁用中断,1使用中断;
(7)中断边沿选择寄存器PxIES:
0上升沿触发;1下降沿触发;
(8)中断标志寄存器PxIFG:
①中断标志位不会自动清零,需及时手动清零;
②PxDIR、PxOUT、PxIES都会对PxIFG产生影响,所以清零一般在设置的最后;见E:
\PROTEUS\步进电机——ULN2003、步进电机、io中断\DJ_Qianjin_Houtui.txt
第六章时钟系统与定时器
1、时钟系统
(1)时钟源与时钟输出
1时钟源:
4种时钟源(F261x系列)
<1>内部低速时钟振荡器VLO:
时钟频率12K;
<2>外部低速时钟振荡器LFXT1:
<1工作方式:
(1直接接外部时钟信号:
需OSCOFF=0、LFXT1Sx=11、XCAPx=00;
(2外接晶振:
低频模式:
32.768k(通常)+内部电容+XTS=0;
高频模式:
450k~16M+外加匹配电容+XTS=1+XCAPx=00;
<2默认频率:
32.768k;
<3>外部高速时钟振荡器XT2:
<1工作方式:
(1X2IN直接接外部时钟信号:
需XT2OFF=0、XT2Sx=11;
(2外接晶振:
外接晶振+外接匹配电容;
<4>数控时钟振荡器DCO:
集成高频时钟源
<1RSELx确定标称频率;DCOx分段粗调;MODx细调;
<2默认RSELx=7、DCOx=3、MODx=0,输出频率在1M左右;
2时钟输出:
3种
<1>:
辅助时钟ACLK:
<1选时钟源:
XTS、LFXT1Sx;分频:
DIVAx;
<2默认:
LFXT1+不分频;即32.768k(接手表晶振);
<2>:
子系统时钟SMCLK:
<1选时钟源:
SELS;分频:
DIVSx;
<2默认:
DOC+不分频;即1M;
<3>:
主系统时钟MCLK:
<1选时钟源:
SELMx;分频:
DIVMx;为CPU提供时钟;
<2默认:
DOC+不分频;即1M;
③基本时钟系统寄存器:
<1>数控振荡器控制寄存器(DCOCTL)
76543210
DCOx
MODx
DCOx:
将一个标称频率段粗略分成8个区域,值越大频率越高;
MODx:
将每个区域再次划分为32个微调区间;
<2>基本时钟控制寄存器1(BCSCTL1)
76543210
XT2OFF
XTS
DIVAx
RSELx
XT2OFF:
关闭XT2;
XTS:
XTS=0:
LFXT1工作在低频模式。
外部晶振(通常为32.768k)+内部电容;
XTS=1:
LFXT1工作在高频模式。
外部晶振+外部电容+XCAP=00;
DIVAx:
辅助时钟分频系数,系统复位后默认不分频;
RSELx:
DCO有16个标称频率段,RSELx从0到15,DCO频率逐步增加;
<1DCO频率由RSELx、DCOCTL共同组合控制,典型值如下:
BCSCTL1=CALBC1_1MHz,DCOCTL=CALDCO_1MHz1MHz;…
共4种:
1,8,12,16,最大误差不超过1%;
<2默认情况下RSELx=7、DCOx=3、MODx=0,此时DCO的输出频率在1MHz左右;
<3>基本时钟控制寄存器2(BCSCTL2)
76543210
SELMx
DIVMx
SELS
DIVSx
DCOR
DIVMx:
主时钟的分频系数;
DIVSx;子系统时钟的分频系数;
SELS:
SELS=0,子系统时钟选择DCO作为时钟源;
SELS=1,子系统时钟选择XT2作为时钟源;
<4>基本时钟控制寄存器3(BCSCTL3)
76543210
XT2Sx
LFXT1Sx
XCAPx
XT2OF
LFXT1OF
XT2Sx:
XT2工作在外接高频晶振方式时:
XT2Sx=00,使用0.4~1MHz的晶振;XT2Sx=01,使用1~3MHz的晶振;
XT2Sx=10,使用3~16MHz的晶振;XT2Sx=11,使用0.4~16MHz的晶振;
LFXT1Sx:
与XTS共同控制LFXT1工作方式:
XCAPx:
LFXT1工作在低频模式时,XCAPx用于选择匹配电容:
XCAPx=00,选择1pF电容;XCAPx=01,选择6pF电容;
XCAPx=10,选择10pF电容;XCAPx=01,选择12.5pF电容;
XT2OF:
状态标志位;
XT2OF=0,表示XT2振荡器正常工作;XT2OF=1,表示XT2振荡器出现故障;
LFXT1OF:
反映LFXT1振荡器的工作状态;
LFXT1OF=0,表示LFXT1振荡器正常工作;LFXT1OF=1,表示LFXT1振荡器出现故障;
<5>中断使能寄存器1(IE1)
76543210
OFIE
OFIE:
OFIE=0,禁止时钟失效中断向CPU使出中断请求;
<6>中断标志寄存器1(IFG1)
76543210
OFIFG
OFIFG:
OFIFG=0,表示时钟系统没有触发时钟失效中断;
(2)定时器A
定时器A包括一个定时计数部件,3个捕获/比较部件。
捕获/比较部件又包括捕获单元、比较单元和输出单元(负责比较/捕获结果的输出)。
①TA控制寄存器TACTL
15`141312111098
未使用
TASSELx
76543210
IDx
MCx
未使用
TACLR
TAIE
TAIFG
TASSELx:
选择时钟源:
TASSELx=00,时钟源为TACLK;TASSELx=01,时钟源为ACLK;
TASSELx=10,时钟源为SMCLK;TASSELx=11,时钟源为INCLK;
F261x系列:
P1.0的第二功能为外部输入的TACLK,P2.1的第二功能为外部输入的INCLK;
IDx:
分频系数:
IDx=0,1,2,3分别为1,2,4,8分频;
MCx:
计数方式:
MCx=00,暂停计数;MCx=01,增计数;MCx=10,连续计数;MCx=11,增减计数;
<1增计数:
TAR与TACCR0相等时,比较/捕获中断标志位TACCR0CCIFG置位,定时器复位从0重新计数;
当TAR计满溢出时,定时器溢出中断标志位TAIFG置位,比TACCR0CCIFG晚一个周期;
<2连续计数方式:
定时/计数器重复从0x0000增计数至0xFFFF,当从0xFFFF变化到0x0000时,将引起TAIFG置位;
<3增减计数方式:
定时/计数器首先从0增计数到TACCR0,然后减计数到0;
TAR=TACCR0时,TACCR0CCIFG置位;
TAR从1变化到0时,TAIFG置位;
TACLR:
清零
TACLR=1,可将TAR、IDx、MCx清零,清零后TACLR会自动复位;
TAIFG:
定时器溢出中断标志位;
TAIE:
定时器溢出中断使能;
TAIFG:
定时/计数器计满时,将产生定时器溢出中断请求并使TAIFG=1,如果TAIE=1,GIE=1,则会向CPU发出中断请求;
②TA计数寄存器TAR
150
TARx
③TA捕获/比较寄存器TACCRn(n为1~3)
150
TACCRx
④TA捕获/比较控制寄存器TACCTLn(n为1~3)
15141312111098
CMx
CCISx
SCS
SCCI
未使用
CAP
76543210
OUTMODx
CCIE
CCI
OUT
COV
CCIFG
CMx:
捕获方式选择
CMx=00,不捕获;CMx=0,上升沿捕获;
CMx=10,下降沿捕获;CMx=11,双边沿捕获;
CCISx:
捕获信号选取:
CCISx=00,表示输入信号为CCIxA;CCISx=01,表示输入信号为CCIxB;
CCISx=10,表示输入信号为GND;CCISx=11,表示输入信号为VCC;
对于F261x
引脚
第二功能说明
引脚
第二功能说明
P1.1
CCI0A
P2.1
CCI0B
P1.2
CCI1A
P2.2
CCI1B
P1.3
CCI2A
P2.3
CCI2B
<1每一个捕获功能部件可以接受两路外部输入信号(CCIxA与CCIxB)和两路内部信号(GND与VCC);
SCS:
SCS=0,表示异步捕获;SCS=1,表示同步捕获;常用同步捕获;
SCCI:
表示同步的捕获通道输入;
CAP:
CAP=0,比较/捕获部件工作在比较功能状态;
CAP=1,比较/捕获部件工作在捕获功能状态;
比较功能:
当TAR=TACCRn时,CCIFG置位;
捕获功能:
当捕获事件发生时,TAR的当前值TARx就被复制到TACCRn中;
CCI:
表示捕获通道的输入信号;
COV:
查询溢出状态:
COV=0,未发生捕获溢出;COV=1,已发生捕获溢出;
可以判断捕获数据读出前是否发生过捕获数据被覆盖的情况,该位需用软件复位;
CCIE:
捕获中断使能位;
CCIFG:
捕获中断标志位,在捕获功能下,发生捕获事件时CCIFG=1;
OUTMODx:
输出方式;
<1TACCR0部件的输出OUT0对应P1.1,P1.5,P2.7的第二功能;
TACCR1部件的输出OUT1对应P1.2,P1.6,P2.3的第二功能;
TACCR2部件的输出OUT2对应P1.3,P1.7,P2.4的第二功能;
⑤TA中断向量寄存器TAIV
15141312111098
76543210
TAIVx
<1比较/捕获中断0,有独自中断向量TIMERA0_VECTOR,单源中断;
<2定时器溢出中断和其他两个比较/捕获中断,共用中断向量TIMERA1_VECTOR,共源中断;
(3)看门狗计时器
实质上就是一个定时/计数器,只能实现4种计数长度;
共有三种模式:
关闭、定时模式、看门狗模式;
①控制寄存器WDTCNT
158
WDTPW
76543210
WDTHOLD
WDTNMIES
WDTNMI
WDTTMSEL
WDTCNTCL
WDTSSEL
WDTISx
WDTPW:
高8位为访问密码;
WDTHOLD:
WDTHOLD=0,启用WDT;WDTHOLD=1,关闭WDT;复位后默认启用WDT
WDTTMSEL:
工作模式选取:
WDTTMSEL=0,处于看门狗模式(默认);WDTTMSEL=1,处于定时模式;
WDTCNTCL:
WDTCNTCL=1,计数器(WDTCNT)将被清零,完毕后自动复位;
WDTSSEL:
WDTSSEL=0,选择时钟源为SMCLK;WDTSSEL=1,选择时钟源为ACLK;
WDTISx:
控制计数长度:
WDTISx=00,计数次数为2^15;WDTISx=01,计数次数为2^13;
WDTISx=10,计数次数为2^9;WDTISx=11,计数次数为2^6;
②中断标志寄存器IFG11
76543210
NMIIFG
WDTIFG
WDTIFG:
中断标志位:
<1定时模式:
单源中断,可屏蔽中断,当计数器达到既定计数长度时就会产生溢出中断,使中断标志位置位;
<2看门狗模式:
系统复位中断,共源中断,不可屏蔽,可用与判断中断源;
③中断允许寄存器IE1
76543210
NMIIE
WDTIE
第七章MSP430单片机模拟信号处理
1、ADC
系统启动或复位后,默认ADC12CTLx=0,ADC12MEMCTLx=0;
(1)转换控制寄存器0(ADC12CTL0)
15141312111098
SHT1x
SHT0x
76543210
MSC
REF2_
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- MSP4304