您好,欢迎来到爱go旅游网。
搜索
您的当前位置:首页MSP430F149单片机开发以及应用

MSP430F149单片机开发以及应用

来源:爱go旅游网
 MSP430单片机的开发及应用

MSP430单片机的开发及应用

2004.9.6开始看,其实以前看过,忘记了。再看!

设计人:陈小忠

西安邮电学院电子信息工程系电子0002班

西安邮电学院63# 710061

2003年7月

西安邮电学院63# 710061 陈小忠 1

http://www.elecfans.

com MSP430单片机的开发及应用

目录

第一章 概述

第二章 MSP430 F149语言介绍

第一节 开发环境及程序下载 第二节 语言介绍

第三章 MSP430F149 资源的应用介绍及开发

第一节 中断介绍及存储器段介绍 第二节 硬件乘法器 第三节 P口

第四节 定时器及数模转换 第五节 时钟模块

第六节 USART通信模块 第七节 比较器

第八节 模数转换

第四章 MSP430F149开发板的介绍及测试

第一节 模数转换模块 第二节 传感器模块

第三节 外存和实时时钟模块 第四节 485和232模块

第五节 电源管理模块及晶振模块 第六节 PWM波形滤波

西安邮电学院63# 710061 陈小忠 2

http://www.elecfans.com MSP430单片机的开发及应用

第一章 概述

MSP430是德州公司新开发的一类具有16位总线的带FLASH 的单片机,由于其性价比和

集成度高,受到广大技术开发人员的青睐.它采用16位的总线,外设和内存统一编址,寻址范围可达K,还可以外扩展存储器.具有统一的中断管理,具有丰富的片上外围模块,片内有精密硬件乘法器、两个16位定时器、一个14路的12位的模数转换器、一个看门狗、6路P口、两路USART通信端口、一个比较器、一个DCO内部振荡器和两个外部时钟,支持8M 的时钟.由于为FLASH型,则可以在线对单片机进行调试和下载,且JTAG口直接和FET(FLASH EMULATION TOOL)的相连,不须另外的仿真工具,方便实用,而且,可以在超低功耗模式下工作,对环境和人体的辐射小,测量结果为100mw左右的功耗(电流为14mA左右),可靠性能好,加强电干扰运行不受影响,适应工业级的运行环境,适合与做手柄之类的自动控制的设备.我们相信MSP430单片机将会在工程技术应用中得以广泛应用,而且,它是通向DSP系列的桥梁,随着自动控制的高速化和低功耗化 , MSP430系列将会得到越来越多人的喜爱.通过两过多月的毕业设计,我对MSP430有了初步了解,

能力有限,没能对所有的应用一 一实验. 第二章 MSP430 F149

tp://www对内部的硬件资源和自身的汇编语法进行了实验,并开发了一个应用板,并进行了调试.鉴于时间和

MSP430是德州公司的新产品,有独特的开发环境和自身语言,下面是我在毕业设计中对F149的开发环境熟悉中遇到的一些问题的处理和汇编语言的用法及程序中遇到的问题的体会.

第一节 开发环境及程序下载

1.开发环境:在EW23环境下进行编程,汇编,连接,在C—SPY环境下进行调试,下载是在连接之后,调试之前,通过计算机的串口下载的.关于环境的操作,可以参考有关资料,其中可能遇到的问题及解决方法有:

西安邮电学院63# 710061 陈小忠 3

ht.elecfans.语言介绍

com MSP430单片机的开发及应用

(1) .汇编是对源程序而言的,因此必须打开一个源文件才能汇编,而连接是对一个工程文件而言的,连接是对工程文件的所有源代码(包括多个源文件)和数据的定位,因此连接必须打开一个工程文件才能连接. (2)

连接中必须将库文件的路径改正确,且必须选定C—SPY的驱动方式,即在project中的

options的xlink的include下修改(先选中)xcl的库路径为

$TOOLKIT_DIR$\\icc430\\msp430F149A.xcl ,选择C—SPY 的驱动drive为simulator或FLASH EMULATION TOOL ,当没连接430片子时可以选simulator,当连接430片子时,选 FLASH EMULATION TOOL进行在线下载调试. (3)

由于430支持汇编语言和C语言两种语言,因此可以在一个工程文件 中同时用两种语言,但

建议用汇编语言,因为便于在调试时寻找逻辑和指令的联系及地址的定位正确与否.

(5) 在线调试时,不能将58 管脚(复位/非屏蔽中断) 外部变高,否则,会强制退出调试环境.

2.程序下载原理及脱机工作原理:程序的在线调试是通过JATG口和F149片子的 RST、TCK、

是程序遇到非屏蔽中断和程序启动的首要地址,地址中存放的是程序段开始的首地址,因此必须把

表示方法在下一节中表示.程序的下载和在线调试的电源是通过计算机在JATG提供的,不须另外给加电源.

脱机工作时,是将F149的电源线上电,此时的复位时序同下载后在线复位的时序一样,只是时钟是通过F149内部时钟DCO提供的,上电后,程序将复位向量0FFFE中的地址装入PC,PC开始从程序段的首地址开始执行.脱机工作启动不需要任何操作,只需上电即可,电压要大于1.8v,一般取3v左右,另外,在脱机工作时,可以给RST端口加一个低电平脉冲以复位从程序开始重新执行.

西安邮电学院63# 710061 陈小忠 4

ht程序段的首地址标号表示在中断向量中或程序伪指令的开头位置,否则,连接时将会出错,具体的

tp://w过这些数据线和控制线传递的,下载时序可参见资料1,其中的地址0FFFEH为复位向量的地址,它

wwTDI、TDO、TMS引脚按一定的时序串行的传递程序代码和数据的,调试指令的命令传递都是通

.elecfans.co(4) 在在线的C—SPY 的调试中,单步需要将Control的Reatime前的勾取消才能进行单步测试.

m MSP430单片机的开发及应用

第二节 指令介绍

MSP430有自身 语言,汇编语言也不同于其他类型的单片机,伪指令也是变幻魔测,但又很重

要,下面是我毕业设计的一些尝试、出问题的地方.也可参见资料。

1.“#include” 不能大写。

2.程序段前的伪指令可以套用下列模板,在以后的几章中的程序都采用此模板,只是中间的主程序变化而已:

#include \"MSP430x14x.h\" /*把库文件包括进来 ,这个库文件是必须的,其他的库文件视需要而定*/

RSEG UDATA0 /*定义数据段一般默认数据段段地址是从0200H开始的也可以自己定义数据段 开始地址,但必须在0200H到09FFH*/

DS 0 /*表示数据段从默认的段开始,偏移地址为0,若为DS N,表示数据段的偏移地址 从N开始,此时的物理地址为(0200+N)H*/

ADINPUT EQU 00200H /*将0200H地址命名为ADINPUT,此后程序中的地址0200H 可以用ADINPUT表示,便于程序的可读性,注意:标号必须顶格写*/

A DW 5H /*定义A字变量的值为5H,此时将会将5H写到数据段的当前偏移地址上,便于后面使用,变量也得顶格写*/

RSEG CSTACK /*定义堆栈段*/

DS 0 /*段偏移值为0H,物理地址为默认开始地址值*/ RSEG CODE /*定义代码段1*/ DS 0 /*代码段1*/

RESET /*标号,表示程序段的开始地址,将被写入复位向量中*/

MOV #(WDTHOLD+WDTPW),&WDTCTL /*停止看门狗定时器*/ …… (程序段的内容)

