msp430常用库函数

合集下载

msp430各功能模块的介绍

msp430各功能模块的介绍

各个时钟信号源介绍如下:1、LFXT1CLK:低频/高频时钟源。

可以外接32768Hz的时钟芯片或频率为450KHz~8MHz的标准警惕或共振器。

2、XT2CLK:高频时钟源。

需要外接两个震荡电容器。

可以外接32768Hz的时钟芯片或频率为450KHz~8MHz的标准警惕或共振器和外部时钟输入。

较常用的晶体是8MHz的。

3、DCOCLK:内部数字可控制的RC振荡器。

MSP430单片机时钟模块提供3个时钟信号以供给片内各部分电路使用,这3个时钟信号分别是:(1)ACLK:辅助时钟信号。

ACLK是从LFXT1CLK信号由1/2/4/8分频器分频后得到的。

由BCSCTL1寄存器设置DIV A相应位来决定分频因子。

ACLK可提供给CPU外围功能模块做时钟信号使用。

(2)MCLK:主时钟信号。

MCLK是由3个时钟源所提供的。

它们分别是:LFXT1CLK、XT2CLK、和DCO时钟源信号。

MCLK主要用于MCU和相关模块做时钟。

同样可设置相关寄存器来决定分频因子及相关设置。

(3)SMCLK:子系统时钟。

SMCLK由2个时钟源信号提供,他们分别是XT2CLK 和DCO。

如果是F11或F11X1系列单片机,则由LFXT1CLK代替XT2CLK。

同样可设置相关寄存器来决定分频因子及相关的设置。

低频振荡器LFXT1:LFXT1支持超低功耗,它在低频模式下使用一个32768Hz的晶体。

不需要任何电容因为在低频模式下内部集成了电容。

低频振荡器也支持高频模式和高速晶体,但连接时每端必须加电容。

电容的大小根据所接晶体频率的高低来选择。

低频振荡器在低频和高频模式下都可以选择从XIN引脚接入一个外部输入时钟信号,但所接频率必须根据所设定的工作模式来选择,并且OSCOFF位必须复位。

高频振荡器LFXT2:LFXT2作为MSP430的第二晶体振荡器。

与低频相比,其功耗更大。

高频晶体真大气外接在XIN2和XOUT2两个引脚,并且必须外接电容。

MSP430程序库之定时器TA的PWM输出

MSP430程序库之定时器TA的PWM输出

MSP430程序库之定时器TA的PWM输出定时器是单片机常用的其本设备,用来产生精确计时或是其他功能;msp430的定时器不仅可以完成精确定时,还能产生PWM波形输出,和捕获时刻值(上升沿或是下降沿到来的时候)。

这里完成一个比较通用的PWM波形产生程序。

1.硬件介绍:MSP430系列单片机的TimerA结构复杂,功能强大,适合应用于工业控制,如数字化电机控制,电表和手持式仪表的理想配置。

它给开发人员提供了较多灵活的选择余地。

当PWM 不需要修改占空比和时间时,TimerA 能自动输出PWM,而不需利用中断维持PWM输出。

MSP430F16x和MSP430F14x单片机内部均含有两个定时器,TA和TB;TA 有三个模块,CCR0-CCR2;TB含有CCR0-CCR67个模块;其中CCR0模块不能完整的输出PWM波形(只有三种输出模式可用);TA可以输出完整的2路PWM波形;TB可以输出6路完整的PWM波形。

定时器的PWM输出有有8种模式:输出模式0 输出模式:输出信号OUTx由每个捕获/比较模块的控制寄存器CCTLx中的OUTx位定义,并在写入该寄存器后立即更新。

最终位OUTx直通。

输出模式1 置位模式:输出信号在TAR等于CCRx时置位,并保持置位到定时器复位或选择另一种输出模式为止。

输出模式2 PWM翻转/复位模式:输出在TAR的值等于CCRx时翻转,当TAR 的值等于CCR0时复位。

输出模式3 PWM置位/复位模式:输出在TAR的值等于CCRx时置位,当TAR 的值等于CCR0时复位。

输出模式4 翻转模式:输出电平在TAR的值等于CCRx时翻转,输出周期是定时器周期的2倍。

输出模式5复位模式:输出在TAR的值等于CCRx时复位,并保持低电平直到选择另一种输出模式。

输出模式6PWM翻转/置位模式:输出电平在TAR的值等于CCRx时翻转,当TAR值等于CCR0时置位。

