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; //重置
}
} 在线等判断……谢谢个位大虾!
页:
[1]