COMMON INTVEC /*表示中断向量定义*/ /*下面的伪指令都不顶格*/ ORG XXX 1 / *XXX1表示中断向量表中的具体的中断向量1*/ DW YYY1 /*YYY是中断程序入口标号,表示中断程序首地址*/ ORG XXX2 /* XXX2 表示中断向量表中的具体的中断向量2/ DW YYY2 /*YYY2是中断程序入口标号,表示中断程序首地址*/

ORG RESET_VECTOR /*复位向量,每个程序中都必须的,可以放在段开始前的伪指令中*/ DW RESET /*程序开始的地址标号*/ END /*程序结束*/

3.几个规定:所有的标号都要顶格写,所有的变量都要顶格写,所有的伪指令和指令都不能顶格

写,CALL调用子程序是在标号前用“#”,而其他的转移指令中的标号前不用“#”,对外设的寄存器,当程序开始时,许多是复位为零的,如果要置位为1,可以直接将每一位的名称作立即数写入,例如:指令

西安邮电学院63# 710061 陈小忠 5

http://www MOV #SFE(CSTACK),SP /*初始化堆栈指针*/

.elecfans.com MSP430单片机的开发及应用

MOV #(WDTHOLD+WDTPW),&WDTCTL 就是将WDTCTL寄存器中的WDTHOLD和WDTPW位置位为高,很容易读程序内容。

4.关于几类定义的区别:EQU、=、SET、VAR、ASSIGN都是给标号变量定义地址值的伪指令,都可以出现在程序中的任何位置,但用法不一样,= 、EQU 是定义一个永久地址标号变量,一旦定义,在程序中的这个标号将固定在定义的地址上,不能改动。而SET、VAR、 ASSIGN是暂时的地址标号变量,可以在程序中改动,一旦定义了一个标号地址,就可以对这个标号作地址访问,但必须是在数据段。另外,DB 、DW是定义变量在数据段当前的偏移位置,是作为数据定义的,不是作为地址定义的,例如:

AA DB 2H /*此时在数据段的当前位置写入了2H到存储器,以后用AA时就是用数据2H,注:AA顶格写*/可以在以后的程序中看到这些区别。

中的指令在语法上都不会有太大的问题,在此不再列举。

第三章 MSP430F149 资源的应用介绍及开发

本章将介绍MSP430F149的片上资源的开发和实验程序,并有详细的时序图、波形图和实

中断在MSP430中得以广泛的应用,它可以快速进入中断程序,之后返回中断前的状态,其时序为:PC执行程序 中断允许置位 SR中的GIE置位 EINT(中断开) 中断到,中断标志位(IFG)置位 从中断向量表中读取中断程序的入口地址,进入中断程序 执行中断程序 中断允许位复位 RETI中断返回 回到原来地址。具体应用将会在应用程序中的到应用。有关中断源和中断优先级及中断允许位、中断标志位在参考资料1上有详细介绍。

MSP430单片机的片上存储器共为K,表示为图 :

西安邮电学院63# 710061 陈小忠 6

ht第一节 中断介绍及存储器段介绍

tp:/验结果的数据,当然,只能是部分应用程序。

/www.elecfans.co 其他的指令和伪指令都可以在相关资料上查找到,以上是经常出现的问题,一般核心程序

m MSP430单片机的开发及应用

0H—0FH 010H— 0100H— 0200H—9FFH 0A00H FC0H—10FFH FFE0H-- SFR 0FFH 01FFH RAM区,数 —— 为信息段 FFFFH (特殊功 (8位外 (16位外 据存储区, 0FBFH 1100H—FFDFH 中断向 能寄存器 转模块、 转模块、 可修改访问 专用 为程序代码段 量地址 IE、IFG、I/O端口)TIMER、 FLASH FLASH 型 MEM) ADC) 引导 ROM 对存储器的访问可以用间接寻址,这对于查表处理很方便,在此举一例子: 是对存储段200H

的100个数的读取和操作.

……

实验结果为:可以从R5中看到数据存储器从200H开始的100个数值,在操作完后,可以在200H开始存储器中

ht 硬件乘法器不集成在CPU内,是于CPU运行的,运算时只需将两个操作数放进相应的地

址中,就可以直接在结果寄存器中取数据,CPU可以工作在低功耗模式,如果用间接寻址模式,可以超低工耗的乘法计算大量的表数据,这儿列举一个例子,其他的几种情况类似于此:下面为有符号数(由第一个乘数决定类型)的乘法程序的部分

……

MOV #138H,R4 /*乘数2的地址为138H,这儿用间接寻址方式*/

MOV #-45H,&MPYS /*装第一个有符号乘数的数值入地址,第一个乘数MPYS决定了*/ MOV #35H,0(R4) /*装第二个有乘数的数值入地址*/ MOV RESLO,R5 /*结果低字送入R5中取出*/

西安邮电学院63# 710061 陈小忠 7

tp看到操作后的结果满足要求。

:/第二节 硬件乘法器

/wwwMAIN MOV #0200H,R6 /*从200H地址开始读出数据到R5中,可以加许多对R5(即数据段的内容)进行操 作的 程序*/

MOV #100,R4 /*设取100个地址单元*/ LOOP1 MOV.W 0(R6),R5 /*间接寻址模式*/ ADD #2,R6 / *是字操作*/

;....... / *可以加对取出的数的操作*/ MOV.W R5,0(R6) / *操作完后再放回原地址*/ SUB.B #1,R4 /*循环100次*/ CMP #0,R4 JNZ LOOP1 …………….

.elecfans.com MSP430单片机的开发及应用

MOV RESHI,R6 /*结果高字送入R6中*/

MOV SUMEXT,R7 /*结果扩展送入R7中*/ ……

实验结果为可以在R7、R6、R5中看到-45*35的结果为FFFFFFFFF1B7H,结果正确。

硬件乘法器的软件可见参考资料1,建议做乘法之前关掉中断.

第三节 P口

MSP430F149有6个8位的P口,其中P1、P2口占两个中断向量,共可以接16个中断源,

还可以直接利用P口的输入输出寄存器,直接对外进行通信。因为所有的P口都是和其他外设复用的,因此在用端口之前都要用功能选择寄存器选定所用的功能是外设还是P口,选定之后还要在方向寄存器中确定是是输出还是输入,我实验了一个程序,前部分是实现中断功能的程序,后部分为中断程序是实现直接用P口对外提供一个短脉冲的程序,在我们设计的开发板中,专门利用了P口的输入输出功能对外存24WCXX和实时时钟芯片8563的数据通过的存取I2C总线的读取和写入。还利用了P口向电池充电的开启电路。下面是个例子:

例:利用P口的中断功能实验:

MAIN MOV #SFE(CSTACK),SP /*初始化堆栈指针*/

MOV #(WDTHOLD+WDTPW),&WDTCTL/*停看门狗定时器*/ LOOP2 BIS #GIE,SR /*普通中断允许*/

EINT /*开中断*/

MOV.B #000H,&P1DIR /*定义P1口为输入方向*/ MOV.B #000H,&P1SEL /*定义P1口为P端口功能*/ MOV.B #002H,&P1IE /*P1.1口为中断允许*/

MOV.B #000H,&P1IES /*定义P1.1口为上升沿产生中断*/ JMP LOOP2 /*循环等待中断*/ /*下面为中断程序*/

LOOP1 MOV.B #001H,&P1DIR /*定义P1.0口为输出口*/