输出模式7PWM复位/置位模式:输出电平在TAR的值等于CCRx时复位,当TAR的值等于CCR0时置位。

msp430延时函数

msp430延时函数

打开CCIE(比较模式),计数到CCR0时置位CCIFG,进入中断TIMERA0_VECTOR
而打开TAIE,当定时器溢出时置位TAIFG,进入中断TIMERA1_VECTOR
__enable_interrupt()比较专一,只是开中断。
而_bis_SR_register可带参数,可以置位SR中的其他位,功能广泛一些。
unsigned int i,j;
for(i = 0;i < time0;j < 30; j++);
}
}
经计算延时5ms 大概就是 20
//尚未得知
void Delay(unsigned int Time)
{
while(Time)
//虽然默认下是1m,但是为了安全起见,这里对其进行校准!
DCOCTL = CALDCO_1MHZ;
BCSCTL1 = CALBC1_1MHZ;
//经验证,这是1M下 5000 为1s 左右的样子! 则0.2ms左右
void delay(unsigned int time)
{
DCOCTL = CALDCO_8MHZ;
BCSCTL1 = CALBC1_8MHZ;
void delay(unsigned int ms)
{
unsigned int i,j;
for( i=0;i<ms;i++)
for(j=0;j<1141;j++); //8MHz晶振时
#define CPU_F ((double)8000000)
#define delay_us(x) __delay_cycles((long)(CPU_F*(double)x/1000000.0))

msp430复习资料

msp430复习资料

1.寄存器R0~R3 :分别为程序计数器、堆栈指针、状态寄存器和常数发生器。

PC(程序计数器即R0)用来存放下一条将要从程序存储器中取出的指令地址。

SP(堆栈指针即R1) 指明堆栈顶。

SR(状态寄存器即R2)各位的含义:15~9 8 7 6 5 4 3 2 1 0 保留V SCG1 SCG00 OscOFF CPUOFF GIE N Z C 状态标志:C进位标志位,运算结果进位时C置位,否则C复位。

Z 零标志,运算结果0置位,否则复位。

N 负标志位,为负结果置位,否则复位。

V 溢出标志,运算结果超出符号位时置位,否则复位, 溢出情况如下:正数+正数=负数正数-负数=负数负数+负数=正数负数-正数=正数控制标志:GIE 中断标志位,控制可屏蔽中断,置位可响应可屏蔽中断。

CPUOFF cpu控制位,置位可是cpu进入关闭模式。

OscOFF 晶振控制位,置位使晶体振荡器处于停止状态。

SCG0,SCG1 时钟控制位,SGC1置位关闭SMCLK ,SGC0 置位关闭DCO发生器。

2.MSP430 单片机存储空间结构:该系列单片机采用的是同一结构,是物理上完全分开离的存储区域,ROM、FLASH、RAM、外围模块、特殊功能寄存器SFR 等,被安排在同一地址空间。

存储空间分布:1)中断向量被在相同的空间:0FFE0~0FFFFH;2)8位、16位外围模块占用相同范围的存储器地址;3)特殊功能寄存器占用相同范围的存储器地址;4)数据存储器都从0200H处开始;5)程序存储器的最高地址都是0FFFFH;3. 中断源:能够对cpu请求中断服务的功能模块。

中断标志:片内或片外在进行中断请求时置位的寄存器。

中断事件:系统在中断时,中断程序所要完成的任务。

中断向量:就是中断向量指针。

中断向量指针:存放中断程序入口地址的存储单元。

4. POR信号产生之后,系统状态为:RST/NMI 引脚被设置为复位模式;I/O引脚被转换成输入模式;状态寄存器复位;看门狗定时器进入看门狗模式;程序计数器PC 指向复位向量的地址(0FFEH) 上电复位(POR)与上电清除(PUC)上电复位(POR)与上电清除(PUC)信号可以使MSP430单片机系统复位。

MSP430程序库六通过SPI操作AD7708

MSP430程序库六通过SPI操作AD7708

MSP430程序库<六>通过SPI操作AD7708AD7708是16位的Σ-Δ型AD转换芯片,在低频应用中,AD7708可以作为单电源供电的完整前端。

AD7708内部含有一个PGA(可编程增益放大器),可以完成对信号的放大;PGA范围是20-28八档可编程,当取参考电压2.5v时可以测量量程20mv到2.56v的电压。

AD7708和AD7718引脚功能完全一样,只是位数AD7718是24位的,若用7718,只需改动少部分的程序,16位的部分改成24位即可。

