📄 uart.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 + -