MOV.B #001H,&P1OUT /*定义P1.0口输出的为高电平,发光二极管灯亮*/ MOV.B #000H,&P1IE /*返回中断前的PC及其他状态*/ MOV.B #000H,&P1OUT /*将P1.0口置低,发光二极管灯灭*/ RETI /*中断返回*/ COMMON INTVEC /*列中断向量表*/ ORG PORT1_VECTOR

DW LOOP1 /*中断向量的入口地址为LOOP1*/ END

实验结果为:在运行中,当给P1.1口一个高电平时,PC装入中断程序的地址LOOP1,进入中断程序段,P.0口被置高,此时发光二极管灯亮,两个指令周期之后灯灭,此后又返回中断前的地址开始执行,等待下一次中断的到来.

西安邮电学院63# 710061 陈小忠 8

http://www。。。。。。

.elecfans.com MSP430单片机的开发及应用

第四节 定时器及数模转换

MSP430中有两个16位定时器,还可以利用看门狗定时器。由于定时器的是16位的,则

可以在秒数量级上定时,且具有2个中断向量,便于处理各种定时中断。定时器的应用在F149中具有举足轻重的作用,可以利用MSP430F149中的定时器的比较模式产生PWM(数字脉冲调制)波形,再经过低通滤波器产生任意函数的波形,也就是说,可以通过定时器的比较模式实现数模转换功能。另外,定时器还具有捕获模式,我们可以通过定时器的捕获功能实现各种测

测量。在开发板中,利用定时器,我们设计了一个PWM滤波输出的函数发生器。另外,我们还利用定时器的捕获功能和比较器的比较功能测电阻和电容,原理可以参见参考资料1中比较器的应用章节。下面是比较器测电阻的实验程序和时序: 程序和设计流图为 :

初始化 用P口给电容充电 定各P口功能 定时器开始定时 比较器开始工作 开始放电至捕获电压 计算时间,再取待测电阻重复测量计算 进入中断程序,读捕获的时间 …… Reset

MOV #SFE(CSTACK),SP /*初始化堆栈指针*/

MOV #(WDTHOLD+WDTPW),&WDTCTL/*停看门狗定时器*/ MOV #GIE,SR /*一般中断允许*/

MOV.B #004H,&P1SEL /*定义定时器A的A1作捕获输入*/ MOV.B #000H,&P1DIR /*定义端口方向为输入型*/

MOV #0FFFFH,&CCR0 /*规定定时器的最大计数值为FFFFH*/ MOV #000H,&CCR1 /*给捕获初始值为0*/

MOV.B #004H,&P2DIR /*比较器的两个比较口为输入,输出口为输出型*/ MOV.B #01CH,&P2SEL /*定义了端口为比较器功能*/ MOV.B #0FFH,&P3DIR /*定义P3口输出一个高电平给电容充电*/

西安邮电学院63# 710061 陈小忠 9

http://www.elecfans.可以这样说,只要能通过传感转换为时间长度的,都可以通过定时器的捕获定时功能实现值的

co量,比如脉冲宽度测量,如果和比较器结合,还可以测量电阻、电容、电压、电流、温度等,m MSP430单片机的开发及应用

MOV.B #000H,&P3SEL /*选择P口的功能*/ MOV.B #0FFH,&P3OUT /*输出给电容充电*/ EINT /*开中断*/ LOOP1

MOV.B #00CH,CACTL1 /*确定比较器的输入0口为外参考电压,这实验中为电容上的电压*/ MOV.B #00FH,CACTL2 /*确定比较器的输入1口为外参考电压,这实验中为捕获时刻电压,由 外电源提供,可变的 ,根据电阻和电容而定*/ MOV #030H,&CCTL1 /*定时器A 的A1口的CCR1为捕获寄存器*/ MOV #002D2H,&TACTL /*写控制寄存器,定时器开始计数*/

MOV.B #000H,&P3DIR /*电容放电,等待放电电容上的电压降到捕获电压发生中断,此时的 CCR1中值为放电时间比例值*/ JMP LOOP1

CCR BIC #0FF0FH,&TACTL /*停定时器*/

MOV &CCR1,R5 /*从R5中看定时器的值,还可以送到I/O口上*/ JMP CCR /*程序结束*/ COMMON INTVEC ORG TIMERA1_VECTOR

DW CCR /*捕获中断向量*/ ORG RESET_VECTOR DW Reset END

实验结果跟参考资料的充放电波形一样,波形为:

电容两端电压波形: 捕获比较 电压vp vcc

比较器的 输出 定时 充电时间 放电至 捕获 实验数据为 参数 电阻 参考电阻 VCC VCP http平均 电阻 电阻实定时时测量际 间 值 值 2.5 2.0 628 45BH 459H 45CH 45BH 0.9K 0.9K 号 电容 CCR1.1 ://www 西安邮电学院63# 710061 陈小忠 10

.elecfans.CCR1.2 CCR1.3 com MSP430单片机的开发及应用

待测电阻

2.5 2.0

628 466H 466H 463H 465H 1K 1.01K 号

计算电阻公式为:R测=R参*(N测/N参) (其中,N代表捕获的计数值)

本次实验的经验:电容必须选择得当,若太大可能定时器溢出中断而不是捕获中断,太小,则会为各电容的放电时间差不多,误差太大.捕获电压也必须得当,太大,可能定时时间太小,误差太大,太小,放电时间太长,可能溢出中断而不是捕获中断.这实际是一个使用范围的问题,由于DCO的频率太高,定时器的计数太快,如果定时器的频率低,采用大电容,则使用范围会更大一些,精度更高一些.

另外,可以用比较器和定时器的捕获用同样的原理测电容及其他的可以转换为时间的传感问题,这在实际应用中有更广泛的用途.

低通滤波可以产生各种函数发生器.为此,我们做了一个PWM波的实验,原理及流图和时序及程序为:

原理为:利用输出模式的翻转特性和连续模式的PWM波形输出,通过CCR0加数据存储器RAM的中相互交叉“0”电平和“1”的时间间隔,成对的两个寄存器定义了占空比,而各对的和

继续进行。这样,就输出了占空比不断变化而又呈一种趋势的变化,经过低通滤波,即电容的充放电形成一种阶梯状的变化趋势,当计数小周期很小时,就可以得到近似的一条模拟曲线,从而实现了数模转换或函数发生器,由于小周期是任意的但必须大于2倍中断程序时间,则可以实现任意占空比的小周期和任意的小周期长度,又由于有多少个小周期组成一个大周期也是自由的,完全由实际需要来定,则给用户带来了很大的灵活性。下面是程序流图,由于这个 程序实验要用到对数据段表的读操作和间接寻址且用到中断向量,因此在此列出了程序的全部清单,以更完整:流程图为: 初始化和写翻转表数据 定义对应的端口功能为外围模块 计数到定时值

翻转并中断 中断程序中,停计数,加下一个翻转时刻值,小周期数减一,如果小周期数已到一个大周期,又返回到第一个小周期循环 西安邮电学院63# 710061 陈小忠 11 ht到上次翻转时刻的计数值中,当返回中断后,计数器继续计数,到下次翻转和中断时,又循环

tp:/程序中,我们给CCR0加上下次翻转的时间,即下次翻转时的计数长度从数据存储器中取出加

/w(小周期)是定值。当计数器的计数值到达CCR0翻转,且产生中断,转入中断程序,在中断

ww.elecfans.co 利用定时器的比较模式和输出的PWM测试PWM形式,我们可以作出数模转换的模型和程序,这样经过

