查看: 1779|回复: 6
|
MSP430 新手学习(求救&研究贴)
[复制链接]
|
|
小弟最近研究了 MSP430G2452 和 MSP430G2553 这两个 是来自texas instrument
小弟买了他的 deplovement board 来玩 虽然有 energia 可以使用 arduino 的源码来操作 不过 小第要学习使用 Code Composer Studio v5 小弟一向来喜欢挑战高峰
小弟才刚学习..什么都不知道 连编制语言是什么来的也不会 最近玩了 arduino 建立了一些信心 学习 MCU 只是一个兴趣 用来来 DIY 自己喜欢的东西,向之前不能完成的电路报复
在这里小弟想要一边分享学习的过程 然新手一起来研究互相学习..
create CCS project( NEW -> CCS project
然后 选择 chip 的 number 小弟输入 MCU 上面的 number 然后跑出来 了
这次是参考了 Blink LED 的 example 然后写出来的
什么也不要clear 只是拿掉 retuen 0; 然后开始 setup
第一个 program
根据 example 写的.. agak agak 了解了 output Pin 的 setup
如果发现有错误 立刻投报 让小弟知错能改
int main(void)
不是很了解什么来的猜想应该和 arduino 的一样
int main(void) {
WDTCTL = WDTPW | WDTHOLD; // Stop watchdog timer
不知道是什么来的 读文章的是有提到很多东西需要放.. 小弟就算了把 听话照放
P1DIR <-- 应该是根据 MCU 的 data sheet 让 CCS 知道怎么 setup Pin 的 number 吧.. 好像小弟手上的 M430g2453 有 P1DIR 和P2DIR
LED red 接了 P1.0 LED green 接了 P1.4
pin setup
P1DIR = P1.7, P1.6, P1.5, P1.4, P1.3, P1.2, P1.1 P2DIR = P2.5, P2.4, P2.3, P2.2, P2.1, P2.0
现在要 P1.4 = OUTPUT 所以
P1DIR |= 0001 0000 (binary)
4 0 (HEX)
P1DIR |= 0x(告诉这个是 HEX number) 4(第一个 HEX number) 0( 第二个 HEX number)
P1DIR |= 0x40;
好像arduino 的 复杂了很多..
接下来的东西就不是很了解了
怎样 turn ON pin 0x40 我试了 P1OUT = 0x40
结果: LED 才亮 不了解当中的意思希望有高手来救救小弟
然后 (i = 0; i < 20000; i++);
好像 arduino 的不过这里的 delay 算法有点奇怪..
for i = 0 i 效果 20000 i 会一直增加到 20000, 这样就可以做出 delay 那么如果我想要做出 1 sec delay 该怎么算呢
最后一个暂时不能够了解
P1OUT ^= 0x40;
希望有高手可以救救小弟
如果把 ^= 换成 = LED 就一直ON 加了 ^ 就可以 ON OFF ON OFF 了
|
|
|
|
|
|
|
|
发表于 2-5-2013 10:00 PM
|
显示全部楼层
Code Composer Studio 没有用过。根据我的个人编程经验,希望能回答你的一些问题。
WDTCTL = WDTPW + WDTHOLD;是一个看门狗(Watch dog)代码,通常用来监视程序是否运行正常,如果有异常,将会自动重置。如果此时不关闭看门狗,程序运行一段时候将会自动reset
(i = 0; i < 20000; i++);不是真真的的delay指令,时间会不准。真真的delay可以参考Tutorial 2: TI LaunchPad MSP430 getting started- #include <msp430.h>
-
- #define LED_RED BIT0 // Red LED
-
- void Delay_ms(unsigned int ms);
-
- // main function
- void main(void) {
- WDTCTL = WDTPW + WDTHOLD; // Set WDT to stop
- P1DIR |= 0x01; // Set direction of the LED
-
- while(1){
- P1OUT ^= LED_RED; // Toggle P1
- Delay_ms(500); // Delay for 500 milliseconds
- }
- }
-
- // The delay function (creates a delay in milliseconds)
- void Delay_ms(unsigned int ms){
- while(ms--){
- __delay_cycles(1000);
- }
- }
复制代码 学习电子的都会认织Logic gate,也懂得什么是and,nand,or,not等等。
^= 就是Exclusive OR
用于toggle谋一个bit(谋一个输出/输入)
本帖最后由 西门庆33 于 2-5-2013 10:02 PM 编辑
|
|
|
|
|
|
|
|
楼主 |
发表于 2-5-2013 11:17 PM
|
显示全部楼层
西门庆33 发表于 2-5-2013 10:00 PM
Code Composer Studio 没有用过。根据我的个人编程经验,希望能回答你的一些问题。
WDTCTL = WDTPW + WD ...
感谢大哥的文章
|
|
|
|
|
|
|
|
楼主 |
发表于 3-5-2013 12:23 PM
|
显示全部楼层
西门庆33 发表于 2-5-2013 10:00 PM
Code Composer Studio 没有用过。根据我的个人编程经验,希望能回答你的一些问题。
WDTCTL = WDTPW + WD ...
大哥 小弟借问一下
P1OUT = 00000000 // 青色 LED 的pin 现在要他亮
P1OUT |= 01000000 //
P1OUT = 01000000 // LED 亮了.. 现在要把它关掉
P1OUT = 01000000
P1OUT ^= 01000000
P1OUT = 00000000 // LED 关掉了
道理是不是这样的啊 ?
想问问
P1OUT |= 0x40 // P1OUT(0000 0000) |=(or) 0x40(0100 0000) OUT = 0100 0000
接下来的 P1OUT = 0100 0000
P1OUT &= 0x00 // P1OUT(0100 0000) &=(And) 0x00(0000 0000) OUT = 0000 0000
现在 P1OUT = 0000 0000 了
P1OUT 的 value 是不是一直变的 ?
|
|
|
|
|
|
|
|
发表于 3-5-2013 07:12 PM
|
显示全部楼层
angels1026 发表于 3-5-2013 12:23 PM
大哥 小弟借问一下
P1OUT = 00000000 // 青色 LED 的pin 现在要他亮
说得头头是道。
P1OUT = 0100 0000
P1OUT &= 0000 0000
P1OUT = 00000000
只要&=全部是零,不管之前是什么值,结果全部都是零
|
|
|
|
|
|
|
|
发表于 10-5-2013 10:20 PM
|
显示全部楼层
哎呀,给你捷足先登了。还打算回来开贴的。
没关系,我也来贡献下。 留个脚印先。
不过,你用着的ccs v5是免费的吗? 因为上次我下载的时候,免费使用的版本只有ccs v4而且编程文件不准大过16KB。
|
|
|
|
|
|
|
|
楼主 |
发表于 10-5-2013 11:20 PM
|
显示全部楼层
|
|
|
|
|
|
| |
本周最热论坛帖子
|