AD7708是通过SPI接口通信的;程序使用前一篇实现的SPI程序与AD芯片通信,可以作为SPI详细的使用示例。

硬件介绍:硬件主要是MSP430的SPI接口和AD7708芯片的说用说明。

msp430的SPI接口:支持主机模式和从机模式,且始终的极性和相位可调,在于AD 转换芯片通信的时候,需要极性一致。

有关msp430的SPI的详细介绍,参考:MSP4 30程序库<五>SPI同步串行通信。

AD7718 的外部引脚有28 个。

按性质主要分为模拟、数字两个部分。

模拟部分引脚有模拟输入、参考电压输入和模拟电源三类。

模拟输入引脚可以配置为8通道或10通道的伪差分输入,他们共同参考AINCOM端。

数字部分引脚有SPI 接口、数据就绪、通用I/O 口和数字电源四类。

SPI 接口的4 根标准信号线分别是片选信号CS 、串行时钟输入SCLK、串行数据输入DIN 和串行数据输出DOUT。

当AD7718接在SPI 总线上时是从器件,从引脚CS 输入低电平信号使能AD7718。

数据就绪RDY 是一个低电平有效的输出引脚。

当所选通道数据寄存器中有有效数据时,输出低电平信号;数据被读出后,输出高电平。

AD7718 的通用I/O 口是2 个一位口P1 和P2。

它们既可配置成输入也可配置成输出,单片机通过SPI 口读写AD7718 片内相关寄存器实现对P1 和P2 的操作。

IAR C 430标准库函数

IAR C 430标准库函数

