⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.c

📁 用isis构建的一个简单的仿真平台
💻 C
字号:
#include "mega128.h"
#include "delay.h"
#include "uart.h"

#define RXEN0   4
#define TXEN0   3
#define UCSZ01  2
#define UCSZ00  1
#define UCPOL0  0


////#ifdef Fosc
#define Fosc 4000000
//#endif

/*********************************************************
*
*函 数 名:uart_init
*
*函数功能:初始化串口0
*
*输入参数:bps :待设定的波特率
*
*返 回 值:无
*
*********************************************************/
char uart_init(unsigned int bps,unsigned char stop,unsigned char len)
{
    unsigned long int ubps;
    ubps=Fosc/16.0/bps-1;                   //计算波特率
    UBRR0L=ubps%256;
    UBRR0H=ubps/256;
    
    UCSR0A=0;
    UCSR0B=0;
    UCSR0C=0;
    
    UCSR0B|=0x18;                            //发送接收使能
    
    if(len>9||len<5)                         //设置数据位长度
    {
        return -1;
    }
    else if(len==9)
    {
        UCSR0B|=1<<2;
        UCSR0C|=3<<1;
    }
    else
    {
        UCSR0B=~(1<<2);
        UCSR0C|=(len-5)<<1;
    }
    

    if(stop>2||stop==0)                     //设置停止位
    {
        return -1;
    }
    else if(stop==2)
    {
        UCSR0C|=1<<3;
    }
    else 
    {
        UCSR0C&=~(1<<3);
    }
}

/*********************************************************
*
*函 数 名:uart_send_byte
*
*函数功能:通过串口发送一个数据
*
*输入参数:date : 待发送的数据
*
*返 回 值:无
*
*********************************************************/
void uart_send_byte(unsigned char date)
{
    while(!(UCSR0A&0x20));
    UDR0=date;
}

/*********************************************************
*
*函 数 名:uart_send_nbyte
*
*函数功能:通过串口发送多个数据
*
*输入参数:*buf : 指向待发送的数据指针
*          len  :要发送的字节数
*
*返 回 值:无
*
*********************************************************/
void uart_send_nbyte(unsigned char *buf,unsigned char len)
{
   unsigned char i;
   for(i=0;i<len;i++)
   {
        uart_send_byte(*buf++);
   }
}


/*********************************************************
*
*函 数 名:uart_rev_byte
*
*函数功能:通过串口接收一个数据
*
*输入参数:无
*
*返 回 值:接收到的数据
*
*********************************************************/
char uart_rev_byte(void)
{
    while(!(UCSR0A&0x80));
    
    return UDR0;
}

/*********************************************************
*
*函 数 名:uart_rev_nbyte
*
*函数功能:通过串口接收多个数据
*
*输入参数:无
*
*返 回 值:接收到的数据
*
*********************************************************/
char uart_rev_nbyte(unsigned char *buf,unsigned char len)
{
   unsigned char i;
   char j;
   for(i=0;i<len;i++)
   {
        j=uart_rev_byte();
        if(j>=0)
        {
            *buf++=j;
        }
        else 
        {
            return -1;
        }
   }
   
   return 0;
}



void main(void)
{
     unsigned char c,x[20];
     uart_init(19200,1,8);
     while(1)
     {
       uart_send_byte('x');  
       
       c=(unsigned char)uart_rev_byte();
       uart_rev_nbyte(x,5);
       uart_send_nbyte(x,5);
      
     }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -