📄 uart.c
字号:
/*************************************************/
/**************串行口控制********************/
/*************2003年1月24日*********************/
/************WROTE BY WANGSW********************/
/*
UART所需的定时器由T1或T2提供,而不是T0
SCON:串行口控制寄存器
SM0(9F),SM1(9E)
SM0,SM1|工作方式| 说明 |所用波特率
0,0 | 方式0 |同步移位寄存器| Fosc/12
0,1 | 方式1 | 10位异步收发 |由定时器控制
1,0 | 方式2 | 11位异步收发 |Fosc/32或Fosc/64
1,1 | 方式3 | 11位异步收发 |由定时器控制
SM2(9D) 多机通信0:单机,1:多机
REN(9C) 接收控制0:禁止接收,1:允许接收
TB8 (9B) 发送数据第九位
RB8 (9A) 接收数据第九位
TI (99) 发送中断标记
RI (98) 接收中断标志
*/
#include "reg52x2.h"
#include <stdlib.h>
#include <stdio.h>
#include "define.h"
#include "string.h"
#include "uart.h"
static void UartInterruptServer(void);
/******************************************************************************************
*函数名: UartInterruptServer
*参数: 无
*返回值: 无
*描述: 串口中断服务子程序
*编写: 王绍伟
*版本信息: V1.0 2003年8月15日
******************************************************************************************/
static void UartInterruptServer(void) interrupt 4
{
ES = 0;
RI = 0;
//msg_queue_in(MSG_KEY, SBUF); /*用串口模拟按键*/
msg_queue_in(MSG_UART,SBUF);
ES=1;
}
/******************************************************************************************
*函数名: uart_init
*参数: eBaudRate
*返回值: 无
*描述: 串口初始化程序,主要设定了波特率以及T1作为波特率产生
器的工作方式等,并且指定了串口数据以及命令存放堆栈
*编写: 王绍伟
*版本信息: V1.0 2003年8月15日
******************************************************************************************/
extern void uart_init(UartBaudrate eBaudRate)
{
ES = 0; /*关串行口中断*/
SETBIT(PCON, 7);
TMOD &= 0x0F;
TMOD |= 0x20;
ET1 = 0; /*中断无效*/
TH1 = eBaudRate;
TL1 = eBaudRate;
TR1 = 1; /*定时器开启*/
SCON = 0x50;
ES = 1; /*串行口中断printf需要串口关闭*/
}
extern void uart_send_byte(byte val)
{
bool bES;
bES = ES;
ES = 0;
SBUF = val;
while(!TI);
TI = 0;
ES = bES;
}
/******************************************************************************************
*函数名: uart_send_data
*参数: pData
*返回值: len
*描述: 以串口发送以pData为首地址,len长度的字节数据
*编写: 王绍伟
*版本信息: V1.0 2003年8月15日
******************************************************************************************/
extern void uart_send_string(byte* pData, byte len)
{
bool bES;
byte data i;
byte data j;
bES = ES; /*禁止串口产生中断,而以查询的方式发送数据*/
ES = 0;
if(len)
{
i = len;
while(i--)
{
SBUF = *pData++;
while(!TI);
TI = 0;
}
}
else
{
i = strlen(pData);
while(i--)
{
j = *pData++;
if(j == 0x0A)
{
SBUF = 0x0D;
while(!TI);
TI = 0;
}
SBUF = j;
while(!TI);
TI = 0;
}
}
ES = bES;
}
/******************************************************************************************
*函数名: uart_process
*参数: 无
*返回值: 无
*描述: 串口处理程序,
*编写: 王绍伟
*版本信息: V1.0 2003年8月15日
******************************************************************************************/
extern void uart_process(void)
{
/*
添加自己的代码
*/
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -