-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathuart.c
82 lines (78 loc) · 2.54 KB
/
uart.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
#include "stc15f204ea.h"
#include "typedef.h"
#include "gpio.h"
#include "uart.h"
static bit bUartFlag;
/******************************************************************************/
// 函数名称:uartInit
// 输入参数:无
// 输出参数:无
// 函数功能:设置好定时器0的工作模式
/******************************************************************************/
void uartInit(void)
{
/*
* 设置定时器0为16位自动重载定时器
*/
AUXR |= 0x80; //定时器0为1T模式
TMOD &= 0xF0; //设置定时器为模式0(16位自动重装载)
TL0 = (0xFFFF - MCU_FREQ / UART_BUAD) & 0xFF; //设置定时初值
TH0 = ((0xFFFF - MCU_FREQ / UART_BUAD) >> 8) & 0xFF; //设置定时初值
TR0 = 0; //定时器0开始计时
ET0 = 0; //使能定时器0中断
EA = 1;
}
/******************************************************************************/
// 函数名称:uartSendData
// 输入参数:ucData: 发送字节
// 输出参数:无
// 函数功能:使用串口发送一个字节数据
/******************************************************************************/
void uartSendData(u8 ucData)
{
u8 ucCnt;
UART_TX_LOW(); //串口起始位开始
TR0 = 1; //定时器0开始计时
ET0 = 1; //使能定时器0中断
bUartFlag = ON;
while(bUartFlag == ON);
/*
* 由低位开始,将数据通过串口输出
*/
for (ucCnt = 0; ucCnt < 8; ucCnt++) {
UART_TX_SET(ucData & 0x01);
ucData >>= 1;
bUartFlag = ON;
while(bUartFlag == ON);
}
UART_TX_HIGH(); // 发送串口停止位
bUartFlag = ON;
while(bUartFlag == ON);
TR0 = 0; //定时器0结束计时
ET0 = 0; //禁能定时器0中断
}
/******************************************************************************/
// 函数名称:uartSendString
// 输入参数:pS: 字符串首地址
// 输出参数:无
// 函数功能:发送字符串通过串口输出
/******************************************************************************/
void uartSendString(char *pS)
{
while (*pS) //检测字符串结束标志
{
uartSendData(*pS++); //发送当前字符
}
}
/******************************************************************************/
// 函数名称:time0ISR
// 输入参数:无
// 输出参数:无
// 函数功能:串口0服务函数
/******************************************************************************/
void time0ISR(void) interrupt 1 using 1
{
EA = 0;
bUartFlag = OFF;
EA = 1;
}