ctype.h 字符处理类isalnum int isalnum(int c) 字母还是数字isalpha int isalpha(int c) 是否字母iscntrl int iscntrl(int c) 是否控制码isdigit int isdigit(int c) 是否数字isgraph int isgraph(int c) 是否为可打印的非空字符islower int islower(int c) 是否小写字母isprint int isprint(int c) 是否为可打印字符ispunct int ispunct(int c) 是否为表示标点符号的字符isspace int isspace(int c) 是否为空白字符isupper int isupper(int c) 是否为大写字符isxdigit int isxdigit(int c) 是否为十六进制数tolower int tolower(int c) 转换为小写字符toupper int toupper(int c) 转换为大写字符math.h 数字类acos double acos(double arg) 反余弦函数asin double asin(double arg) 反正弦函数atan double atan(double arg) 反正切函数atan2 double atan2(double arg1,double arg2) 带象限的反正切函数ceil double ceil(double arg) 大于或等于arg的最小正整数cos double cos(double arg) 余弦函数cosh double cosh(double arg) 双余弦函数exp double exp(double arg) 指数函数arg) 双精度的浮点绝对值fabs(doublefabsdoublefloor double floor(double arg) 大于或等于arg的最大正整数fmod double fmod(double arg1,double arg2) 浮点数的余数frexp double frexp(double arg1,int *arg2) 将浮点数分为两部分ldexp(double arg1,int arg2) 乘以2的幂log double log(double arg) 自然对数函数log10 double log10(double arg) 以10为底的对数函数modf double modf(double value,double *iptr) 拆开为整数部分和小数部分pow double pow(double arg1,double arg2) 求幂函数sin double sin(double arg) 正弦函数sinh double sinh(double arg) 双曲正弦sqrt double sqrt(double arg) 平方根函数tan double tan(double arg) 正切函数tanh double tanh(double arg) 双曲正切函数setjmp.h 非局部跳转longjmp void longjmp(jmp_buf env,int val) 长跳转setjmp int setjmp(jmp_buf env) 设置返回点跳转stdio.h 输入和输出类函数intgetchar(void) 获得字符getchar*s) 读字符串*gets(charchargetsprintf int printf(const char *format,…) 写格式化数据putcharvalue) 写字符函数putchar(intint*s) 写字符串函数charputsintputs(constscanf int scanf(const char *format, …) 读格式化数据sprintf int sprintf(char *s,const char *format,) 将格式化数据写入字符串sscanf int sscanf(const char *s,const char *format,…)从字符串中读取格式化数据stdlib.h 通用子程序类abort void abort(void) 非正常结束程序abs int abs(int j) 绝对值函数charatof(const*nptr) 转换ASCII为双精度atofdoubleatoi int atoi(const char *nptr) 转换ASCII为整数atol long atol(const char *nptr) 转换ASCII为长整形*bsearch(constvoid 在数组中搜索voidbsearch*base,void*key,constsize,nmemb,size_tsize_tvoid(*compare)(constint*_base));void*_key,constcalloc void *calloc(size_t nelem,size_t elsize) 为目标数组分配存储器单元div div_t div(int numer,int denom) 除法运算函数status) 结束程序exit(intexitvoid*ptr) 释放存储器单元free(voidvoidfreej) 整形数取绝对值labs long int labs(longintldiv ldiv_t ldiv(long int numer,long int denom) 长整形除法size) 分配存储器*malloc(size_tvoidmallocqsort void qsort(const void *base, 数组排序size_t nmemb,size_t size,int (*compare)(const void*_key,const void *_base));rand(void) 随机数生成函数intrandrealloc void *realloc(void *ptr,size_t,size) 重新分配存储器单元函数srand void srand(unsigned int seed) 设置随机数(的种子)strtod double strtod(const char 将字符串转换为双精度数**endptr)*nptr,charstrtol long int strtol(constchar 将字符串转换为长整形数**endptr,intase)*nptr,charstrtoul unsigned long int strtoul 字符串转换为无符号整形数char*nptr,charconstint)**endptr,basestring.h 字符串处理类memchr void *memchr(const void *s,int c,size_t n) 在存储器中搜索字符memcmp int memcmp(const void *s1,const void *s2,size_t n)比较存储器内容memcpy void *memcpy(void *s1,const void *s2,size_t n) 拷贝存储器内容memmove void *memmove(void *s1,const void *s2,size_t n)移动存储器内容memset void *memset(void *s,int c,size_t n) 置存储器strcat char *strcat(char *s1,const char *s2) 逻辑字符串strchr char *strchr(const char*s,int c) 在字符串中找某一个字符strcmp int strcmp(const char *s1,const char *s2) 比较两个字符串strcoll int strcoll(const char *s1,const char *s2) 比较字符串strcpy char *strcpy(char *s1,const char *s2) 拷贝字符串strcspn size_t strcspn(const char *s1,const char *s2)在字符串中跨过被排除的字符strerror char *strerror(interrnum) 给出一个错误信息字符串char*s) 计算字符串长度函数size_tstrlen(conststrlenstrncat char *strncat(char *s1,const char *s2, size_t n)将指定数量的字符与字符串连接起来strncmp int strncmp(const char *s1,const char *s2, size_t n) 将指定数量的字符与字符串相比较strncpy har *strncpy(char *s1,const char *s2, size_t n)在字符串中复制指定的字符strpbrk char *strpbrk(const char *s1,const char *s2)在字符串中寻找任何指定的字符strrchr char *strrchr(const char *s,int c) 从字符串的右端开始寻找字符strspn size_t strspn(const char *s1,const char *s2) 在字符串中统计和分析字符strstr char *strstr(const char *s1,const char *s2) 在字符串中搜索子字符串strtok char *strtok(char *s1,const char *s2) 将标志前的字符剪掉strxfrm size_t strxfrm(char *s1,const char *s2,size_t n) 转换字符串并返回其长度。

MSP430程序库九数码管显示

MSP430程序库九数码管显示

数码管也是单片机系统最常用的输出设备之一(还有液晶、发光二极管等)。

七段(这里用的是8段,有小数点)数码管可以完成显示0-9数字和一部分的英文字符如:A、b。

本文实现的程序完成显示数字和可显示的英文字符;同时完成数码管显示的printf函数的移植,以支持printf的格式化字符等好用的特点(我用的数码管8个排为一排,方便数字等的显示)。

1.硬件介绍:这里所用到的硬件资源包括8个数码管、和msp430单片机的两个8位IO口(这里用的是P3和P5口,如有改变,可以通过宏定义更改)。

数码管是8个共阴的数码管,a-h8段通过一个200Ω的电阻接到430单片机的P5口。

共阴端是由单片机的P3口控制,单片机的一位IO通过一个三极管接到数码管的共阴端,以完成位选。

单片机的P3口时数码管的位选口,某位为高则选中;P5口时段选口;要数码管显示时,通过P3位选,选中某个数码管亮,P5段选选择8段(a-h)中的那些亮,从而控制某一位显示数字或字符。

要同时显示多个数码管,就要动态扫描;动态扫描时,本程序选用的是由看门狗的中断扫描显示:每1.9ms显示其中的一位,动态扫描显示每一位,从而让数码管看起来是同时亮的。

2.程序实现:数码管显示首先要有一个数码管显示的断码表(完成数字和字符到数码管段值的表),程序中采用了《MSP430系列单片机系统工程设计与实践》这本书推荐的方式实现的这个数码表:先用宏定义定义每段对应的单片机要输出的段值,然后再实现是个表,当硬件改变时,只需更改前面的每段的段值定义即可,改动的地方少了很多,代码如下:/*宏定义,数码管a-h各段对应的比特,更换硬件只用改动以下8行*/#define a0x01//AAAA#define b0x02//F B#define c0x04//F B#define d0x08//GGGG#define e0x10//E C#define f0x20//E C#define g0x40//DDDD HH#define h0x80//小数点/*用宏定义自动生成段码表,很好的写法,值得学习*//*更换硬件无需重写段码表*/const char Tab[]={a+b+c+d+e+f,//Displays"0"b+c,//Displays"1"a+b+d+e+g,//Displays"2"a+b+c+d+g,//Displays"3"b+c+f+g,//Displays"4"a+c+d+f+g,//Displays"5"a+c+d+e+f+g,//Displays"6"a+b+c,//Displays"7"a+b+c+d+e+f+g,//Displays"8"a+b+c+d+f+g,//Displays"9"a+b+c+e+f+g,//Displays"A"c+d+e+f+g,//Displays"B"a+d+e+f,//Displays"C"b+c+d+e+g,//Displays"D"a+d+e+f+g,//Displays"E"a+c+d+e+f,//Displays"G" b+c+e+f+g,//Displays"H" e+f,//Displays"I" b+c+d+e,//Displays"J" b+d+e+f+g,//Displays"K" d+e+f,//Displays"L" a+c+e+g,//Displays"M" a+b+c+e+f,//Displays"N" c+e+g,//Displays"n" c+d+e+g,//Displays"o" a+b+c+d+e+f,//Displays"O" a+b+e+f+g,//Displays"P" a+b+c+f+g,//Displays"Q" e+g,//Displays"r" a+c+d+f+g,//Displays"S" d+e+f+g,//Displays"t" a+e+f,//Displays"T" b+c+d+e+f,//Displays"U" c+d+e,//Displays"v" b+d+f+g,//Displays"W" b+c+d+f+g,//Displays"Y"g,//Displays"-"h,//Displays"."0//Displays"" };#undef a#undef b#undef c#undef d#undef e#undef f#undef g0-9的位置对应显示0-9,之后的是A开始往后显示,为了方便访问这个表格,定义了AA等一系列的常量,方便访问这个表。

MPS430单片机寄存器资料

MPS430单片机寄存器资料

MSP430单片机自学知识点笔记目录1、 PWM(脉冲宽度调制) (3)2、 ADC (3)3、DCO (3)4、 MSP430F1xx基础时钟模块有三个时钟输入源介绍 (3)5、基础时钟模块可以提供三种时钟信号,分别是ACLK、MCLK和SMCLK。

(3)注意:在MSP430单片机中一共有三个时钟源: (3)6、 DCO控制寄存器DCOCTL各位定义如下表: (4)7、基本时钟系统控制寄存器BCSCTL1 (4)8、基本时钟系统控制寄存器BCSCTL2 (5)9、 FCTL1寄存器 (6)10、 FCTL2寄存器 (7)11、 FCTL3寄存器 (8)12、IE1寄存器 (8)13、编程语句注释 (9)14、MSP430 头文件对Bitx的定义 (9)15、IFG1寄存器 (10)16、定时器的定时周期 (10)17、注意:定时器的工作方式 (10)18、#pragma vector=TIMERA0_VECTOR (12)19、TACCTLx寄存器 (12)20、符号运算 (14)21、延时函数 _NOP() (14)22、TACTL寄存器 (14)23、TAIV TA 中断向量寄存器 (15)24、_EINT();与_DINT(); (16)25、I/O端口(共涉及6组34个寄存器) (16)1) P1口 (16)2) P2口 (17)3) P3口 (18)4) P4口 (19)5) P5口 (19)6) P6口 (20)26、IAR快捷键操作 (21)27、语句_BIS_SR(LPM0_bits + GIE);解释 (21)28、定时器A的中断说明: (21)29、ADC12(共涉及32个寄存器和3个共用寄存器) (22)1) ADC12CTL0 转换控制寄存器 (22)2) ADC12CTL1 (24)MSP430单片机自学笔记1、PWM(脉冲宽度调制)脉冲宽度调制是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术,广泛应用在从测量、通信到功率控制与变换的许多领域中。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
相关文档
最新文档