#include "includes.h"
#include <string.h>
#include "2uart.h"
#include "myfun.h"
#include "malloc.h"
#include "stdio.h"
/***************************串口1初始化函数**********************/
/*函数原型:char UART1Init(char smod,char brtx12,unsigned char reload)
/*函数功能:串口1初始化
/*输入参数: smod smod位 0/1
brtx12 brtx12位 0/1
reload reload寄存器数值 0-255
/*输出参数: -1 smod位错误,没有写入0/1
-2 brtx12位错误,没有写入0/1
0
/*备注:串口设置位独立波特率提供波特率,和串口2使用同一个波特率,也可以使用定时器1来提供波特率
(!!!!!!!!!!!!!晶振为11.0592M!!!!!!!!!!!!!!!!!!!!)
// UART1_Init(0,0,232);//初始化串口,设置波特率1200
// UART1_Init(0,1,184);//初始化串口,设置波特率4800 b8
// UART1_Init(0,1,220);//初始化串口,设置波特率9600 dc
// UART1_Init(0,1,232);//初始化串口,设置波特率14400 e8
// UART1_Init(0,1,247);//初始化串口,设置波特率38400 f7
// UART1_Init(0,1,250);//初始化串口,设置波特率57600 fa
UART1_Init(0,1,253);//初始化串口,设置波特率115200 fd-----有乱码!!估计22.1184可能有所改善……
(!!!!!!!!!!!!!晶振为11.0592M!!!!!!!!!!!!!!!!!!!!)
// UART2_Init(0,0,232);//初始化串口,设置波特率1200
// UART2_Init(0,1,184);//初始化串口,设置波特率4800 b8
// UART2_Init(0,1,220);//初始化串口,设置波特率9600 dc
// UART2_Init(0,1,232);//初始化串口,设置波特率14400 e8
// UART2_Init(0,1,247);//初始化串口,设置波特率38400 f7
// UART2_Init(0,1,250);//初始化串口,设置波特率57600 fa
UART2_Init(0,1,253);//初始化串口,设置波特率115200 fd-----有乱码!!估计22.1184可能有所改善……
/********************************************************************/
char UART1_Init(char smod,char brtx12,unsigned char reload)
{
SCON = 0X50;//8位可变波特率,无奇偶位(SM0=0,SM1=1),使能串口接收模块(REN=1)
BRT = reload;//设置独立波特率发生器波特率
if(smod == 1)
{
PCON |= SMOD; //SMOD = 1;//波特率倍速位
}
else if(smod == 0)
{
PCON &= (~SMOD); //SMOD = 0;//取消波特率倍速位
}
else
{
return -1;
}
if(brtx12 == 1)
{
AUXR |= BRTx12;//BRTx12 = 1;1T模式
}
else if(brtx12 == 0)
{
AUXR &= (~BRTx12);//BRTx12 = 0;12T模式
}
else
{
return -2;
}
AUXR |= S1BRS;//串口1设置为使用独立波特率发生器
AUXR |= BRTR;//开启波特率发生器
//设置串口1中断优先级
if (UART1_PRIO & 0x02)
{
IPH |= PSH;
}
else
{
IPH &= ~PSH;
}
if (UART1_PRIO & 0x01)
{
PS = 1;
}
else
{
PS = 0;
}
ES = 1; //开串口中断
EA = 1; //开总中断
return 0;
}
/***************************串口1发送函数**********************/
/*函数原型:void UART1SendHex(char i)
/*函数功能:串口1发送函数
/*函数功能:串口1发送函数,发送单一数据
/*输入参数:数据
/*输出参数:无
/**************************************************************/
void UART1_SendHex(char i)
{
TI = 0; //清空发送完中断请求标志位
SBUF = i; //将数据放入寄存器发送
while(TI == 0);//等待发送完毕,发送完毕 TI == 1
TI = 0; //清空发送完中断请求标志位
}
/**************************************************************************
- 功能描述:51单片机的串口发送0d 0a ,即回车换行
- 隶属模块:STC51串口操作
- 函数属性:外部,使用户使用
- 参数说明:无
- 返回说明:无
- 注:此函数就是发送0d 0a这两个字节,在“超级终端”上会有回车换行的效果
**************************************************************************/
void UART1_Send_Enter()
{
UART1_SendHex(0x0d);
UART1_SendHex(0x0a);
}
/***************************串口1发送字符串函数**********************/
/*函数原型:void UART1SendStr(char* data_at)
/*函数功能:串口1发送函数,发送字符串
/*输入参数:字符串指针
/*输出参数:无
/********************************************************************/
void UART1_SendStr(char* at)
{
unsigned char cnt=0;
ET0=0;//关闭定时器0
while(*(at+cnt)) //判断一串数据是否结束
{
SBUF=*(at+cnt); //发送数据
while(TI==0); //查询发送是否结束
TI=0; //清除发送一标志位
cnt++; //准备发送一个数据
}
ET0=1;//打开定时器0
}
void UART1_Put_Num(unsigned long dat)
{
u16 res;
u8 *buf;
res=mem_malloc(32);
if(res==0xffff)
{
UART1_SendStr("malloc failed!!!\r\n");
}
else
buf=&mem1base[res];
u32tostr(dat,buf);
UART1_SendStr(buf);
mem_free(res);
}
void Hex2Str_16b(unsigned int hex,char *str)
{
unsigned char temp=0;
temp=((hex&0xf000)>>12);
str[0]=(temp>=10)?(temp-10+'A'):(temp+0x30);
temp=((hex&0x0f00)>>8);
str[1]=(temp>=10)?(temp-10+'A'):(temp+0x30);
temp=((hex&0x00f0)>>4);
str[2]=(temp>=10)?(temp-10+'A'):(temp+0x30);
temp=((hex&0x000f)>>0);
str[3]=(temp>=10)?(temp-10+'A'):(temp+0x30);
str[4]=0;
}
void UART1_Put_Hex(unsigned int hex)
{
u16 res;
u8 *buf;
res=mem_malloc(32);
if(res==0xffff)
{
UART1_SendStr("malloc failed!!!\r\n");
}
else
buf=&mem1base[res];
Hex2Str_16b(hex,buf);
UART1_SendStr(buf);
mem_free(res);
}
void UART1_Put_Inf(char *inf,unsigned long dat)
{
UART1_SendStr(inf);
UART1_Put_Num(dat);
UART1_SendStr("\n");
}
void UART1_binary(unsigned char dat)
{
unsigned char i;
unsigned char a[17];
for(i=0;i<8;i++)
{
a[i]=((dat<<i)&0x80)?'o':' ';
}
a[i]=0;
for(i=0;i<strlen(a);i++)
{
UART1_SendHex(a[i]);
UART1_SendHex(' ');
}
}
/***************************串口2初始化函数函数*****************************/
/*函数原型:char UART2Init(char smod,char brtx12,unsigned char reload)
/*函数功能:初始化用于连接gprs的串口2 ,串口2只能设置为独立波特率提供波特率
并打开串口2中断和全局中断
/*输入参数: smod s2smod位 0/1
brtx12 brtx12位 0/1
reload reload寄存器数值 0-255
/*输出参数: -1 s2smod位错误,没有写入0/1
-2 brtx12位错误,没有写入0/1
0
/********************************************************************/
char UART2_Init(char s2smod,char brtx12,unsigned char reload)
{
S2CON = 0X50;//8位可变波特率,无奇偶位
BRT = reload;//设置独立波特率发生器波特率
if(s2smod == 1)
{
AUXR |= S2SMOD; //S2SMOD = 1;//波特率倍速位
}
else if(s2smod == 0)
{
AUXR &= (~S2SMOD); //S2SMOD = 0;//取消波特率倍速位
}
else
{
return -1;
}
if(brtx12 == 1)
{
AUXR |= BRTx12;//BRTx12 = 1;1T模式
}
else if(brtx12 == 0)
{
AUXR &= (~BRTx12);//BRTx12 = 0;12T模式
}
else
{
return -2;
}
AUXR |= BRTR;//开启波特率发生器
//设置串口2中断优先级
IP2H |= PS2H; //设置串口2优先级为3(最高)
IP2 |= PS2;
if (UART2_PRIO & 0x02)
{
IP2H |= PS2H;
}
else
{
IP2H &= ~PS2H;
}
if (UART2_PRIO & 0x01)
{
IP2 |= PS2;
}
else
{
IP2 &= ~PS2;
}
IE2 |= ES2;// ES2 = 1; //允许串口2中断
EA = 1; //开总中断
return 0;
}
/***************************串口2发送函数函数************************/
/*函数原型:void Serial_Init(void)
/*函数功能:串口2发送函数,发送单一数据
/*输入参数:数据
/*输出参数:无
/********************************************************************/
void UART2_SendHex(uchar i)
{
S2BUF = i;//装入数据
while((S2CON & S2TI) == 0);
S2CON &= (~S2TI);//S2TI = 0;
}
/**************************************************************************
- 功能描述:51单片机的串口发送0d 0a ,即回车换行
- 隶属模块:STC51串口操作
- 函数属性:外部,使用户使用
- 参数说明:无
- 返回说明:无
- 注:此函数就是发送0d 0a这两个字节,在“超级终端”上会有回车换行的效果
**************************************************************************/
void UART2_Send_Enter()
{
UART2_SendHex(0x0d);
UART2_SendHex(0x0a);
}
/***************************串口2发送字符串函数**********************/
/*函数原型:void UART2SendStr(char* data_at)
/*函数功能:串口2发送函数,发送字符串
/*输入参数:字符串指针
/*输出参数:无
/********************************************************************/
void UART2_SendStr(char* data_at)
{
unsigned char cnt=0;
ET0=0;//关闭定时器0
while(*(data_at+cnt)) //判断一串数据是否结束
{
S2BU
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
STC12C5A60S2模板_V2.0.rar (20个子文件)
STC12C5A60S2模板_V2.0
MALLOC
malloc.c 3KB
malloc.h 739B
keilkilll.bat 414B
UART
uart.c 5KB
2uart.c 10KB
myfun.c 3KB
2uart.H 1KB
myfun.h 477B
HARDWARE
EEPROM.h 265B
EEPROM.c 3KB
spi.h 231B
spi.c 2KB
OBJ
STC12C5A_Model.hex 6KB
STC12C5A_MODEL 122KB
USER
STC12C5A60s2.h 45KB
STC12C5A_MODEL.uvgui.Administrator 66KB
STC12C5A_MODEL.uvproj 14KB
STC12C5A_MODEL.uvopt 8KB
includes.h 1KB
main.c 1KB
共 20 条
- 1
资源评论
- treesss2014-07-15蛮有用的,虽然和我的格式不太一样,但是值得参考
- syf2015-03-14可以借鉴,不错
- qqKKKKKK2013-09-05总的来说模板还是很有用的,有很多地方可以借鉴
- cltx12013-10-09很不错的程序!
- labview-mcu2013-11-27值得借鉴的好东西。
PlainJi
- 粉丝: 34
- 资源: 19
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功