串口通信求解

[复制链接]
1757|4
 楼主| 719459589 发表于 2013-5-9 19:33 | 显示全部楼层 |阅读模式
SCON =0x58; //选择串口工作方式,打开接收允许
TMOD =0x21; //定时器1工作在方式2,定时器0工作在方式1
TH1 =0xfd; //实现波特率9600(系统时钟11.0592MHZ)
是如何实现的请教
logokfu 发表于 2013-5-9 20:03 | 显示全部楼层
你看用户手就可以看懂了啦
梦幻FLY 发表于 2013-5-9 21:34 | 显示全部楼层
这个是查询法,不是中断法。
#include <AT89X52.h>
unsigned char cc[]={1,2,3,4,5};
/************串口初始化函数***************/
void serial_port_initial()//
{
    PCON    =   0x00;         //波特率不加倍
    SCON    =   0x50;   //0101,0000  设定串口方式1,10位异步通信
    TMOD    =   0x20;   //0011,0001 设置定时器1为8位自动重装计数器
    TH1     =   0xfd;   //设置定时器1自动重装数   9.6K
    TL1     =   0xfd;   //波特率设定 9.6K
    ES      =   0;      //串口中断关闭
    ET1     =   0;      //定时器1中断关闭
    TR1     =   1;      //打开串口
    EA      =   0;      //开总中断
}

/***********串口发送一个数据**************/
void send_UART(unsigned char i)
{
   TI = 0;           //软件清零发送中断标志
   SBUF = i   ;      //发送一帧数据
   while( TI == 0 ); //等待发送结束

}

/***************主函数********************/
void main( void )
{
        serial_port_initial();        //初始化串口
    while( 1 )
    {
            if(RI==1)                        //判断是否接收完毕
            {
                        a = SBUF;            //把接收的数据存于a中
                              P0 = a;              //用P0显示接收的数据
            }
             RI=0;                    //清除接收标志位

               
               send_UART(cc);   //通过串口发送

   }
}
牛牛牛 发表于 2013-5-9 22:14 | 显示全部楼层
[b]具体请查看通信方式一以及计数方式二的工作过程,
波特率=2^(smod)*11059200/{32*12*(256-TL1)}.
huzi741 发表于 2013-5-10 12:51 | 显示全部楼层
其实可以看看用户手册在分析一下3楼的程序就可以理解了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

1

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部