打印
[应用方案]

【赛元95F】+4.DIY拓展2:串口0数据收发测试

[复制链接]
1159|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
沙发
一路向北lm|  楼主 | 2020-3-24 20:49 | 只看该作者
测试代码如下,(包括串口初始化、串口数据的收发)
//uart.c 代码
#include "bsp/uart.h"
bit UartSendFlag = 0; //发送中断标志位
bit UartReceiveFlag = 0; //接收中断标志位

/*****************************************************
*函数名称:void Uart_Init(uint Freq,unsigned long int baud)
*函数功能:Uart中断初始化,选择Timer1作为波特率信号发生器
*入口参数:Freq-主频,baud-波特率
*出口参数:void
*****************************************************/
void Uart_Init(unsigned int Freq,unsigned long int baud)  
{
        P2CON &= 0xFC;   //TX/RX设置为输入带上拉
        P2PH  |= 0x03;
       
        SCON  |= 0X50;   //设置通信方式为模式一,允许接收
        TMCON |= 0X02;
        TH1 = (Freq*1000000/baud)>>8;          //波特率为T1的溢出时间;
        TL1 = Freq*1000000/baud;
        TR1 = 0;
        ET1 = 0;
        EUART = 1;     //开启Uart中断
        EA = 1;
}

/*****************************************************
*函数名称:Uart_Send_Byte(unsigned char byte)
*函数功能:串口发送一个字节函数
*入口参数:unsigned char byte
*出口参数:void
*****************************************************/
void Uart_Send_Byte(unsigned char byte)
{
  
          SBUF = byte;
                while(!UartSendFlag);
                UartSendFlag = 0;
}

/*****************************************************
*函数名称:void Uart_Send_String(unsigned char *str)
*函数功能:串口发送字符串函数
*入口参数:unsigned char *str
*出口参数:void
*****************************************************/
void Uart_Send_String(unsigned char *str)
{
    while(*str)
                {
                  Uart_Send_Byte(*str);
                        str++;
                }
}

/*****************************************************
*函数名称:void Uart_Recv_Date()
*函数功能:串口接收数据处理函数
*入口参数:void
*出口参数:void
*****************************************************/
void Uart_Recv_Date()
{
        unsigned char Byte;
  if(UartReceiveFlag == 1)
        {
           UartReceiveFlag = 0;
                 Byte = SBUF;
                 Uart_Send_Byte(Byte);
        }
}

/*****************************************************
*函数名称:void UartInt(void) interrupt 4
*函数功能:Uart中断函数
*入口参数:void
*出口参数:void
*****************************************************/
void UartInt(void) interrupt 4
{
        if(TI)
        {
                TI = 0;       
                UartSendFlag = 1;               
        }
        if(RI)
        {
                RI = 0;       
                UartReceiveFlag = 1;
        }       
}


使用特权

评论回复
板凳
一路向北lm|  楼主 | 2020-3-24 20:49 | 只看该作者
/****************************************************************************/
Uart.h代码

#ifndef _UART_H
#define _UART_H
#include "H/SC95F861x_C.H"

void Uart_Init(unsigned int Freq,unsigned long int baud);
void Uart_Send_Byte(unsigned char byte);
void Uart_Send_String(unsigned char *str);
void Uart_Recv_Date(void);
#endif


使用特权

评论回复
地板
一路向北lm|  楼主 | 2020-3-24 20:50 | 只看该作者
//主函数
void main(void)
{
        IO_Init();
        Uart_Init(32,9600);
        Uart_Send_String("\r\n串口初始化¯..............OK!\n");
        while(1)
        {
                  Uart_Recv_Date();
        }

}


使用特权

评论回复
5
一路向北lm|  楼主 | 2020-3-24 20:50 | 只看该作者
实验效果如下,可实现对USART0的数据收发。

使用特权

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

本版积分规则

275

主题

3784

帖子

76

粉丝