m MSP430单片机的开发及应用

又从原计数值重新开始计数,中断返回,循环执行 程序清单为:

#include \"msp430x14x.h\" RSEG UDATA0

DW 450,50,350,150,250,250,150,350,50,450/*间隔数据表,开始地址为200 H,数据又需要定*/ RSEG CSTACK DS 0

RSEG CODE DS 0

Rese MOV #SFE(CSTACK),SP /*初始化堆栈指针*/ MOV #(WDTHOLD+WDTPW),&WDTCTL /*停看门狗定时器*/ MOV.B #0FFh,&P1SEL /*选择外部定时器功能*/ MOV.B #0FFH,&P1DIR /*确定方向为输出*/

MOV #030H,&CCR0 /*给CCR0一个初始值,不小于两个指令周 期的计数值*/ BIS #GIE,SR /*开一般中断允许位*/

MOV #0200H,R6 /*将R6定义到数据表段开始地址*/ MOV #10,R4 /*取10个地址单元,即九个小周期*/

MOV #0090H,&CCTL0 /*选CCR0作为比较寄存器,定义输出模式为4,且中断允许*/

MOV #002E0H,&TACTL /*写控制寄存器,参数为一分频,比较模式,连续计数方式,不溢出中断,开始计数*/

TA0 EINT /*开中断*/

JMP TA0 /*等待翻转时刻到和等待中断到,即TAR=CCR0*/ CMPS BIC #0FFCFH,&TACTL /*中断程序到,停计数值,处理中断*/

ADD 0(R6),&CCR0 /*加下一个翻转到来的时间值,间接寻址方式*/ ADD #2,R6 /*是字操作,加2是将R6指向下一个地址*/ SUB.B #1,R4 /*小周期数量减一*/ JNZ LOOP1 /*大周期没完,循环*/

MOV #0200H,R6 /*大周期完,重新开始一个大周期*/ MOV #10,R4

LOOP1 MOV #002E0H,&TACTL /*重新开始计数*/

RETI /*中断返回*/ COMMON INTVEC

ORG TIMERA0_VECTOR /*定时器A 的0中断向量表*/ DW CMPS

ORG RESET_VECTOR DW Reset END

下面是程序中需要说明的几点问题:

1. 在中断程序中,不能在没回中断之前就用转移指令将程序跳出中断,否则,堆栈占用

的空间会越来越大,数据段会出错。主要是程序段的LOOP1必须在中断程序里。即

CMPS … … 中断程序开始

西安邮电学院63# 710061 陈小忠 12

http://www.elecfans.com MSP430单片机的开发及应用

SUB.B #1,R4 /*小周期数量减一*/

JNZ LOOP1 /*大周期没完,循环*/

MOV #0200H,R6 /*大周期完,重新开始一个大周期*/ MOV #10,R4

LOOP1 MOV #002E0H,&TACTL /*重新开始计数*/ … … RETI

2.在程序中,只用CCR0而不用CCR1和CCR2的原因是CCR0的中断优先级高,且返回时不须软件将中断标志位清出掉,而是自动复位的,而 CCR1和CCR2 的中断标志须软件复位,否则中断变的不定。

3.由于不须要在计数到0时中断,因此将溢出中断禁止,而将CCR0的中断允许。 4.数据段的数据个数一般要达到256个才能通过8路AD转换,由于篇幅有限,只列出了10个,这由实际需要而定 。 如果需要的滤波形是对称的,则数据段的数据为对称就可以了。

实验结果为:

PWM波形频率:MAX:2KHZ,计数频率:8MHZ,误差:0.5% 波形图示意为:

T小

T大

第五节 时钟模块

MSP430F149的时钟可以自由选择,它包括一个内部DCO时钟和另外两个外部时钟,内部

时钟的参数见参考资料1,其中最高可达到1042KHZ;外部可以接两个时钟,一个可接钟表晶振或标准晶振,另一个接最高时钟频率为8MHZ的晶振,8M是单片机的最高工作频率,对于晶振的选择,在参考资料一上介绍的很清楚,在此不在重复,对基础时钟的控制,只需要对相应的控制寄存器写入相应的控制位就可以产生需要的时钟,还可以从相应的端口测的时钟频率,我们做了一个实验,是控制

西安邮电学院63# 710061 陈小忠 13

http://w ww.elecfans.程序,这一点尤其注意。

co 5.定时器A有两个中断向量,如果要同时用CCR0和CCR1或CCR2,需要写不同的中断

m MSP430单片机的开发及应用

内部时钟的,可以从149的端口上测的相应的频率,只要开启时钟频率之后,时钟就继续存在到写入停止为止.

下面是主程序,由于简单,不用程序流图.

MAIN MOV #SFE(CSTACK),SP / *初始化堆栈指针*/

MOV #(WDTHOLD+WDTPW),&WDTCTL/*停看门狗寄存器*/ BIS.B #010H,&P5DIR /*定义方向为输出方向*/ BIS.B #010H,&P5SEL /*选择为外部模块功能*/

BIS.B #000H,&BCSCTL2 /*选择为1分频,DCO为MCLK的输入时钟*/ ……. /*可以在48管脚看到时钟频率*/

实验结果为时钟频率1000KHZ,占空比为1:1,如果调整BCSCTL2的控制位,可以看到频率的变化,在我们做的 开发板中,要利用这个频率升压,这在后面将会用到.

第六节 USART通信模块

通用串行同步异步通信模块是为了使MSP430F149多机通信用的,通过USART口连接

RS202和RS485的驱动芯片可以实现单片机与计算机及其他的工作电平的匹配串行通信,由于MSP430F149具有两个通信口,因此可以分别用于RS202和RS485的串行通信.MSP430有同步和

由于MSP430的波特率产生比较自由,因此异步通信模式用的比较多,在毕业设计中,我们只实验了异步通信模式,在异步通信模式中,MSP430的波特率的产生有很独特的方式,可以实现多种波特率的产生,可以克服其他单片机的波特率受限的缺点.另外,在异步模式中,又根据需要分为线路空闲多机模式和地址位多机模式,如果只是两机通信,线路空闲比较多,用线路空闲多机模式比较好,在开发板中有一个测试程序是实现通过RS202与计算机超级终端串行口相连的测试程序,在此,不用多说,由于MSP430的波特率发生器比较特别,在此,我们着重讨论一下波特率发生器. 波特率发生器是用波特率选择寄存器和调整控制寄存器来产生串行数据位定时. 波特率=BRCLK/(UBR+(M7+M6+M5+M4+M3+M2+M1+M0)),其中BRCLK为晶振频率,UBR为分频因子的整数,即晶振频率除以波特率的整数部分,而M7,M6,M5,M4,M3,M2,M1,M0分别为调整位,是分别写在UMCTL中的,如果置位,则对应的时序时间只能波特率分频器的输入时钟扩展一个时钟周期,每接受或发送一位,在调整控制寄存器的下一位被用来决定当前位的定时时间.协议的第一位的

西安邮电学院63# 710061 陈小忠 14

http:/寄存器就可以实现多机通信.

/w异步两种方式,每一种方式都有的帧格式和控制寄存器,只需要按照需要和帧格式写入相应的

ww.elecfans.com MSP430单片机的开发及应用

定时由URB加上M0决定,下一位由UBR加上M1决定,以后类推.而调整位取“0”还是“1”,取决于当前的分频因子与需要的分频因子的差距,如果大于0.5取“1”,如果小于0.5取“0”,具体实例可见参考资料1。

