找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4111|回复: 2
打印 上一主题 下一主题
收起左侧

STC8A8K单片机串口发送接收程序

[复制链接]
跳转到指定楼层
楼主
#include <STC8.H>

#define u8 unsigned char
#define u16 unsigned int

void UART_Init(u16 BaudRate) //串口初使化函数  11.0592Mhz 8A8K单片机
{
        u8 TH1_Dat;
        switch(BaudRate)
    {
                case 2400:  TH1_Dat=0x70; break;
                case 4800:  TH1_Dat=0xB8; break;
                case 9600:  TH1_Dat=0xDC; break;
                case 19200: TH1_Dat=0xEE; break;
                case 57600: TH1_Dat=0xFA; break;
                case 115200: TH1_Dat=0xFD; break;
    }
        TMOD &= 0x0F;         //清除定时器1模式位
    TMOD |= 0x20;        //定时器工作模式,0x20-工作方式2:8位自动重装载模式
    SCON = 0x50;          //串行口工作方式控制寄存器,当前为1
                                        //Bit[7:6],00为工作方式0,01方式1,10方式2,11方式3
    PCON |=0x00;         //Bit7-波特率倍增位:0-不培增  1-培增
        AUXR |= 0x40;   //定时器1时钟为Fosc,即1T
        AUXR &= 0xfE;   //串口1选择定时器1为波特率发生器
    TH1 = TH1_Dat;         //8位自动重装载定时器模式下,TH1被用作自动重装载值寄存器
    TL1 = TH1_Dat;  //TL1为计数寄存器
    TR1 = 1;                //定时器1开始计数
        ET1 = 0;        //禁止定时器1中断
    ES = 1;               //串口中断允许位
    EA = 1;               //打开总中断
}

void main()
{
        UART_Init(115200);
        while(1);               
}


void Usart() interrupt 4
{
        u8 receiveData;

        receiveData=SBUF;        //出去接收到的数据
        RI = 0;                                //清除接收中断标志位
        SBUF=receiveData;        //将接收到的数据放入到发送寄存器
        while(!TI);                        //等待发送数据完成
        TI=0;                                //清除发送完成标志位
}
#include <STC8.H>

#define u8 unsigned char
#define u16 unsigned int

void UART_Init(u16 BaudRate) //串口初使化函数  11.0592Mhz 8A8K单片机
{
        u8 TH1_Dat;
        switch(BaudRate)
    {
                case 2400:  TH1_Dat=0x70; break;
                case 4800:  TH1_Dat=0xB8; break;
                case 9600:  TH1_Dat=0xDC; break;
                case 19200: TH1_Dat=0xEE; break;
                case 57600: TH1_Dat=0xFA; break;
                case 115200: TH1_Dat=0xFD; break;
    }
        TMOD &= 0x0F;         //清除定时器1模式位
    TMOD |= 0x20;        //定时器工作模式,0x20-工作方式2:8位自动重装载模式
    SCON = 0x50;          //串行口工作方式控制寄存器,当前为1
                                        //Bit[7:6],00为工作方式0,01方式1,10方式2,11方式3
    PCON |=0x00;         //Bit7-波特率倍增位:0-不培增  1-培增
        AUXR |= 0x40;   //定时器1时钟为Fosc,即1T
        AUXR &= 0xfE;   //串口1选择定时器1为波特率发生器
    TH1 = TH1_Dat;         //8位自动重装载定时器模式下,TH1被用作自动重装载值寄存器
    TL1 = TH1_Dat;  //TL1为计数寄存器
    TR1 = 1;                //定时器1开始计数
        ET1 = 0;        //禁止定时器1中断
    ES = 1;               //串口中断允许位
    EA = 1;               //打开总中断
}

void main()
{
        UART_Init(115200);
        while(1);               
}


void Usart() interrupt 4
{
        u8 receiveData;

        receiveData=SBUF;        //出去接收到的数据
        RI = 0;                                //清除接收中断标志位
        SBUF=receiveData;        //将接收到的数据放入到发送寄存器
        while(!TI);                        //等待发送数据完成
        TI=0;                                //清除发送完成标志位
}



运行截图-注意IRC.jpg (216.59 KB, 下载次数: 102)

运行截图-注意IRC.jpg

评分

参与人数 2黑币 +70 收起 理由
咸鱼头 + 30 回帖助人的奖励!
admin + 40 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶1 踩1
回复

使用道具 举报

沙发
ID:927850 发表于 2021-7-13 19:45 | 只看该作者
写的真好
回复

使用道具 举报

板凳
ID:428114 发表于 2021-7-15 16:05 | 只看该作者
在串口中断里:
        while(!TI);                        //等待发送数据完成
        TI=0;                                //清除发送完成标志位
=====================================
这个做法不好。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表