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

📄 uart.c

📁 看看ARM菜鸟在ARM7上写的操作系统——ARM圈圈操作系统 最近在ADuC7027上写了一个ARM_00_OS
💻 C
字号:
/**********************************************************************
  UART.c file
  ADuC7027的串口函数
  作者:Computer-lov
  建立日期:2006-3-22
  修改日期:2006-5-11
  版本:V1.0
  版权所有,盗版必究。
  Copyright(C) Computer-lov 2006-2016
  All rights reserved
**********************************************************************/

#include <ADuC7027.H>
#include "My_type.h"
#include "UART.H"

//////////////////////////////////////////////////////////////////////
void UART_init(void)
{  
 GP1CON=0x00000011;	//P1.0 P1.1设置为串口功能

 COMIEN0=0x00;   //禁止所有串口中断

#define BitRate 57600

#if (BitRate==19200) || (BitRate==9600)
 COMCON0=0x83;   //1 stop bit,8 data bits  最高位置1,寻址COMDIV1寄存器
 COMDIV1=0x00;
 COMDIV2=0x0000;
#if BitRate==19200
 COMDIV0=0x44;   //19200 bps
#else
 COMDIV0=0x88;  //9600bps                  
#endif
 COMCON0=0x03;	 //最高位置0,寻址COMTX寄存器。
                 //因为COMTX寄存器跟COMDIV1寄存器共用一个地址,由COMCON0的最高位选择
#endif

#if BitRate==57600

 COMCON0=0x83;   //1 stop bit,8 data bits  最高位置1,寻址COMDIV1寄存器
 COMDIV1=0x00;
 COMDIV2=0x426+(2<<11)+0x8000;   //M=2,N=0x642
 COMDIV0=0x09;
 COMCON0=0x03;	 //最高位置0,寻址COMTX寄存器。
                 //因为COMTX寄存器跟COMDIV1寄存器共用一个地址,由COMCON0的最高位选择 
#endif
}
//////////////////////////////////////////////////////////////////////

//////////////////////////////////////////////////////////////////////
void send_a_byte(uint8 a_byte)
{
 while(!(COMSTA0 & 0x40));  //等待发送完毕
 COMTX=a_byte;
}
//////////////////////////////////////////////////////////////////////

////////////////////////////// 发送一个字符串 ///////////////////////////////////////////
//////////////////入口参数: s-要发送的字符串的指针(字符串长度不得大于255)/////////////
/////////////////////////////////////    newline-是否需要换行  0-不换行  非0-换行////////
void prints(uint8 * s,uint32 newline)
{
 unsigned char i;
 i=0;
 while(s[i]!=0)    //判断字符串是否结束
  {
   while(!(COMSTA0 & 0x40));  //等待发送完毕
   COMTX=s[i];
   i++;            //移到下字节
  }
 if(newline)       //如果需要换行
  {
   send_a_byte(13);
   send_a_byte(10);   //发送回车换行
  }
}
////////////////////////////////////////////////////////////////////////////////////////////

/////////////////////////////////////////////////////////////////////////////////
void cls(void)
{
 send_a_byte(0x0C);	  //超级终端清屏指令
 send_a_byte(0x0C);
}
//////////////////////////////////////////////////////////////////////////////////


//转换成十六进制时用的表
const uint8 HEX_TABLE[16]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};

//////////////////////////将一个16位的整数按十六进制发到串口/////////////////////////////////
void print_uint16(uint16 number)
{
 send_a_byte('0');				//发送0x
 send_a_byte('x');
 send_a_byte(HEX_TABLE[(number>>12) & 0x0F]);  //依次发送各部分
 send_a_byte(HEX_TABLE[(number>>8)  & 0x0F]);
 send_a_byte(HEX_TABLE[(number>>4)  & 0x0F]);
 send_a_byte(HEX_TABLE[(number)     & 0x0F]);
 send_a_byte(' ');
}
//////////////////////////////////////////////////////////////////////////////////

/////////////////////////将一个32位的整数按十进制发送到串口/////////////////////////////
void print_uint32(uint32 number)
{
 uint8 buf[12];
 uint32 i;
 
 for(i=0;i<10;i++)   //转换成字符串
  {
   buf[9-i]=(number%10)+'0';
   number/=10;
  }
 for(i=0;i<9;i++)    //将前面的0转换成空格
  {
   if(buf[i]=='0')
    {
     buf[i]=' ';
    }
   else
    {
     break;
    }
  }
 buf[10]=' ';
 buf[11]=0;       //字符串结束符
 prints(buf,0);
}
//////////////////////////////////////////////////////////////////////////////////////////

⌨️ 快捷键说明

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