第七节 比较器模块

比较器的应用在MSP430中很广,可以做为可转换为电压的量的测量,这在参考资料1上有

很详细的说明,如果加上定时器的捕获功能,比较器的用途会更广,由于比较器的应用在定时器一章已有实验证明,在此不在多述,但有几点必须说明.

1.

比较器属于硬件型的,虽然很准确,但由于有软件的控制,造成的时间误差可能很大.

因此存在一段时间的振荡,这造成测量的误差大,不能很精确.

2. 比较器的参考电平很方便,可以都自由加,但不能超过片子的最高电压3.3V ,否则不

能正常工作.

第八节 模数转换模块

MSP430F149单片机中集成了14路12位A/D转换,其中8路属于外部的信号转换,3路是对

内部参考电压的检测转换,1路是接温控的传感电压转换,每一路转换都有一个可控制的转换存储器,而且,参考电平和时钟源都是可选择的,可以外部提供的.这给使用上带来了很大的灵活性.原理

西安邮电学院63# 710061 陈小忠 15

ht

tp://w和稳压和嵌位的二极管对在高压和负压时的芯片保护.

ww 比较器的应用还很多,可以很放心的用,在我们的开发板中,有比较器的输入端口,还加了电阻

.elecfans.com MSP430单片机的开发及应用

上不同于一般积分和逐次比较等A/D转换原理,它的输入信号是加在A/D的电容网络上的,通过电容的充电来采样信号进行A/D转换的.其时序可以归纳为 :

,参考电平,时钟源, 选择通道模式分频因子,及中断允许 写结束采样控制位,开始转换 加信号,开始采样时序 转换结束延时到采样结束下次转换 A/D转换的时序和具体的一些注意事项和参数可参见参考资料1,但有几点必须注意的地方: 1.由于MSP430F149是采用加载信号到电容上充电的采样,因此必须要给一定的采样时间以能到达一定的精度和时间的不溢出,否则会出现时间溢出的中断.据测定其采样开始之后需要13个ADC12CLK周期延时.在实验时是采用的单步才能比较精确的测量,在全速时需要延时才能测量,否则采样结果为0。

2.在采样结束和转换的开始需要一个控制过程,这就是将ADC12CTL0的ENC和ADC12SC同时置“1”,则表明采样结束和转换开始,在我们的测试中,是将ADC12CTL0的控制位重复了一次以达到开始转换。

须要加地,否则不能转换。 具体的A/D采样程序和结果在PCB测试中有比较详细的结果。

第四章 MSP430F149开发板的介绍及测试

西安邮电学院63# 710061 陈小忠 16

ht 5.如果采用外参考电压,则不能认为悬空为0v,而必须要加一个电压,即使是0v也必

tp 4.由于低三位是电阻性的,因此精度上需要多次测量取平均值。

://w资料1上有不同。

ww 3.用外部参考电压时,转换公式为NADC=4095*(Vin—Vr-)/(Vr+—Vr-)。这于参考

.elecfans.com MSP430单片机的开发及应用

在这次毕业设计中,我们的主要任务是设计一个芯片的开发板,以能够供以后使用,考虑

到F149的资源,我们的设计外围模块功能图为:(电路见附) 晶振1和2 8路A/D外设及参考电压输入口3路传感器 ht 可控硅 JATG口 MSP430F149主芯 片 比较器的输外存和适时 入口时钟 PWM滤波 232和485通讯口 电源管理和充电电 池

下面将分模块介绍各模块原理(标示见原理图)及调试程序和结果:

在单片机的模数应用中,经常会设计到转换为检测电流的情况,而且还会遇到起始电流不为0mA而为4mA的情况,此时需要将电流转换为电压和加电压到参考电压负端的电路,在原理图中,rz.x和r11x构成分压并将电流转换为电压进入单片机采样转换,其中,d11x中每两个组成一对,其中的一个为精密电阻以起补偿用,使d11x和rz.x组成的分压精度更高。d11x构成过压保护和低压保护,克服一些意外毛刺等.对分压的电阻选定可以扩大转换范围,这由实际需要定,我们加了一路0.5分压的电路,可采样6v的电压.当起始电流为0mA时(即电流为0mA时转换为0),

西安邮电学院63# 710061 陈小忠 17

tp:/第一节 模数转换模块

/www.elecfans.com MSP430单片机的开发及应用

让P1.4口输出为高,此时三极管Qve1不导通,负参考电压为0v,此时的0mA转换为0,当起始电流为4mA时(即电流为4mA时转换为0),让P1.4口输出为低,此时三极管Qve1导通,负参考电压为Rve1和Rve2分压,电阻Rve1和Rve2的值由实验得出为13:2,负参考电压为0.35v,测试结果和调试程序可见刘亚娇的报告.但有几点问题为:

1. 分压电阻的阻值不能太大,一般数量级为100欧级,因为单片机内阻不大,一般为十千欧级,且线性度不太好.但电阻太小造成电流较大,这是使用A/D的局限. 2. 速度不能太快否则不能转换,负参考电压不能悬空.

比较器的输入原理与A/D的输入原理一样,也加了分压电阻和二极管的嵌位保护电路,可以电流比较又可以电压比较,测试结果可见第三章的有关节.

在开发板中,设计了3路传感器,将220v和更高的电压转换为可用A/D检测的低压,然后通过A/D采样,判断高压信号的稳定度后,再将P1.4口置高,此时二极管DT1和三极管T1导通,可控硅TRIAC工作,在外部高电压的工频正弦电压达到0v附近时将JK1上的3、4导通,3、4外部接单片机可控负载,当断电时,利用可控硅的特性,在断开后高频正弦电压达到0v时才断开,这就

220v 高压U 0v 0v

外部开关

P4.4口

可控硅 控制后开关

西安邮电学院63# 710061 陈小忠 18

http用。其测试结果的时序图可以表示为:

:/避免了高压工作时的断电的辐射造成的环境和人体的伤害,原理图中TR起可控硅的电流放大作

/www.elecfans.co第二节 传感器模块

m MSP430单片机的开发及应用

结果可以看到,经可控硅后,电压的开启可关闭不会发生在高压部分,这对环境和人体的辐射达到了尽可能的小.

第三节 外存和实时时钟模块

考虑到单片机有时需要实时时钟和外存,因此本设计加了一个8563实时时钟芯片和24WCxx的片外存储,采用I2C 总线结构传送数据和时钟,通过P4.6传送SCL时钟信号,P4.5传送地址、控制、应答和数据信号。8563接一个32767HZ的晶振产生实时时钟,R32、R31是提拉电阻,以从8563和24WCxx中输出数据。由于本设计中只有一个片外存储,因此其芯片地址为1010000,8563的读的芯片地址为1010011,写地址为1010010,关于I2C 总线的帧结构为:

启动 数据电平 数据变 停止信号

D:数据有效段

其中测试时产生的字节访问帧结构为:

主机 启 片选 读/ 应 存储单元地址 应 数据字节 应 停止 动 地址 写 答 答 答

sda

S 1010000R/ P W

调试程序流图和帧结构的顺序一样,在这儿就不在重复,调试程序见附eerom.s43。

调试结果为:往外存中的10000000地址写入10101010字节数据后读出仍然为10101010,表明对外存的读写正确。对8563的读写一样。对I2C 总线的使用最重要的是时序的正确。这是编程最重要的一点。

西安邮电学院63# 710061 陈小忠 19

http:/A:总线非忙阶段 B:启动数据阶段 C:停止数据段

