找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1846|回复: 0
收起左侧

单片机UART接收中断接收数据再发送出去

[复制链接]
ID:284161 发表于 2018-12-21 10:11 | 显示全部楼层 |阅读模式
实验五 UART实验
一、实验目的
1. 了解单片机的UART的工作原理。
2. 掌握单片机的UART的应用。
二、实验内容

//1. 编写程序,设置单片机UART的波特率为9600,用UART的接收中断接收数据,每接收10个数据,再用UART的发送出去。
typedef unsigned char u8;
#include <stc15.h>



void UartInit(void);        //9600bps@11.0592MHz

u8 uart=0;
u8 num=0;
u8 rxdbuf[10]={0};
void main()
{
    UartInit();        
    EA=1;
    while(1)
    {

    }
}

void UartInit(void)        //9600bps@11.0592MHz
{
    SCON = 0x50;        //8位数据,可变波特率
    AUXR |= 0x40;        //定时器1时钟为Fosc,即1T
    AUXR &= 0xFE;        //串口1选择定时器1为波特率发生器
    TMOD &= 0x0F;        //设定定时器1为16位自动重装方式
    TL1 = 0xE0;        //设定定时初值
    TH1 = 0xFE;        //设定定时初值
    ET1 = 0;        //禁止定时器1中断
    ES = 1;                     //使能串口中断
    TR1 = 1;        //启动定时器1
}

void Uart2() interrupt 4
{
    if(RI==1) //接收中断
    {
        RI=0;        // 标志位清零
    rxdbuf[num]=SBUF;  //将数据送到数据存储器
        num++;
         if(num>=10)
        {
            num=0;
            SBUF=rxdbuf[0]; // 传输十次回到第一次传输的数据
            uart=1;  // 成功接收的标志位
            
        }
    }
   
    if(TI==1)  //发送中断
    {        
        TI=0;    //标志位清零
        if(uart<10)
        {
            SBUF=rxdbuf[uart];//数据发送到 数据存储器
            uart++;
        }
        
    }

}



回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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