?? 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 + -