/w 稳定有效 化段

ww.elecfans.

A B D D|| C scl

|| sda || com MSP430单片机的开发及应用

另外,对读信号时,要注意是启动后,先写片选地址,再送写信号,等应答后送要读的地址,然后才是启动,之后是送片选地址,再送读信号,等应答之后才是地址上的数据。这与写时序是不一样的。

第四节 485和232通讯模块

单片机通讯时需要转换电平,这就要485和232电平驱动,在开发板中,我们用了MAX202E和MAX485芯片作为驱动,MAX202芯片可以实现短距离的通信,是属于单端驱动方式,能将-15v~+15v 的电压转换为0~5v的电压,速率能达到20K,输出电流可达到500mA,实现

电路,由于受430内阻和MAX202输出电流的影响,当RM3和RM4分别取2千欧和3千欧时分压之后的电压刚好能达到的电压3v,因此取RM3和RM4为2千欧和3千欧.注:RS—232 电平规定为-3v— -15v为“1”,+3v—+15v为“0”。而RS—485电平属于平衡电平,是通过两路的比较

尖峰信号,从而驱动。RM1,RM2的分压电路和RM3,RM4的分压原理一样。MAX232和MAX485分别接到430的USART1和USART0上,实现了多机通信。在调试中,我们是将430和计算机的超级终端相连实现的测试,原理为: MSP430 MAX计算机接收 发送 电平驱动 的通讯口202电的串口 USART1 平驱1 接收 电平转换 发送 动 0—3v -15v~+15v 电平反向 调试程序流图为:

超级终端输入输出口 西安邮电学院63# 710061 陈小忠 20

http能时,P1。0口发出一个“1”电平,则CM1和RC7的微分使输出到MAX485上的电平为一个

:/电平为大于5v,因此需要加CM1和RC7的微分电路产生一个比较大的驱动使能信号,当要使

/www决定正负的,RU4起连接两路的作用,但由于是半双工电路,因此需要使能端口,又由于 启动

.elecfans.MAX202芯片输出是 5v的电压,而430芯片是3v电压,因此需要一个由RM3和RM4组成的分压

com了TTL—EIA电平的转换,由于MAX202芯片是全双工的,因此其使能引脚是全使能的,又由于

MSP430单片机的开发及应用

发送: 初始化确定P口 将时钟选定为晶振写控制寄存器,选 为外设功能 时钟8M 定为异步模式 Ubr11 Ubr01 Umctl1 实际分频

(十进制)

1 003H 043H 000H 835

.elecfans.发送波特率

选定为线路空闲多机协 写波特率寄存器确定分频写发送控制寄议,字符长度为8位,停 因子,写调整控制寄存器存器,选时钟止位为1位,无校验 以达到精确波特率 源为晶振

发送任意的字符到发送缓存,进入中断,写要发送的字符的结束 开中断和 模块允许,唤醒发ASCII码,循环发送字符,在超级 送,引起发送中断 终端设置匹配接收到字符

调试程序见附USART.S43,调试结果为: (时钟为8M的条件下)

co接收波特率

m偏差 发送ASCII

接收字符

9580.838 9600 0.2% 31H ‘1’ 0.01% 32H ‘2’ 0.01% 33H ‘3’

其中,发送波特率=(8M/实际分频),偏差=(发送波特率)/(接收波特率)

但调试中的注意为:

1. 发送的字符最好为熟悉是字符,否则可能认为不正确而实际是正确的,开始我们发送的是FFH字符,收到的是一个符号,我们还以为发错了,而当改为31H时,收到1才知道发送正确. 2. 在超级终端需要将流量控制改为“无”.

接收流图和发送流图差不多,只是将接收控制字改动即可,在此不在重复,接收程序见附USAR.S43,接收结果与设想的完全吻合.但要注意以下几点:

1. 只有当波特率合适时才可能发生中断请求.

2. 由于接收控制寄存器中没有时钟源的选定,因此需要在发送控制寄存器中确定时钟源.

西安邮电学院63# 710061 陈小忠 21

ht调试结果可以看出发送的正确性,也可以看出用430可以达到的波特率的任意性,很灵活实用.

tp://w3 001H 0A1H 003H 416.67 19199.48 19200

ww2 00DH 005H 005H 3333.33 2399.94 2400

MSP430单片机的开发及应用

第五节 电源管理模块及晶振模块

原理:电源是MSP430的很重要的部分,因为它要实现低工耗,就需要低的工作电压,为1.8v到3.3v,我们一般选定为3v,而一般的直流电压为7.8v,电路图中的网络标号为VIN表示输入电压7.8v,二极管Dv2为一个稳压二极管.当7,8v的电压输入后,需要转换7.8v到3v的电源管理,在我们的设计中,用了一个L4940V5(电路图中为vt1)的片子实现7.8v到5v的转换,再用了一个和MSP430配套的电源管理芯片AT3221(电路图中为vt3.3)实现从5v到3v的转换,供单片机工作的电压.由于考虑到单片机工作时的突然断电和单片机向传感器和其他外围模块提供12v或24v的电压,因此需要一个蓄电池和升压电路,当突然断电和停电后,蓄电池放电供单片机工作,在设计中,我们通过一个5v的电磁继电器实现对蓄电池的充放电.原理为:当上电时,P1.2口输出高电平,三极

电,(继电器的1和2脚为常开),当断电后,继电器的5脚变低,继电器的1和2脚通,电池通过1和2脚放电,提供给7.8v电源,此时Dv2不导通,不会出现电的泄露,这样就避免了断电的情况.升压原理为:单片机提供mclk的晶振频率,推动三极管Qv3和Qv4导通和断开,提供给电感L1一个高频

AT3221 输入:5v, 输出:3v 继电器 有电时充电:3、4导通

没电时放电:1、2导通

另外,考虑到有时需要直接从变压器提供电源,因此,电路设计中增加了一个整流模块,即通过powin(CON4)输入从外部变压器输出的电压,经过整流桥dd1整流提供7.8v的输入电压,还通过整流桥dd2整流后经过vt2的24v的片子向外部模块提供24v或12v的电压,经测试基本满足条件.

外部晶振是单片机实现高速的条件,在MSP430的单片机中,有两个外部晶振可用,其中LFXT1可以接低频晶振也可接高频晶振,而XT2只能接高频晶振,因此,我们将LFXT1接32767HZ的晶振,XT2接8M的晶振,由于单片机内部已有电容,因此在外部不需要再接电容,只需要接上晶振

西安邮电学院63# 710061 陈小忠 22

ht 测试结果为: L4940V5输入:7.8v,输出:5v

tp:/提供12v或24v的电压.

/wpowout(CON2)

ww高电流(Qv3和Qv4的两级放大),电感通过电磁转换实现电压的升高,再通过DV6的稳压,使插件

.elecfans.co管Qv5导通,继电器的6脚为低电平,此时继电器的5脚为高电平,继电器的3、4脚导通,电池充

m MSP430单片机的开发及应用

就可以起振.测试时,我们将MCLK和SMCLK都定义为XT2晶振作为时钟源,测试结果为输出了8M的频率,在其他程序中,只需要将主时钟源选定为外部晶振XT2,程序的时钟就变为了8M,测试程序为: (其他程序中只需要写入下面程序就开始用外部晶振) ………….

BIS.B #030H,&P5DIR /*将mclk和smclk定义为输出*/ BIS.B #030H,&P5SEL /*选定引脚为外部mclk和smclk输出*/ BIC #OSCOFF,SR /*启动晶振*/ PUSH #050H

