|
贴出程序……
#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[100] = {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发送数据
-------------------------------------------------------*/
void Uart0Send(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[recv_count] = b; //若不是'@',则继续向字符数组recv_buf[]添加字符
recv_count++;
}
for(i=0; i<recv_count; i++) //输出字符串
Uart0Send(recv_buf);
Uart0SendString("\n");
recv_count =0; //重置
}
} |
阿莫论坛20周年了!感谢大家的支持与爱护!!
你熬了10碗粥,别人一桶水倒进去,淘走90碗,剩下10碗给你,你看似没亏,其实你那10碗已经没有之前的裹腹了,人家的一桶水换90碗,继续卖。说白了,通货膨胀就是,你的钱是挣来的,他的钱是印来的,掺和在一起,你的钱就贬值了。
|