guxingganyue 发表于 2011-8-25 09:29:37

太奇怪了,msp430f149的while(1)中只写一句翻转的话,这家伙竟然产生600KHz左右的方波,这是

这是我的程序

软件环境:IAR 5.20
下载器:FET430UIF、并口下载器(两个都下载过,结果一样)
芯片:MSP430F149

#include <msp430x14x.h>   
//********************************************************************
// 描述:时钟初始化,使用外部晶振7.3728M
// 输入:无输出:无
//校准:今天把系统时钟系统的看了一遍,基本明白了,2011-08-17
//********************************************************************
void CLK_init(void)
{
        unsigned int i=0;
        BCSCTL1 &= ~XT2OFF;       // XT2on,使能外部高速晶振
        do
        {
          IFG1 &=~OFIFG;//清除振荡器失效标志
          for (i = 0xFF; i > 0; i--);// 延时,等待XT2起振
        }
        while ((IFG1 & OFIFG) != 0);   // 判断XT2是否起振
        BCSCTL2 |= SELM_2 + SELS;// MCLK = SMCLK = XT2 (safe),选择外部晶振
}
void main(void)
{
CLK_init();   //时钟初始化
P1SEL &=0x00;//P1.0选择IO功能
P1DIR |=0x01;//方向为输出
P1OUT &=0xFE;
while(1)
{
    P1OUT ^=0x01;
}
}

下面是示波器截图,可以看到有600KHz左右的方波(⊙o⊙)哦

http://cache.amobbs.com/bbs_upload782111/files_44/ourdev_670947EPJRAG.jpg
(原文件名:照片3050.jpg)

http://cache.amobbs.com/bbs_upload782111/files_44/ourdev_670948J8W465.jpg
(原文件名:照片3051.jpg)

http://cache.amobbs.com/bbs_upload782111/files_44/ourdev_670949WLS8KT.jpg
(原文件名:照片3052.jpg)

http://cache.amobbs.com/bbs_upload782111/files_44/ourdev_670950G0584R.jpg
(原文件名:照片3053.jpg)

ele_eye 发表于 2011-8-25 09:34:50

循环一次正好是耗时6个时钟,所以你把晶振 7372800/(6*2) 就正好是600K左右了

guxingganyue 发表于 2011-8-25 09:53:34

回复【1楼】ele_eye
-----------------------------------------------------------------------

那这个149不是单指令周期的东东了?

muyimufeng 发表于 2011-8-25 10:00:11

是不是你晶振出问题了 阿,你可以用示波器看看晶振的输出或者换一个单片机试试看

240671900 发表于 2011-8-25 10:33:54

是你小子,哼哼!

gzhuli 发表于 2011-8-25 11:07:06

回复【2楼】guxingganyue
那这个149不是单指令周期的东东了?
-----------------------------------------------------------------------

你用1条汇编指令写出 读寄存器 + 异或 + 写寄存器 + 跳转 来看看?

wandy2010 发表于 2011-8-25 11:34:46

拍照时,对焦要准确,相机要拿稳,按动快门时不可用猛劲

lyzhangxiang 发表于 2011-8-25 13:06:43

看门狗呢 默认是打开的吧默认的时间呢 是多少?

片子复位之后某些寄存器的值怎么样子的,考虑下。

xiaoking 发表于 2011-8-25 13:32:39

异或操作,就是每次取反

huanggua 发表于 2011-8-25 13:57:24

回复【5楼】gzhuli咕唧霖
回复【2楼】guxingganyue
那这个149不是单指令周期的东东了?
-----------------------------------------------------------------------
你用1条汇编指令写出 读寄存器 + 异或 + 写寄存器 + 跳转 来看看?
-----------------------------------------------------------------------

回复【8楼】xiaoking蒋杰
异或操作,就是每次取反
-----------------------------------------------------------------------

aida66 发表于 2011-8-25 22:19:29

看门狗的没关。main函数开头加句 WDTCTL = WDTPW + WDTHOLD ;试试。

guxingganyue 发表于 2011-8-26 16:38:33

回复【4楼】240671900 疯狂的石头
-----------------------------------------------------------------------

何发现的

guxingganyue 发表于 2011-8-26 16:39:18

回复【6楼】wandy2010 老铁
-----------------------------------------------------------------------

手机不行啊

wuha 发表于 2011-8-26 17:03:43

是LZ奇怪吧,这是一条C取反指令,没运行一次,将对应IO电平置反,怎么奇怪了!

guxingganyue 发表于 2011-8-26 17:24:57

回复【10楼】aida66
-----------------------------------------------------------------------

刚试了,结果一样啊

guxingganyue 发表于 2011-8-26 17:25:53

回复【5楼】gzhuli 咕唧霖
-----------------------------------------------------------------------

不会汇编啊,,等我忙完了再用汇编试试吧

guxingganyue 发表于 2011-8-26 17:27:35

回复【7楼】lyzhangxiang
-----------------------------------------------------------------------

刚算了,我用7.3728MHz的晶振,狗默认时间是:4.4444ms

计算:2^15×1/7372800=0.00444444

http://cache.amobbs.com/bbs_upload782111/files_44/ourdev_671443V4E9YW.jpg
(原文件名:11.jpg)

guxingganyue 发表于 2011-8-26 17:30:05

回复【13楼】wuha 致命武器
-----------------------------------------------------------------------

取反出现方波不奇怪,怪哉:600KHz

ele_eye 发表于 2011-8-26 19:59:00

回复【楼主位】guxingganyue
-----------------------------------------------------------------------
我不是很清楚 msp430f149 的指令 ,可惜的是我还从来没有用过此类的单片机,

你可以去仔细调试一下,看看C语言对应的 汇编语言是什么? 有几条指令,每条指令占几个时钟,

包括的 C语言P1OUT ^=0x01;是直接取反IO还是,读+异或+写+IO翻转,

你需要确认此单片机的是否有直接能把IO取反的汇编指令,还有IO的翻转速度,

还有循环跳转指令站几个时钟

从现象看 肯定的是有 6 个时钟的,这是无需怀疑, LZ在这里猜来猜去 还不如把对应汇编贴出来

avr-arm 发表于 2011-8-26 20:28:57

我记得avr,12兆主频,产生3M方波,取反IO口

ckvlhf 发表于 2011-9-1 22:21:19

这么多几分白混了。

jianfeiED 发表于 2011-9-13 19:22:52

。。。。。。。。
页: [1]
查看完整版本: 太奇怪了,msp430f149的while(1)中只写一句翻转的话,这家伙竟然产生600KHz左右的方波,这是