LOOP DEC 0(SP) /*将时钟由DCO到XT2的同步延时*/

JNZ LOOP

在第三章中,我们以将原理和程序流图表述的很明白,在此不再重复,在测试中,我们测试了三

RSEG UDATA0

DW 450,50,400,100,350,150,300,200,250,250,200,300,150,350,100,400,50,450 DW 150,350,100,400,150,350,200,300,250,250,300,200,350,150,400,100,450,50 一共36个数,36个点一个周期,占空比为:从9:1到1:1再到 1:9再到1:1

上升部分 下降部分 9:11:1ht角波的产生情况,其中的时钟用8M晶振,计数翻转的数据表为:

tp://www第六节PWM波形滤波

1:9

西安邮电学院63# 710061 陈小忠 23

.elecfans. ………….

co1:1m MOV.B #088H,&BCSCTL2 /*选定系统主时钟为XT2的8M晶振*/

MSP430单片机的开发及应用

测试后滤波电路中电阻和电容及输出为:

时钟

滤波电阻

滤波电容

波形幅度

频率 800HZ 800HZ 800HZ 800HZ 800HZ

1 8M 247K 4.55NF 1v,平滑 2

8M

220K 4.55NF

1.3v,有少量毛刺

3 8M 200K 4.55NF 1.4v,毛刺较明显 4

DCO

247K 4.55NF 220K

4.55NF

1v,毛刺明显 1.3v,毛刺明显

5 DCO

实验波形示意图为(以第一组数据产生波形为准,其中有毛刺,表明充放电过程): 1v 从实验结果看出,如果滤波做的更好,可以产生很漂亮的波形.而且频率可以达到800Hz左右,用途已很大.

口的4口提供一开一断的电压,控制可控硅的关闭,实现了线包的一吸一放,起到了很好的控制强压的作用,当再串上铁钻时,控制了铁钻的开闭,即使将活动的铁钻放到片子周围制造干扰,单片机仍然照常工作,实验了单片机的高抗干扰性。

参考资料:

1.《MSP430系列FLASH型超低功耗16位单片机》 胡大可编 ——北京航空航天大学出版社

2.《单片机外围器件使用手册存储器分册》 窦振中编 ——北京航空航天大学出版社

西安邮电学院63# 710061 陈小忠 24

http制和抗干扰性,我们利用可控硅的部分进行了实验,将JK1的3、4端口串强压线包和铁钻,用P1

:/片机仍然能很顺利的工作,而且在下午5:30都还可以,实现了超低功耗.为了测试电路中对强压控

/www 另外,在测试中,我们还实验了单片机的超低功耗的性能,我们用太阳能电源给单片机供电,单

.elecfans.com MSP430单片机的开发及应用

附程序:

1.USART.s43

#include \"MSP430x14x.h\"

RSEG UDATA0 /*定义数据段*/ DS 0

RSEG CSTACK /*定义堆栈段*/ DS 0

RSEG CODE /*定义代码段1*/ DS 0

RESET MOV #SFE(CSTACK),SP /*初始化堆栈指针*/

MOV #(WDTHOLD+WDTPW),&WDTCTL /*停止看门狗定时器*/ BIS.B #030H,&P5DIR /*初始化端口和选择时钟源为8M*/ BIS.B #030H,&P5SEL BIC #OSCOFF,SR PUSH #050H

LOOP DEC 0(SP) /*延时实现时钟转换同步*/

JNZ LOOP BIC.B #OFIFG,&IFG1

MOV.B #088H,&BCSCTL2 MOV.B #040H,&P3DIR MOV.B #0FFH,&P3SEL

EINT /*开中断*/

URT MOV.B #UTXE1,&ME2 /*USART0发送模块允许*/

MOV #GIE,SR /*中断允许*/

MOV.B #010H,&UCTL1 /*控制寄存器的写入*/ MOV.B #02EH,&UTCTL1 /*发送控制位的写入*/ MOV.B #043H,&UBR01 /*写分频因子*/ MOV.B #003H,&UBR11

MOV.B #000H,&UMCTL1 /*调整分频因子*/

MOV.B # UTXIE1,&IE2 /*USART0发送中断允许*/ MOV.B #032H,&U1TXBUF /*写入的发送数据*/ JMP URT /*接受中断允许* / FASONG MOV.B #032H,&U1TXBUF /*写入的发送数据*/

JMP FASONG /*连续发字符*/ RETI /*中断返回*/ COMMON INTVEC

ORG UART1TX_VECTOR /* 中断向量*/ DW FASONG

ORG RESET_VECTOR DW RESET END

2.Usar.s43程序(接受程序)

#include \"MSP430x14x.h\" RSEG UDATA0 DS 0

RSEG CSTACK DS 0

RSEG CODE DS 0

西安邮电学院63# 710061 陈小忠 25

http://www.elecfans.com MSP430单片机的开发及应用

RESET MOV #SFE(CSTACK),SP /*初始化堆栈指针*/

MOV #(WDTHOLD+WDTPW),&WDTCTL /*停止看门狗定时器*/ MOV.B #02EH,&UTCTL1 / *选定时钟源*/ MOV.B #043H,&UBR01 /*确定分频因子*/ MOV.B #003H,&UBR11 MOV.B #000H,&UMCTL1

BIS.B #030H,&P5DIR /*初始化端口功能为外设*/ BIS.B #030H,&P5SEL

MOV.B #040H,&BCSCTL1 /*转换时钟*/ BIC #OSCOFF,SR PUSH #050H LOOP DEC 0(SP)

JNZ LOOP BIC.B #OFIFG,&IFG1 MOV.B #088H,&BCSCTL2 MOV.B #000H,&P3DIR MOV.B #0FFH,&P3SEL MOV #0200H,R6 EINT

MOV.B #URXE1,&ME2 /*USART0接受模块允许*/ MOV #GIE,SR

MOV.B #URXIE1,&IE2 MOV.B #020H,&UTCTL1 BIC.B #URXSE,&UTCTL1 BIS.B #URXSE,&UTCTL1

MOV.B #010H,&UCTL1 /*控制寄存器的写入*/ MOV.B #008H,&URCTL1

MOV.B #043H,&UBR01 /*写分频因子*/ MOV.B #003H,&UBR11 MOV.B #000H,&UMCTL1

MOV.B #URXIE1,&IE2 /*接收中断允许*/ EINT

URT MOV.B #URXIE1,&IE2

JMP URT /*中断等待,接受数据*/

RECEI MOV.B &U1RXBUF,0(R6) /*中断程序,接收数据到数据段*/

MOV.B #000H,&IE2 /*中断禁止*/ RETI /*中断返回*/ COMMON INTVEC /*中断向量表*/ ORG UART1RX_VECTOR DW RECEI

ORG RESET_VECTOR DW RESET END

3 Eerom.s43程序:

#include \"msp430x14x.h\"

ORG 0FFFEH /*定义段和复位地址*/ DW Reset

RSEG UDATA0 DS 0

RSEG CSTACK DS 0

西安邮电学院63# 710061 陈小忠 26

http://www.elecfans.com MSP430单片机的开发及应用

RSEG CODE DS 0

Reset MOV #SFE(CSTACK),SP /*初始化堆栈指针*/

MOV #(WDTHOLD+WDTPW),&WDTCTL/*停看门狗*/ CALL #XIE /*调用写子程序*/ DU1 CALL #DU /*调用读子程序*/

