MSP4304.docx

上传人:b****1 文档编号:981357 上传时间:2023-04-30 格式:DOCX 页数:28 大小:488.28KB
下载 相关 举报
MSP4304.docx_第1页
第1页 / 共28页
MSP4304.docx_第2页
第2页 / 共28页
MSP4304.docx_第3页
第3页 / 共28页
MSP4304.docx_第4页
第4页 / 共28页
MSP4304.docx_第5页
第5页 / 共28页
MSP4304.docx_第6页
第6页 / 共28页
MSP4304.docx_第7页
第7页 / 共28页
MSP4304.docx_第8页
第8页 / 共28页
MSP4304.docx_第9页
第9页 / 共28页
MSP4304.docx_第10页
第10页 / 共28页
MSP4304.docx_第11页
第11页 / 共28页
MSP4304.docx_第12页
第12页 / 共28页
MSP4304.docx_第13页
第13页 / 共28页
MSP4304.docx_第14页
第14页 / 共28页
MSP4304.docx_第15页
第15页 / 共28页
MSP4304.docx_第16页
第16页 / 共28页
MSP4304.docx_第17页
第17页 / 共28页
MSP4304.docx_第18页
第18页 / 共28页
MSP4304.docx_第19页
第19页 / 共28页
MSP4304.docx_第20页
第20页 / 共28页
亲,该文档总共28页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

MSP4304.docx

《MSP4304.docx》由会员分享,可在线阅读,更多相关《MSP4304.docx(28页珍藏版)》请在冰点文库上搜索。

MSP4304.docx

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_

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 求职职场 > 自我管理与提升

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2