目录
主程序
第一句:DTCTL=WDTPW+WDTHOLD
第二句:P1DIR |= 0x01
第三句:volatile unsigned int i
第四句:P1OUT ^= 0x01;
主程序
今天无意发现抽屉里有个MP430的板子,拿来研究一下。
板子型号:MP430 Launch Pad
主芯片:MSP430G2553
Launch上网查了下,有开展的意思,Pad是板子的意思,和在一起就是初学者用的板子了,正好适合我这样的新手学习呢。嘎嘎。
首先安装CSS5.3,网上找了破解文件,破解了。
通过官网,建立了第一个程序,原程序找不到了,不过和下面的类似:
1 #include2 3 void main(void) 4 { 5 WDTCTL = WDTPW + WDTHOLD; // Stop watchdog timer 6 P1DIR |= 0x01; // Set P1.0 to output direction 7 8 for (;;) 9 { 10 volatile unsigned int i; 11 12 P1OUT ^= 0x01; // Toggle P1.0 using exclusive-OR 13 14 i = 50000; // Delay 15 do (i--); 16 while (i != 0); 17 }
一句一句学习下:
第1句:DTCTL=WDTPW+WDTHOLD
后面解释是stop watchdog Timer(停止看门狗计时器),那WDTCTL的前三个字母WDT就是watchdog Timer(看门狗定时器的缩写了)。后面的字母啥意思,打开头文件msp430x14x.h看一下,搜索WDTCTL找到如下语句:
SFR_16BIT(WDTCTL); /* Watchdog Timer Control */
后面说的很明白,WDTCTL就是Watchdog Timer Control 的缩写。新的问题来了,SFR什么意思,百度说是Special Function Register(特殊功能寄存器的意思)。哦,那这句话就是定义了一个16bit的特殊功能寄存器。可以理解为从SFR这个大箱子里划出一小块(16BIT)给一个叫WDTCTL的人用。
同样去头文件中找其他两个词语:找到的程序如下:
#define WDTHOLD (0x0080) #define WDTPW (0x5A00)
百度找到句话: “这个指令设置密码(WDTPW)和停止位定时器(WDTHOLD),所有的WatchDog配置都需要在WDTPW的辅助下完成。”有了这句话就明白了剩下的了。
WDTCTL的结构如下图所示:
第2句:P1DIR |= 0x01
P1DIR字面的意思是P1 direction(也就是P1的方向,input/output?)
|=是C语言中逻辑或的意思,表示有1变1。
P1DIR |= 0x01 这句话后面的解释是Set P1.0 to output direction 把P1.0口设为输出口。那很明显了, 1表示output(向外给),0表示input(向里要),这也很形象,有才能给么,哈哈。
第三句:volatile unsigned int i;
第一个单词不认识,直接百度是不稳定的意思,百科这么说:推荐一个定义为volatile的变量是说这变量可能会被意想不到地改变,这样,编译器就不会去假设这个变量的值了。精确地说就是,优化器在用到这个变量时必须每次都小心地重新读取这个变量的值,而不是使用保存在寄存器里的备份。
简单的理解,这个变量很重要,需要每次去看原版,不能看复印的,不然容易出错。
unsigned int无符号的整数,不多说
第四句:P1OUT ^= 0x01;
后面的翻译Toggle P1.0 using exclusive-OR:用一个互斥或(也就是异或)来切换P1.0。
至此,整个程序基本解释完毕了。
把这个程序拷进板子中,红灯就闪啦,闪啦,闪啦~~