打印

cc2530和STC12C5A60S2的串口通信

[复制链接]
1306|3
手机看帖
扫描二维码
随时随地手机跟帖
沙发
dzzpec|  楼主 | 2018-5-4 17:36 | 只看该作者
1.硬件连接
CC2530串口(UART0)               STC12串口(UART1)
Rx/P0.2  ------------------------------ TxD/P3.1
Tx/P0.3  ------------------------------  RxD/P3.0
GND       ------------------------------  GND(共地)
+5V        ------------------------------ +5V(共5V电源)

使用特权

评论回复
板凳
coody| | 2018-5-5 21:40 | 只看该作者
RCD TXD最好串个300~510欧姆电阻。

使用特权

评论回复
地板
dzzpec|  楼主 | 2018-6-7 20:32 | 只看该作者
STC12C5A60S2的串口通信程序,在此记录

/*************        ±¾³ÌÐò¹¦ÄÜ˵Ã÷        **************
        ²âÊÔ·½·¨£º

        ¸ù¾ÝÄúµÄÖ÷ʱÖӺͲ¨ÌØÂÊÐÞ¸ÄÏÂÃæµÄÏà¹Ø¶¨Ò壬±àÒëºóÏÂÔص½MCU¡£

        ͨ¹ý´®¿ÚÖúÊÖÏòMCU·¢ËÍÊý¾Ý£¬MCUÊÕµ½ºóÔ­Ñù·µ»Ø¡£
*/

#include        <reg51.h>

sfr        AUXR = 0x8E;

#define                BUF_LENTH        128                //¶¨Òå´®¿Ú½ÓÊÕ»º³å³¤¶È
unsigned char         RX0_Cnt;
unsigned char        RX0_TimerOut;
unsigned char         xdata RX0_Buffer[BUF_LENTH];
bit                B_TI;

void        uart0_init(void);



/*************** Óû§¶¨Òå²ÎÊý *****************************/

#define MAIN_Fosc                11059200L        //define main clock
#define Baudrate0                9600                //define the baudrate,
                                                                        //12T mode: 600~115200 for 22.1184MHZ, 300~57600 for 11.0592MHZ
                                                                        //1T  mode: 7200~1382400 for 22.1184MHZ, 3600~691200 for 11.0592MHZ

/**********************************************************/


/****************** ±àÒëÆ÷×Ô¶¯Éú³É£¬Óû§ÇëÎðÐÞ¸Ä ************************************/

#define T1_TimerReload                (256 - MAIN_Fosc / 192 / Baudrate0)                //Calculate the timer1 reload value        at 12T mode
//#define T1_TimerReload        (256 - MAIN_Fosc / 16 / Baudrate0)                //Calculate the timer1 reload value ar 1T mode

#define        TimeOut                                (28800 / (unsigned long)Baudrate0 + 2)
/**********************************************************/


void        main(void)
{
        unsigned char i;
        unsigned int  j;
        uart0_init();
       
        while(1)
        {
                for(j=0; j<1500; j++)        ;        //14T per loop, delay 1ms
                if(RX0_TimerOut != 0)
                {
                        if(--RX0_TimerOut == 0)
                        {
                                if(RX0_Cnt != 0)
                                {
                                        for(i=0; i<RX0_Cnt; i++)
                                        {
                                                B_TI = 0;
                                                SBUF = RX0_Buffer[i];
                                                while(!B_TI)        ;
                                                B_TI = 0;
                                        }
                                }
                                RX0_Cnt = 0;
                        }
                }
        }
}



void        uart0_init(void)
{
        PCON |= 0x80;                //UART0 Double Rate Enable
        SCON = 0x50;                //UART0 set as 10bit , UART0 RX enable
        TMOD &= ~(1<<6);                //Timer1 Set as Timer, 12T
        TMOD = (TMOD & ~0x30) | 0x20;        //Timer1 set as 8 bits auto relaod
//        AUXR |=  (1<<6);                //Timer1 set as 1T mode
        TH1 = T1_TimerReload;                //Load the timer
        TR1  = 1;
        ES  = 1;
        EA = 1;
}


/**********************************************/
void UART0_RCV (void) interrupt 4
{
        if(RI)
        {
                RI = 0;
                if(RX0_Cnt >= BUF_LENTH)                RX0_Cnt = 0;
                RX0_Buffer[RX0_Cnt++] = SBUF;
                RX0_TimerOut = TimeOut;        //5ms time out for >= 4800
        }

        if(TI)
        {
                TI = 0;
                B_TI = 1;
        }
}

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

4

主题

8

帖子

0

粉丝