由于方式1需要使用定时器来产生波特率,因此需要配置定时器和中断。下面是AT89S51的串口配置和发送/接收程序示例:

串口配置:

void InitSerial()
{
    TMOD = 0x20;    // 定时器1工作在模式2
    TH1 = 0xfd;     // 波特率为1200,TH1的初值为0xfd
    SCON = 0x50;    // 串口工作在模式1
    TR1 = 1;        // 启动定时器1
    EA = 1;         // 开启总中断
    ES = 1;         // 开启串口中断
}

发送程序:

void SendSerial(char ch)
{
    SBUF = ch;      // 将要发送的字符存入SBUF
    while(!TI);     // 等待发送完成
    TI = 0;         // 清除发送完成标志位
}

接收程序:

void ReceiveSerial() interrupt 4
{
    char ch;
    if(RI)          // 判断是否接收到数据
    {
        ch = SBUF;  // 读取接收到的数据
        RI = 0;     // 清除接收完成标志位
        // TODO: 处理接收到的数据
    }
}

注意,以上程序需要在主函数中调用InitSerial()函数进行串口初始化。处理接收到的数据的代码需要根据具体需求进行编写

在AT89S51片内RAM20H~3FH单元中有32B数据若采用方式1 进行串行通讯波特率为1200波特 fosc=12MHz编写发送接收程序对。

原文地址: http://www.cveoy.top/t/topic/hbNA 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录