图1
图2
各位430单片机的大咖们:
你们好,小弟刚刚开始学习430单片机,很多东西还不是很理解,在此请教你们一些问题。
图1是我用proteus仿真设计的一个简单电路图,仿真的目的是想用示波器测量MCLK、SMCLK以及ACLK的频率,看看这些频率是否与我设置的时钟源的频率一致。但是不知道为什么,仿真时用示波器测量3个时钟信号,输出都是低电平,实验结果如图2所示。
程序为:
#include <msp430f235.h>
void clock_init();
void port_init();
/**************************************************/
// main program //
/**************************************************/
void main( void )
{
WDTCTL = WDTPW + WDTHOLD; // Stop watchdog timer to prevent time out reset
clock_init();
port_init();
for(;;);
}
/**************************************************/
// port initiallize program //
/**************************************************/
void port_init()
{
P5DIR |=BIT4+BIT5+BIT6; //Set P5.4 P5.5 P5.6 output
P5SEL |=BIT4+BIT5+BIT6; //P5.4=MCLK,P5.5=SMCLK,P5.6=ACLK
}
/**************************************************/
// clock initiallize program //
/**************************************************/
void clock_init()
{
DCOCTL |=DCO0+DCO1; //设置DCO模式
BCSCTL1 |=XT2OFF+RSEL2+RSEL1+RSEL0;
BCSCTL2 |=DIVM_3+DIVS_2; //f(MCLK)=f(DCO)/8; f(SMCLK)=f(DCO)/4; f(ACLK)=f(XT1);
}
既然可以回答430的相关问题的,在我面前就是大神了,或者至少是前辈了,哈哈!。
我现在仔细看了一下user guide,怀疑我的问题出在这里:因为430单片机的I/O口是复用的,有的时候是好几个功能复用一个I/O口,当我设置I/O口为外围模块时,怎么确定设置具体输出的外围模块,你如430g2553的P1.1口,可以作为P1.1/TA0.0/UCA0RXD/UCA0SOMI/A1/CA1,当我设置改口为外围模块时,怎么确定我的外围模块输出是TA0.0,而不是UCA0RXD/UCA0SOMI/A1/CA1,这里一直没有明白,请指教!
谢谢了!
#include <msp430g2553.h>
void main(void)
{
WDTCTL = WDTPW +WDTHOLD; // Stop Watchdog Timer
if (CALBC1_1MHZ ==0xFF || CALDCO_1MHZ == 0xFF)
{
while(1); // If calibration constants erased
// do not load, trap CPU!!
}
//1Mhz
BCSCTL1 = CALBC1_1MHZ; // Set range
DCOCTL = CALDCO_1MHZ; // Set DCO step + modulation */
/* //8Mhz
BCSCTL1 = CALBC1_8MHZ; // Set range
DCOCTL = CALDCO_8MHZ; // Set DCO step + modulation */
/* //12Mhz
BCSCTL1 = CALBC1_12MHZ; // Set range
DCOCTL = CALDCO_12MHZ; // Set DCO step + modulation*/
/* //16Mhz
BCSCTL1 = CALBC1_16MHZ; // Set range
DCOCTL = CALDCO_16MHZ; // Set DCO step + modulation*/
P1DIR |= 0x13; // P1.0,1 and P1.4 outputs
P1SEL |= 0x11; // P1.0,4 ACLK, SMCLK output
while(1)
{
P1OUT |= 0x02; // P1.1 = 1
P1OUT &= ~0x02; // P1.1 = 0
}
}
你好,我看了一下TI官网的程序,对比一下我的程序,我发现应该就是最后的while(1)循环不一样,请问这个while(1)循环里是什么意思,不明白,请指教!
手册上有介绍啊。对一些寄存器进行配置就可以。
http://wenku.baidu.com/link?url=fwnFf7rVeWqng57_aEiWiiIfMUM1R7d1ufs15wSd_q_g_TLlXDcqA4BYUo8WV9vI9U04eim9Q6moMW-Z0hsNpUvxDOtZ_73LzX1oxFme1O7
第44页
#include <msp430g2553.h>
void main(void)
{
WDTCTL = WDTPW +WDTHOLD; // Stop Watchdog Timer
if (CALBC1_1MHZ ==0xFF || CALDCO_1MHZ == 0xFF)
{
while(1); // If calibration constants erased
// do not load, trap CPU!!
}
//1Mhz
BCSCTL1 = CALBC1_1MHZ; // Set range
DCOCTL = CALDCO_1MHZ; // Set DCO step + modulation */
/* //8Mhz
BCSCTL1 = CALBC1_8MHZ; // Set range
DCOCTL = CALDCO_8MHZ; // Set DCO step + modulation */
/* //12Mhz
BCSCTL1 = CALBC1_12MHZ; // Set range
DCOCTL = CALDCO_12MHZ; // Set DCO step + modulation*/
/* //16Mhz
BCSCTL1 = CALBC1_16MHZ; // Set range
DCOCTL = CALDCO_16MHZ; // Set DCO step + modulation*/
P1DIR |= 0x13; // P1.0,1 and P1.4 outputs
P1SEL |= 0x11; // P1.0,4 ACLK, SMCLK output
while(1)
{
P1OUT |= 0x02; // P1.1 = 1
P1OUT &= ~0x02; // P1.1 = 0
}
}
你好,我看了一下TI官网的程序,对比一下我的程序,我发现应该就是最后的while(1)循环不一样,请问这个while(1)循环里是什么意思,不明白,请指教!
一周热门 更多>