本帖最后由 YSU_MSP430 于 2012-10-21 13:01 编辑
燕山大学 研究生学院_电气工程学院
我是21ic的常客,几天前看到网站倡导大家分享和TI的校园经历,在此我作为一个新手,分享下我对TI产品MSP430F413的一些见解,主要是关于I/O口应用方面,和论坛喜欢MSP430的网友相互学习。
以前接触最多的MCU是51,这也是全中国学生学习单片机的启蒙老师,可以说本科时期对51的应用得心应手。今年小弟读研,研究方向是医疗电子仪器,在上课的时候金教授一直在讲授的是MSP430,我当时一头雾水,当时的不懂更加激发了我的求知欲望,再加上我相信金教授的眼光,他的很多设计都是基于MSP430的,因此在他的鼓励下我下定决心一定要要把MSP430搞明白。正好他的实验室是TI的联合实验室,趁着这个有利条件我申请了MSP430的开发板,由此进入了MSP430的内心世界,我真的很感激老师给我们提供的实验条件,感谢TI联合实验室。
我拿着老师给的开发板爱不释手,虽然有了以前学习51的基础,但对这个16位的单片机还是怀着一种神圣的心情,我想这也是热爱单片机开发人员的心境。根据以往的经验学习单片机要从其功能寄存器入手,在现在看来我的想法是正确的。我去图书馆借了一本沈建华的关于MSP430原理的书,这本书是TI大学计划的教材很经典,按照书上的介绍,渐渐进入MSP430的内心世界。下面是我的一些体会:
首先,我们要对MSP430总体有个了解,就拿MSP430F413这个名称来说我们就能得到很多信息:‘MSP’是混合信号处理器的意思,‘F’代表是FLASH型存储器,‘41’代表41系列,‘3’说明内部ROM是8KB的。为什么说是混合信号处理器呢?我们要从其时钟模块入手,其时钟的丰富性是其他单片机无法比拟的,它有3个时钟源分别是低频时钟源(LFXTICLK)、高频时钟源(XT2CLK)(注:MSP430F413没有高频时钟源其型号有无参考具体资料)、数控时钟源(DCOCLK),三个时钟源产生了单片机需要的4个时钟信号:辅助时钟(ACLK)、系统主时钟(MCLK)、子系统时钟(SMCLK)和供外部电路使用的由P1.5输出的ACLK/n。这些时钟信号为单片机的低功耗、系统运行和外围扩展提供了强大的支持,由此可见其强大性。时钟的控制以及是否分频可有其时钟模块的功能寄存器控制。这里只起到抛砖引玉的作用其他的模块例如看门狗模块、基本定时器模块、定时器A模块、比较器A模块、LCD模块和6个I/O模块均可按照此方法学习,只要感兴趣,肯钻研我们一定能把它学好。
其次,我们入手时一般要先拿I/O口来做实验,在做/O口实验时要注意P1和P2不仅可以做普通I/O口还可做为中断来用,其他的4个I/O模块只作为普通输入输出口。这里面要用到几个重要的功能寄存器PXDIR、PXOUT、PXIN、PXIFG、PXIES、PXIE和PXSEL,其中PXIFG、PXIES和PXIE为P1和P2特有。编写程序时要考虑这几个寄存器的上电状态,是否上电清零和上电保持原来状态不变,这样编写程序时才会得心应手。下面就是小弟做的一个I/O口控制数码管的实验,其中用到连接芯片MAX7219,以供参考。
数码管显示“21-430”:
#include<msp430f413.h>
/*7219控制寄存器地址宏定义*/
#define Decode_mode 0x09 //译码模式控制寄存器
#define Intensity 0x0A //亮度控制寄存器
#define Scan_limit 0x0B //扫描控制寄存器
#define Shut_down 0x0C //掉电模式寄存器
#define Display_test 0x0F //显示检测控制寄存器
/*IO 配 置 */
#define DIN_0 P2OUT&=~BIT0
#define DIN_1 P2OUT|=BIT0
#define CLK_0 P2OUT&=~BIT1
#define CLK_1 P2OUT|=BIT1
#define LOAD_0 P2OUT&=~BIT2
#define LOAD_1 P2OUT|=BIT2
/*写7219 子函数*/
void Write_7219(unsigned char add,unsigned char dat)
{
unsigned char i,j;
LOAD_0;
for(i=0;i<8;i++)
{
CLK_0;
if(add&0x80)
DIN_1;
else
DIN_0;
add<<=1;
CLK_1;
}
for(j=0;j<8;j++)
{
CLK_0;
if(dat&0x80)
DIN_1;
else
DIN_0;
dat<<=1;
CLK_1;
}
LOAD_1;
i=0;j=0;
}
/*控制寄存器初始化*/
void Init(void)
{
Write_7219(Shut_down,0x01);//开启正常工作模式
Write_7219(Display_test,0x00);//选择工作模式
Write_7219(Decode_mode,0xff);//选用全译码模式
Write_7219(Scan_limit,0x07);//8个数码管都用
Write_7219(Intensity,0x04);//初始亮度
}
void Clear_7219(void)
{
unsigned char k;
for(k=1;k<9;k++)
{
Write_7219(k,0x7f);
}
}
void main(void)
{
WDTCTL=WDTPW+WDTHOLD; //关闭看门狗
P2DIR|=0x07;
Init();
Clear_7219();
while(1)
{
Write_7219(6,2);
Write_7219(5,1);
Write_7219(4,10);
Write_7219(3,4);
Write_7219(2,3);
Write_7219(1,0);
}
}
实验结果图片:
以上就是我的一点感悟,对于初学者也是一种帮助,作为一个初学者,我只希望更多的人都能热爱这款单片机,特别是在在便携仪器这块,以为它的低功耗特性是很多单片机所无法比拟的。另外介绍下实验平台:
1.MSP430最小系统板
2.编译环境IAR Embedded Workbench 5.30.1
3.ISP下载软件SF_BSL430
另外附加基本学习MSP430不可少的书籍:
1.MSP430X41X用户指南
MSP430F4xx User Guide.pdf
(2.36 MB)
2.张晞编著的《MSP430系列单片机实用C语言程序设计》
MSP430系列单片机实用C语言程序设计_张晞_人民邮电出版社.pdf
(8.84 MB)
|