cutejoanna 发表于 2011-6-7 11:00:35

CC2430 ADCH,ADCL寄存器数值总是0x00?

贴出程序……
#define ENABLE_ALL_INTERRUPT() (IEN0 |= 0x80)
#define DISABLE_ALL_INTERRUPT() (IEN0 &= ~0x80)
#include"ioCC2430.h"
#define uchar unsigned char
#define uint unsigned int
#define BYTE unsigned char
#define BAUD_E(baud, clkDivPow) (   \
    (baud==2400)   ?6+clkDivPow : \
    (baud==4800)   ?7+clkDivPow : \
    (baud==9600)   ?8+clkDivPow : \
    (baud==14400)?8+clkDivPow : \
    (baud==19200)?9+clkDivPow : \
    (baud==28800)?9+clkDivPow : \
    (baud==38400)?10 +clkDivPow : \
    (baud==57600)?10 +clkDivPow : \
    (baud==76800)?11 +clkDivPow : \
    (baud==115200) ?11 +clkDivPow : \
    (baud==153600) ?12 +clkDivPow : \
    (baud==230400) ?12 +clkDivPow : \
    (baud==307200) ?13 +clkDivPow : \
    0)


#define BAUD_M(baud) (      \
    (baud==2400)   ?59: \
    (baud==4800)   ?59: \
    (baud==9600)   ?59: \
    (baud==14400)?216 : \
    (baud==19200)?59: \
    (baud==28800)?216 : \
    (baud==38400)?59: \
    (baud==57600)?216 : \
    (baud==76800)?59: \
    (baud==115200) ?216 : \
    (baud==153600) ?59: \
    (baud==230400) ?216 : \
    (baud==307200) ?59: \
0)
extern void UARTxISRopen(void);
extern void SET_UART0_ISR(void);
extern void initUART(void);
extern unsigned uarttemp;
main( void )
{
      uchar temp = 0;
      SLEEP &= ~0x04;
        while(!(SLEEP & 0x40)); //上电等待外晶振稳定                
        CLKCON &= ~0x47;                       
        SLEEP |= 0x04;
      initUART();
      UARTxISRopen();
   ENABLE_ALL_INTERRUPT();
   while(1)
   {uarttemp =1;}


}
/*
实验说明:UART0,波特率115200bps,PC机向CC2430送字符串(以@字符结束),CC2430收到后返回该字符串
*/

#include <ioCC2430.h>

unsigned char recv_buf = {0};
unsigned char recv_count = 0;


/*系统时钟初始化
-------------------------------------------------------*/
void xtal_init(void)
{
SLEEP &= ~0x04;             //都上电
while(!(SLEEP & 0x40));   //晶体振荡器开启且稳定
CLKCON &= ~0x47;            //选择32MHz 晶体振荡器
SLEEP |= 0x04;            //关掉不用的振荡器
}

/*UART0通信初始化
-------------------------------------------------------*/
void Uart0Init(unsigned char StopBits,unsigned char Parity)
{
   PERCFG&= ~0x01;                  //选择UART0为可选位置一,即RXD接P0.2,TXD接P0.3
   P0SEL |=0x0C;                  //初始化UART0端口,设置P0.2与P0.3为外部设备IO口

   U0CSR = 0xC0;                  //设置为UART模式,并使能接收器

   U0BAUD.BAUD_M = 0xd8;
   U0GCR.BAUD_E= 0x0b;                     //设置UART0波特率为115200bps,至于为何是216和11,可查阅CC2430中文手册

   U0UCR |= StopBits|Parity;      //设置停止位与奇偶校验
}

/*UART0发送数据
-------------------------------------------------------*/
voidUart0Send(unsigned char data)
{
while(U0CSR&0x01);    //等待UART空闲时发送数据
U0DBUF = data;
}

/*UART0发送字符串
-------------------------------------------------------*/
void Uart0SendString(unsigned char *s)
{
while(*s != 0)         //依次发送字符串s中的每个字符
    Uart0Send(*s++);
}

/*UART0接受数据
-------------------------------------------------------*/
unsigned char Uart0Receive(void)
{
unsigned char data;
while(!(U0CSR&0x04)); //查询是否收到数据,否则继续等待
data=U0DBUF;          //提取接收到的数据
return data;
}

/*主函数
-------------------------------------------------------*/
void main(void)
{
unsigned char i,b;

xtal_init();

Uart0Init(0x00,0x00);//初始化UART0,设置1个停止位,无奇偶校验
Uart0SendString("Please Input string ended with '@'!\r\n");

recv_count = 0;

while(1)
{
    while(1)
    {
      b = Uart0Receive();            //UART
      if(b=='@')break;               //若接收到'@',则跳出循环,输出字符串

      recv_buf = b;      //若不是'@',则继续向字符数组recv_buf[]添加字符
      recv_count++;
    }
    for(i=0; i<recv_count; i++)      //输出字符串
      Uart0Send(recv_buf);

    Uart0SendString("\n");
    recv_count =0;                     //重置
}
}

cutejoanna 发表于 2011-6-7 11:01:30

在线等判断……谢谢个位大虾!
页: [1]
查看完整版本: CC2430 ADCH,ADCL寄存器数值总是0x00?