NORDIC nRF24LE1 学习笔记 Day03 UART

nRF24LE1 包含一个与标准8051操作完全相同的串口。RXD脚必须设置为输入,TXD脚必须设置为输出。

特征:

①同步模式,固定波特率

②8位异步模式,波特率可变

③9位异步模式,波特率可变

④9位异步模式,固定波特率

额外的波特率发生器

注:不推荐使用定时器1溢出作为波特率发生器。



照例先贴源代码:


#include "reg24le1.h" 
#include "string.h"


/*
================================================================================
UART_Init:
    Initialize the UART
input     : BaudIndex, the index of the  baudrate of the UART, 0-7, 1200-115200
Output    : None
================================================================================
*/
code unsigned int UART_BAUD_TBL[7] = { 607, 816, 920, 972, 998, 1011, 1015 };
//0----6,,,--> 1200, 2400, 4800, 9600, 19200, 38400, 57600
void UART_Init( unsigned char BaudIndex )
{
    IEN0 &= ~( 1<<4 );					//Disable UART0 interrupt while initializeing
    S0CON = ( 1<<6 ) | ( 1<<4 );			//MODE1, Enable receive
    ADCON = 0x80;				 	//Enable baudrate generator
    PCON |= 0x80; 					//mode1
    S0RELL = UART_BAUD_TBL[BaudIndex];
    S0RELH = UART_BAUD_TBL[BaudIndex] >> 8;
    IEN0 |= ( 1<<4 );					//Enable interrupt
    P0DIR |= ( 1<<4 );             			//P0.4, RXD, set as input
    P0DIR &= ~( 1<<3 );             			//P0.3, TXD, set as output
}
unsigned char TX_OK = 0;
static void UART0_ISR( void ) interrupt INTERRUPT_UART0
{
    if( S0CON & ( 1<<1 ) )
    {
        //TX ok
        S0CON &= ~( 1<<1 );
        TX_OK = 1;
    }
    else if( S0CON & ( 1<<0 ) )
    {
        //RX ok        
        S0CON &= ~( 1<<0 );
        P0DIR &= ~( 1<<2 );         //Set P0.2 as output
        P0 ^= ( 1<<2 );             //Turn on the LED
        S0BUF = S0BUF;
    }
}


void UART0_SendBuff( unsigned char *buff, unsigned char size )
{  
    while( size -- )
    {
        TX_OK = 0;
        S0BUF = *buff ++;
        while( TX_OK == 0 );
    }
    TX_OK = 0;
}


void UART0_SendStr( char* str )
{
    UART0_SendBuff( ( unsigned char* ) str, strlen( str ) );
}


void main( void )
{
    CLKCTRL = ( CLKCTRL | 0x80 ) & ~0x08;


    UART_Init( 3 );    //baudrate = 9600
    EA = 1;
    UART0_SendStr( "nRF24LE1 UART Test Start!\r\n" );
    while( 1 );
}






相关特殊寄存器:

IEN0 中断使能寄存器0 (地址 : 0xA8 复位值 : 0x00)

地址 描述
0xA8 7 1:全局中断开 0:禁止所有中断
  6 不使用
  5 1:允许定时器2(TF2/EXF2)中断
  4 1:允许串口(RI0/TI0)中断
  3 1:允许定时器1溢出(TF1)中断
  2 1:允许掉电(POFIRQ)中断
  1 1:允许定时器0溢出(TF0)中断
  0 1:允许引脚(IFP)中断

S0CON 串口0  控制寄存器 (地址 : 0x98 复位值 : 0x00)

名称 描述
7:6 SM0:SM1 模式选择
00 : 模式0 - 波特率为 ckCPU/12
01 : 模式1 - 8位异步模式
10 : 模式2 - 9位异步模式,波特率为ckCPU/32(SMOD = 1)或ckCPU/64
11 : 模式3 - 9位异步模式
5 SM20 允许多点通信
4 REN0 1 : 允许串口接收
3 TB80 用于模式2和3(校验和多机通信),对应于第9位数据,由软件设置
2 RB80 用于模式2和3(校验和多机通信),对应于接收到的第9位数据
1 TI0 发送中断标志,用硬件设置,但必须由软件清0
0 RI0 接收中断标志,由硬件设置,但必须由软件清0
串口0波特率选择寄存器 - ADCON(地址 : 0xD8 复位值 : 0x00)

名称 描述
7 BD 1 : 使用其他内部波特率发生器
0 : 定时器1溢出作为波特率发生器
6-0   保留 不使用
程序内存写入模式和串口0波特率波特率发生器(地址 : 0x87)

名称 描述
7 SMOD 串口0波特率选择
6 GF3 通用标志3
5 GF2 通用标志2
4 PMW 1 : MOVX指令将访问存储器代码空间
0 : MOVX指令将访问存储器数据空间
3 GF1 通用标志1
2 GF0 通用标志0
1 - 不使用,必须为0,读永远为0
0 - 不使用,必须为0,读永远为0












你可能感兴趣的:(学习笔记)