?? uart.c
字號:
#ifndef __UART_C__
#define __UART_C__
#endif
#include "head.h"
#include <reg52.h>
#include <string.h>
#include "uart.h"
extern uint8 eaCount;
//-----------------------------------
// 串行口通訊子程序
// 串行口初始化
// 晶振22.0592M, SMOD=1, 使用6T, 波特率115200
//波特率=晶振頻率/(256-定時(shí)器計(jì)數(shù))/(一條指令的機(jī)器周期)
//-----------------------------------
void ComInit(void)
{
TMOD = 0x21; //T1為方式2, t0模式1
TH0=0x00; //定時(shí)器0用于定時(shí)
TL0=0x00;
TH1 = 0xFe; //
TL1 = 0xFe;
PCON = PCON | 0x80; //SMOD=1
SCON = 0x50; //串行口工作在方式3
TR0 = 1;
TR1 = 1;
ET0=1;
EA = 1;
}
// 發(fā)送數(shù)據(jù)
void SendChar(unsigned char buff)
{
SBUF = buff;
while( !TI );
TI=0;
}
//發(fā)送數(shù)組
void uartPut(uint8 dat[], uint8 len)
{
uint8 i;
ENTER_CRITICAL();
for(i=0; i<len; i++)
{
SendChar(dat[i]);
}
EXIT_CRITICAL();
}
//--------------------------------
//發(fā)送字符串
//--------------------------------
void uartPutStr(uint8 *str)
{
uint8 len;
len = strlen(str);
uartPut(str, len);
}
//------------------------------------------
//把bsd碼數(shù)據(jù)轉(zhuǎn)換成ascii碼的
//如:123轉(zhuǎn)換為 49(1) 50(2) 51(3)
//dat[]是2個(gè)字節(jié)的數(shù)組,存放16進(jìn)制返回?cái)?shù)據(jù)
//原始數(shù)據(jù)放到dat[0]
//-------------------------------------------
void bcdToAscii(uint8 dat[])
{
uint8 idata temp;
temp = dat[0];
dat[0] = (temp>>4);
if(0<=dat[0] && dat[0]<10) //數(shù)字0-9
{
dat[0] += 48; //轉(zhuǎn)換到數(shù)字對應(yīng)的ascii碼0(48)1(49)
}
else //數(shù)字10(a)-15(f)
{
dat[0] += 55; //轉(zhuǎn)換到數(shù)字對應(yīng)的ascii碼10(a)(65)
}
dat[1] = (temp&0x0f);
if(0<=dat[1] && dat[1]<10) //數(shù)字0-9
{
dat[1] += 48; //轉(zhuǎn)換到數(shù)字對應(yīng)的ascii碼0(48)1(49)
}
else //數(shù)字10(a)-15(f)
{
dat[1] += 55; //轉(zhuǎn)換到數(shù)字對應(yīng)的ascii碼10(a)(65)
}
}
//-----------------------------------------------
//發(fā)送數(shù)字, 一個(gè)數(shù)字由兩個(gè)ASCII碼組成, 為16進(jìn)制
//比如, 0xef發(fā)送為e和f兩個(gè)字符
//----------------------------------------------
void uartPutNum(uint8 *num, len)
{
uint16 idata n;
uint8 idata temp[2];
if(NULL!=num)
{
for(n=0; n<len; n++)
{
*(temp) = *(num+n);
bcdToAscii(temp);
uartPut(temp, 2);
}
}
}
//---------------------------------------------------------
//函數(shù)功能:
//打印字符串, 和一個(gè)已知長度的數(shù)字?jǐn)?shù)組
//參數(shù)說明:
//format 字符串, 在有%的地方打印數(shù)字
//num 數(shù)字?jǐn)?shù)組指針
//len 數(shù)字?jǐn)?shù)組長度
//---------------------------------------------------------
void uartPrint(const char *format, uint8 *num, uint8 len)
{
if(NULL!=format)
{
uint16 idata count, i;
i=strlen(format);
for(count=0; count<i; count++)
{
if('%'!=(*(format+count)))
{
uartPut(format+count, 1);
}
else
{
uartPutNum(num, len);
}
}
}
else
{
return;
}
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -