打印

stc15w204s串口问题

[复制链接]
3022|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
wkl520520|  楼主 | 2015-10-16 15:50 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
/*************        本地常量声明        **************/
#define MAIN_Fosc                11059200L        //定义主时钟
#define        RX1_Lenth                32                        //串口接收缓冲长度
#define        BaudRate1                9600UL        //选择波特率


#define        Timer1_Reload        (65536UL -(MAIN_Fosc / 4 / BaudRate1))                //Timer 1 重装值, 对应300KHZ
#define        Timer2_Reload        (65536UL -(MAIN_Fosc / 4 / BaudRate1))                //Timer 2 重装值, 对应300KHZ

#include        "STC15Fxxxx.H"


/*************        本地变量声明        **************/
u8        idata RX1_Buffer[RX1_Lenth];        //接收缓冲
u8        TX1_Cnt;        //发送计数
u8        RX1_Cnt;        //接收计数
bit        B_TX1_Busy;        //发送忙标志


/*************        本地函数声明        **************/



/**********************************************/
void main(void)
{
        B_TX1_Busy = 0;
        RX1_Cnt = 0;
        TX1_Cnt = 0;

        S1_8bit();                                //8位数据
        S1_USE_P30P31();                //UART1 使用P30 P31口        默认
        //S1_USE_P36P37();                //UART1 使用P36 P37口
//        S1_USE_P16P17();                //UART1 使用P16 P17口

/*
        TR1 = 0;                        //波特率使用Timer1产生
        AUXR &= ~0x01;                //S1 BRT Use Timer1;
        AUXR |=  (1<<6);        //Timer1 set as 1T mode
        TH1 = (u8)(Timer1_Reload >> 8);
        TL1 = (u8)Timer1_Reload;
        TR1  = 1;
*/

        AUXR &= ~(1<<4);        //Timer stop                波特率使用Timer2产生
        AUXR |= 0x01;                //S1 BRT Use Timer2;
        AUXR |=  (1<<2);        //Timer2 set as 1T mode
        TH2 = (u8)(Timer2_Reload >> 8);
        TL2 = (u8)Timer2_Reload;
        AUXR |=  (1<<4);        //Timer run enable

        REN = 1;        //允许接收
        ES  = 1;        //允许中断

        EA = 1;                //允许全局中断
       

        while (1)
        {
                if(TX1_Cnt != RX1_Cnt)                //收到过数据
                {
                        if(!B_TX1_Busy)                //发送空闲
                        {
                                B_TX1_Busy = 1;                //标志发送忙
                                SBUF = 0X55;        //发一个字节
                                if(++TX1_Cnt >= RX1_Lenth)        TX1_Cnt = 0;        //避免溢出处理
                        }
                }
        }
}

/********************* UART1中断函数************************/
void UART1_int (void) interrupt UART1_VECTOR
{
        if(RI)
        {
                RI = 0;
                RX1_Buffer[RX1_Cnt] = SBUF;                //保存一个字节
                if(++RX1_Cnt >= RX1_Lenth)        RX1_Cnt = 0;        //避免溢出处理
        }

        if(TI)
        {
                TI = 0;
                B_TX1_Busy = 0;                //清除发送忙标志
        }
}

这个程序用P3.0和P3.1正常,使用P3.6和p3.7不能通讯

相关帖子

沙发
无量寿经| | 2015-10-16 22:41 | 只看该作者
看到这句了吗? //S1_USE_P36P37();                //UART1 使用P36 P37口

使用特权

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

本版积分规则

1

主题

2

帖子

0

粉丝