/*******************************************************************************************************
**版权信息: (C),2016~2018,Yuedong Tech. Co.,Ltd.
**文件名称: Uart.c
**作者: Jack wang
**版本: V0.1
**平台: STC89C52RC 外部晶振11.0592MHz
**日期: 2019.01.11
**描述: 串口配置与实现函数
**函数列表:
**1.void Uart_Init(unsigned char Baud_flag);
**2.void UartSendChar(unsigned char dat);
**3.void UartSendString(unsigned char *string);
**4.unsigned char CommRevHandle(unsigned char revlen);
**修改历史:
**1.日期:
** 作者:
** 修改:
********************************************************************************************************/
/*头文件引用列表*/
#include "Uart.h"
extern unsigned char bRevOver; //接收完成标志,需要在main函数中定义调用
extern unsigned char Uart_RevBuf[8]; //接收缓冲区,需要在main函数中定义调用
unsigned char count,temp,begin;
/*******************************************************************************
函数名:Uart_Init
功能: 串口初始化函数,采用的是11.0592MHz的晶振
输入: B2400 0x00
B4800 0x01
B9600 0x02
B19200 0xFE
输出: 无
*******************************************************************************/
void Uart_Init(unsigned char Baud_flag)
{
PCON &= 0x7F;
SCON = 0x50; //SCON: 模式1, 8-bit UART, 使能接收
TMOD &= 0x0F;
TMOD |= 0x20; //TMOD: timer 1, mode 2, 8-bit reload
switch(Baud_flag)
{
case 0x00: //2400 11.0592M:0xf3
TH1=0xf3;
TL1=0xf3;
break;
case 0x01: //4800 11.0592M:0xfa
TH1=0xf9;
TL1=0xf9;
break;
case 0x02: //9600 11.0592M:0xfd
TH1=0xfd;
TL1=0xfd;
break;
case 0x03: //19200 11.0592M:0xfe
TH1=0xfd;
TL1=0xfd;
break;
default: //默认为2400
TH1=0xf3;
TL1=0xf3;
break;
}
ET1 = 0;
TR1 = 1; //TR1: timer 1 run
ES = 1; //打开串口中断
EA = 1; //打开总中断
TI = 0;
RI = 0;
}
/*******************************************************************************
函数名:UartSendChar
功能: 串口发送字符函数
输入: 待发送的字符
输出: 无
*******************************************************************************/
void UartSendChar(unsigned char dat)
{
ES = 0; //禁止串行口中断
SBUF = dat; //将待发送数据送至SBUF
while(!TI); //等待发送结束,发送结束时TI = 1
TI = 0; //手动将TI清零
ES = 1; //允许串行口中断
}
/*******************************************************************************
函数名:UartSendString
功能: 串口发送字符串函数
输入: 待发送的字符串
输出: 无
*******************************************************************************/
void UartSendString(unsigned char *string)
{
while(*string!='\0') //判断发送的字符串是否结束,如果没有结束,则继续发送,否则就退出
{
UartSendChar(*string); //发送字符串中的一个字符
string++; //将字符串的地址增加,指向下一个字符
}
}
/*******************************************************************************
函数名:Uart_Interrupt
功能: 串口中断接收处理函数
输入: 无
输出: 无
*******************************************************************************/
void Uart_Interrupt() interrupt 4
{
if(RI)
{
RI=0;
temp = SBUF;
if((temp==0xAA)||(begin==1)) //如果是0xAA,则接下来的数据都是要接收的,如果begin是1也表示是要接收的
{
begin=1;
if(temp!=0xAA) //因为0x0A是标致位,所以我们是要丢弃的
{
if(temp!=0x55)
{
Uart_RevBuf[count]=temp;
count++;
}
else if(temp==0x55) //停止位
{
begin=0;
count=0;
bRevOver = 1;
}
}
}
}
}
/*******************************************************************************
函数名:Uart_Interrupt
功能: 串口中断接收处理函数
输入: 无
输出: 无
*******************************************************************************/
/*void Uart_Interrupt() interrupt 4
{
if(RI)
{
RI=0;
comm1.Rbuf[comm1.WP] = SBUF;
comm1.WP++;
if(comm1.WP >= COMBUFFLEN)
{
comm1.WP = 0;
}
}
}*/
/**************************************************
**函数名: CommRevHandle
**函数功能:单片机串口接收函数
**输入参数:无
**返回参数:接收数据成功返回1,否则返回0
**修改时间:
**备注:
***************************************************/
/*unsigned char CommRevHandle(unsigned char revlen)
{
unsigned char xdata buf[8];
unsigned int comlen = 0;
unsigned char BackCode = 0;
while(comm1.RP != comm1.WP)
{
//printf("\r\n comm1.RP = %d,comm1.WP = %d,comm1.Rbud[comm1.RP] = 0x%X\r\n",comm1.RP,comm1.WP,comm1.Rbuf[comm1.RP]);
buf[comlen] = comm1.Rbuf[comm1.RP];
comm1.RP++;
if(comm1.RP >= COMBUFFLEN)
{
comm1.RP = 0;
}
comlen++;
}
if(comlen > 0)
{
buf[comlen] = '\0';
BackCode = CommDataDeal(buf,comlen,revlen);
}
return BackCode;
}*/
/**************************************************
**函数名: CommDataDeal
**函数功能:单片机串口数据处理函数
**输入参数:接收的字节数
**返回参数:接收数据成功返回1,否则返回0
**修改时间:
**备注:
***************************************************/
/*unsigned char CommDataDeal(unsigned char *buff,unsigned int len,unsigned char revlen)
{
unsigned char i;
memcpy(commbuf + commbuf_len,buff,len);
commbuf_len += len;
WaitDelay();
if(commbuf_len >= revlen)
{
commbuf_len = 0;
if((commbuf[0]==0xAA)&&(commbuf[7]==0x55))
{
for(i=0;i<8;i++)
{
UartSendChar(commbuf[i]);
}
}
return 1;
}
else
{
return 0;
}
}*/
没有合适的资源?快使用搜索试试~ 我知道了~
基于单片机的火灾报警系统
共53个文件
pdsprj:13个
obj:6个
h:6个
需积分: 0 0 下载量 193 浏览量
2023-05-10
10:08:44
上传
评论
收藏 500KB ZIP 举报
温馨提示
基于单片机的火灾报警系统
资源推荐
资源详情
资源评论
收起资源包目录
基于单片机的火灾报警系统.zip (53个子文件)
程序
单片机程序
DHT11
Dht11.h 185B
Dht11.c 2KB
User
Lcd1602.lst 12KB
SignleKey.obj 4KB
Uart.lst 11KB
PCF8591.lst 9KB
main.OBJ 10KB
Dht11.lst 6KB
SignleKey.lst 3KB
main.M51 37KB
main.LST 7KB
main.uvgui.jack 70KB
main.uvproj 15KB
Dht11.obj 8KB
main.lnp 96B
Lcd1602.obj 14KB
main.uvopt 8KB
Uart.obj 7KB
main.uvgui.Administrator 72KB
main.build_log.htm 2KB
PCF8591.obj 11KB
main.hex 5KB
main 42KB
main.c 2KB
LCD1602
Lcd1602.h 2KB
Lcd1602.c 6KB
Uart
Uart.h 2KB
Uart.c 6KB
Pcf8591
PCF8591.h 233B
PCF8591.c 5KB
SignleKey
SignleKey.c 508B
SignleKey.h 249B
Common
Common.h 235B
仿真
Backup Of 仿真.pdsbak 27KB
仿真.pdsprj.WIN-80T9ADBGJGU.Administrator.workspace 3KB
仿真.pdsprj.WIN-TNBC0VD3RKA.Administrator.workspace 2KB
仿真.pdsprj.SH6L30V4NWUXMYQ.Administrator.workspace 3KB
Project Backups
仿真 [20230428, 20-01-18].pdsprj 27KB
仿真 [20221221, 17-05-21].pdsprj 27KB
仿真 [Proteus 8.9].pdsprj 27KB
仿真 [20230426, 16-54-40].pdsprj 27KB
仿真 [Autosaved].pdsprj 31KB
仿真 [20230428, 20-28-34].pdsprj 26KB
仿真 [20230428, 20-10-57].pdsprj 27KB
仿真 [20221221, 16-32-59].pdsprj 27KB
仿真 [20230116, 22-32-14].pdsprj 27KB
仿真 [20230428, 20-29-33].pdsprj 31KB
仿真 [20221210, 10-12-00].pdsprj 27KB
仿真 [20230426, 16-54-39].pdsprj 27KB
仿真.pdsprj.WIN-MLDT4IKVOMI.Administrator.workspace 4KB
仿真.pdsprj 30KB
仿真.pdsprj.WIN-A9U4CK34LIM.jack.workspace 2KB
Last Loaded 仿真.pdsbak 25KB
共 53 条
- 1
资源评论
qq_57821905
- 粉丝: 0
- 资源: 1
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功