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

📄 uart.c

📁 SD卡-SDHC卡扇区读写测试
💻 C
字号:
#include <reg51.h>
#include <string.h>
#include "uart.h"
#include "myfun.h"

/*******************************************************

        +-----------------------------------------+
        |振南电子    原创程序模块   STC51串口操作 |
        +-----------------------------------------+

  此源码版权属 振南 全权享有,如欲引用,敬请署名并告知
        严禁随意用于商业目的,违者必究,后果自负
         振南电子 
             ->产品网站 http://www.znmcu.cn/
             ->产品论坛 http://bbs.znmcu.cn/
             ->产品网店 http://shop.znmcu.cn/
             ->产品咨询 QQ:987582714 MSN:yzn07@126.com
	                WW:yzn07			  
********************************************************/

/**************************************************************************
 - 功能描述:51单片机的串口初始化
 - 隶属模块:STC51串口操作
 - 函数属性:外部,使用户使用
 - 参数说明:无
 - 返回说明:无
 - 注:振南的很多产品均采用串口来进行操作,所以正确的初始化串口十分重要
 **************************************************************************/

void UART_Init()     
{
 PCON|=0x80; //PCON的最高位SMOD=1时波特率加倍 
 TMOD=0x20;  //时器1为方式2 初值自动装入 产生波特率
 TH1=0xfd;   //定时器初始为0XFd,晶振为22.1184MHz,本函数实际产生的波特率为38400bps
 TL1=0xfd;	 //同上   
 SCON=0x50;	 //串口设置为方式1,REN=1,允许接收
 TR1=1;      //启动定时器1
 ES=1;       //使能串口接收中断,
 EA=1;       //打开所有中断
}

/**************************************************************************
 - 功能描述:51单片机的串口中断处理函数
 - 隶属模块:STC51串口操作
 - 函数属性:外部,使用户使用(在此中断函数中常用来处理从串口收到的数据)
 - 参数说明:无
 - 返回说明:无
 - 注:振南的很多产品,都是配合“超级终端”来进行演示的,在“超级终端”中
       敲入的命令就是从计算机的串口发出,由单片机从串口接收,接收到的串口
	   数据就在此中断函数中进行处理,完成命令接收及处理、命令解析等工作。
 **************************************************************************/

void sio_int() interrupt 4 using 3   //串口中断函数
{
 ES=0;
  //串口中断处理
  /*
 if(RI)
 {
  if(SBUF!=0x08)  //如果接收到的是退格(ASCII码为0x08)
   cmd_buf[counter++]=SBUF;
  else
   counter--;
  RI=0;
 }
 if(SBUF==0x0d)
 {
  cmd_buf[counter-1]=0;
  counter=0;
  flag=1;
 }
 */
 ES=1;
}

/**************************************************************************
 - 功能描述:51单片机的串口发送字节的函数
 - 隶属模块:STC51串口操作
 - 函数属性:外部,使用户使用
 - 参数说明:mydata:要发送的一个字节
 - 返回说明:无
 - 注:发送一个字节,是串口发送的基础操作
 **************************************************************************/

void UART_Send_Byte(unsigned char mydata)	
{
 ES=0;
 TI=0;
 SBUF=mydata;
 while(!TI);
 TI=0;
 ES=1;
}

/**************************************************************************
 - 功能描述:51单片机的串口发送0d 0a ,即回车换行
 - 隶属模块:STC51串口操作
 - 函数属性:外部,使用户使用
 - 参数说明:无
 - 返回说明:无
 - 注:此函数就是发送0d 0a这两个字节,在“超级终端”上会有回车换行的效果
 **************************************************************************/

void UART_Send_Enter()
{
 UART_Send_Byte(0x0d);
 UART_Send_Byte(0x0a);
}

/**************************************************************************
 - 功能描述:51单片机的串口发送字符串
 - 隶属模块:STC51串口操作
 - 函数属性:外部,使用户使用
 - 参数说明:s:指向字符串的指针
 - 返回说明:无
 - 注:如果在字符串中有'\n',则会发送一个回车换行
 **************************************************************************/

void UART_Send_Str(char *s)
{
 int len=strlen(s)-1;
 int i;
 for(i=0;i<len;i++)
 UART_Send_Byte(s[i]);
 if(s[i]=='\n') 
 {
  UART_Send_Enter();
 }
 else
 {
  UART_Send_Byte(s[i]);
 }
}

/**************************************************************************
 - 功能描述:51单片机的串口发送数值
 - 隶属模块:STC51串口操作
 - 函数属性:外部,使用户使用
 - 参数说明:dat:要发送的数值
 - 返回说明:无
 - 注:函数中会将数值转为相应的字符串,发送出去。比如 4567 转为 "4567" 
 **************************************************************************/

void UART_Put_Num(unsigned long dat)
{
 char temp[20];
 u32tostr(dat,temp);
 UART_Send_Str(temp);
}

/**************************************************************************
 - 功能描述:51单片机的串口发送调试信息
 - 隶属模块:STC51串口操作
 - 函数属性:外部,使用户使用
 - 参数说明:inf:指向提示信息字符串的指针
             dat:一个数值,前面的提示信息就是在说明这个数值的意义
 - 返回说明:无
 - 注:此函数在振南的工程中会经常看到,是方便调试用的
 **************************************************************************/

void UART_Put_Inf(char *inf,unsigned long dat)
{
 UART_Send_Str(inf);
 UART_Put_Num(dat);
 UART_Send_Str("\n");  
}

/*
void binary(unsigned char dat)
{
 unsigned char i;
 unsigned char a[17];
 for(i=0;i<8;i++)
 {
  a[i]=((dat<<i)&0x80)?'o':' ';
 }
 a[i]=0;
 for(i=0;i<strlen(a);i++)
 {
  UART_Send_Byte(a[i]);
  UART_Send_Byte(' ');
 }
}
*/

⌨️ 快捷键说明

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