JMP DU1 /*重复调用便于观察一帧的数据*/ CUSHIHUA / *初始化子程序*/ CALL #QIDONG /*调用启动子程序*/

CALL #SONG1 /*以下为调用芯片地址1010000*/ CALL #SONG10 /*调用1后的送0子程序*/ CALL #SONG1 /*调用0后的送1子程序*/ CALL #SONG10 /*调用1后送0子程序*/

CALL #SONG00 /*调用0后送0子程序*/ CALL #SONG00 CALL #SONG00 RET

XIE CALL #CUSHIHUA /*调用初始化子程序*/

CALL #SONG00 /*为写,因此送0*/

CALL #YINDA /*送完地址字节10100000,等待应答*/ CALL #SONG1 /*送选定的地址10000000*/ CALL #SONG10 CALL #SONG00 CALL #SONG00 CALL #SONG00 CALL #SONG00 CALL #SONG00 CALL #SONG00

CALL #YINDA /*送完选定的地址字节后为等待应答*/ CALL #SONG1 /*送数据11001100到指定的地址*/ CALL #SONG11 /*调用1后送1 的子程序*/ CALL #SONG10 CALL #SONG00 CALL #SONG1 CALL #SONG11 CALL #SONG10 CALL #SONG00

CALL #YINDA /*等待应答*/

MOV.B #060H,&P4DIR /*应答后SDA数据线应为输出状态*/

MOV.B #000H,&P4OUT /*输出数据线SDA和SCL都为低,便于停止位的执行*/ CALL #TINGZHI /*调用停止子程序*/ RET /*写完后返回*/

DU CALL #CUSHIHUA /*读子程序,调用初始化子程序,选芯片地址为1010000*/

CALL #SONG00 /*先送写信号为0*/ CALL #YINDA /*送完为等应答*/

CALL #SONG1 /*送选中的地址为10000000*/ CALL #SONG10 CALL #SONG00 CALL #SONG00 CALL #SONG00

西安邮电学院63# 710061 陈小忠 27

http://www.elecfans.com MSP430单片机的开发及应用

CALL #SONG00 CALL #SONG00 CALL #SONG00

CALL #YINDA /*送完地址,等待应答*/ MOV.B #000H,&P4OUT /*应答完,转为输出方式*/ MOV.B #060H,&P4DIR

CALL #QIDONG1 /*又启动*/

CALL #SONG1 /*送选中的地址1010000*/ CALL #SONG10 CALL #SONG1 CALL #SONG10 CALL #SONG00 CALL #SONG00 CALL #SONG00

CALL #SONG1 /*送读信号1*/ CALL #YINDA /*等待应答*/

CALL #DUSHU /*读1000000数据*/ CALL #DUSHU CALL #DUSHU CALL #DUSHU CALL #DUSHU CALL #DUSHU CALL #DUSHU CALL #DUSHU

CALL #TINGZHI /*读完后停止*/ RET /*返回*/

QIDONG MOV.B #060H,&P4OUT /*启动子程序,是在非忙时当SCL 为高,SDA由1到0跳变*/

MOV.B #060H,&P4DIR MOV.B #060H,&P4OUT MOV.B #040H,&P4OUT RET

QIDONG1 /*是在由读转为写时的启动信号*/

MOV.B #060H,&P4DIR MOV.B #060H,&P4OUT MOV.B #040H,&P4OUT RET

SONG1 MOV.B #060H,&P4DIR /*在上一个时刻是0时的送1子程序*/

MOV.B #000H,&P4OUT MOV.B #020H,&P4OUT MOV.B #060H,&P4OUT CALL #WAIT1 RET

SONG11 MOV.B #020H,&P4OUT /*在上一个时刻是1时的送1子程序*/

MOV.B #060H,&P4DIR MOV.B #060H,&P4OUT CALL #WAIT1 RET

SONG10 MOV.B #060H,&P4DIR /*在上一个时刻是1时的送0子程序*/

MOV.B #020H,&P4OUT MOV.B #000H,&P4OUT MOV.B #040H,&P4OUT

西安邮电学院63# 710061 陈小忠 28

http://www.elecfans.com MSP430单片机的开发及应用

CALL #WAIT1 RET

SONG00 MOV.B #060H,&P4DIR /*在上一个时刻是0时的送0子程序*/

MOV.B #000H,&P4OUT MOV.B #040H,&P4OUT CALL #WAIT1 RET

WAIT1 MOV #50H,R5 /*延时子程序*/ WW SUB #1,R5

JZ FAHUI JMP WW FAHUI RET

YINDA MOV.B #000H,&P4OUT /*应答子程序,时序见论文*/

MOV.B #020H,&P4OUT MOV.B #040H,&P4DIR MOV.B #040H,&P4OUT CALL #WAIT1 RET

TINGZHI MOV.B #000H,&P4OUT /*停止子程序,时序见论文*/

MOV.B #040H,&P4OUT MOV.B #060H,&P4OUT RET

DUSHU MOV.B #000H,&P4OUT /*读数子程序,时序见论文*/

MOV.B #040H,&P4OUT CALL #WAIT1 RET END

4 A/D转换程序

... ...

MAIN MOV #SFE(CSTACK),SP /*初始化堆栈指针*/

MOV #(WDTHOLD+WDTPW),&WDTCTL BB CALL #ADCHANGE

JMP BB ADCHANG BIS #GIE,SR

EINT

MOV #0098H,&ADC12CTL0 MOV.B #040H,&ADC12MCTL0 BIS #00004H,&ADC12CTL1 MOV.B #000H,&P6DIR MOV.B #0FFH,&P6SEL

BIS #ENC,&ADC12CTL0 BIS #00001H,&ADC12CTL0 CLR &ADC12MEM0 RET

END

西安邮电学院63# 710061 陈小忠 29

http://www.elecfans.com MSP430单片机的开发及应用

摘要:MSP430是一类现场16位数据线FLASH存储器的单片机,该单片机以丰富的片上资源,高速和高精度而深受广大单片机爱好者的青睐。而本设计充分利用其资源,实现了A/D转换、多机通信、外存和实时时钟、PWM波形的函数发生

染的控制。

关键字:MSP430 A/D转换 USART 24WCXX 8563 比较器 PWM 定时器

in the chip and it runs in high speed and high precision . We use its resource and realize A/D switch、correspondence between compute and Single-Chip CPU、 external memory、to come into being PWM wave、comparison and measure 、to enumerate and capture 、to come into being 8 M pulses 、 the multiplication of hardware and so on . We can use the PCB in the control of industry to realize low power and low radiation and low pollution . KEYWORD:MSP430 A/D switch USART 24WCXX 8563 Comparison Enumerate Pwm Multiplication of Hardware Manager of Power Enumerate and Capture AAT3221 FLASH

西安邮电学院63# 710061 陈小忠 30

httphas FLASH memory. Many people will like it because it has a lot of resources

:/ Abstract: MSP430 is a kind of Single-Chip CPU that is presented 16 bit bus and

/www硬件乘法器 电源管理 捕获定时 AAT3221 FLASH

.elecfans.设计的PCB板,可以应用到大量的工业自动控制中,实现低功耗、低辐射、低污

co器、比较器测量、定时器的捕获测量周期、8M方波产生、硬件乘法器等等。通过

m MSP430单片机的开发及应用

西安邮电学院63# 710061 moc.snafcele.www//:ptth陈小忠 31

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- igat.cn 版权所有 赣ICP备2024042791号-1

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务