//******************************************************************《人人学会单片机》视频教程,祁绪电子2021-10
//串口接收32个字符
//如果需要软件自动复位,根据型号选择IAP_CONTR或者ISP_CONTR/*
//******************************************************************《人人学会单片机》视频教程,祁绪电子2021-10
#include "all.H" //调用我们自己写的头文件
u8 code Uart1_Up_Symbol_Buffer1[Up_MAX]={"\r\n请发送1~32个字符"};
u8 code Uart1_Up_Symbol_Buffer2[Up_MAX]={"\r\n超过\xfd最大字符数\xfd量"};//“过”、“数”两字加\xfd,详情《WQX-15开发板 ASCII与GB2312汉字码表.xlsx》
u8 idata Uart1_Up_Buffer[Up_MAX]; //串口的发送缓存,Up_MAX为最多发送数量
u8 idata Uart1_Down_Buffer[Down_MAX]; //串口的接收缓存,Down_MAX为最多发送数量
bit Uart1_Flag=0; //这个标志位写1 就开始打印到串口助手
u8 idata Down_Count=0; //一帧数据包字节的位置
u8 idata Uart_Timer=0; //串口接收定时器,用于判断是上一帧的数据,还是下一帧的帧头
//*********************************《人人学会单片机》视频教程,祁绪电子2021-10
//串口初始化,根据设计需要,波特率来源选择:定时器1、定时器2、BRT独立波特率,以下配置都是12分频。
//并且,以下 AAA、BBB、CCC、DDD、EEE 五段代码,需要选择一个,屏蔽四个
//*********************************《人人学会单片机》视频教程,祁绪电子2021-10
void Uart1_Init()
{
u8 i;
for(i=0;i<Down_MAX;i++)
{
Uart1_Down_Buffer[i]=' '; //清除串口接收缓存数组(LCD1602液晶没有空字符,所以改成空格)
}
for(i=0;i<Up_MAX;i++)
{
Uart1_Up_Buffer[i]=0; //清除串口发送缓存数组 \0
}
//--------------------------------------以下代码AAA,适合STC89/STC12/STC15/STC8--------------------------------------------------------------------
/*
PCON&=0x7F; //串口打印-第3步:定时器T1(8位自装),STC89/STC12/STC15/STC8,波特率不倍速
AUXR&=0xBF; //串口打印-第3步:定时器T1(8位自装),STC89/STC12/STC15/STC8,定时器时钟12T模式
AUXR&=0xFE; //串口打印-第3步:定时器T1(8位自装),STC89/STC12/STC15/STC8,串口1选择定时器1为波特率发生器
TMOD&=0x0F; //串口打印-第3步:定时器T1(8位自装),STC89/STC12/STC15/STC8,设置定时器模式8位自动重装
TMOD|=0x20; //串口打印-第3步:定时器T1(8位自装),STC89/STC12/STC15/STC8,设置定时器模式
TL1=(256-FOSC/9600/32/12); //串口打印-第3步:定时器T1(8位自装),STC89/STC12/STC15/STC8,设置定时初始值
TH1=(256-FOSC/9600/32/12); //串口打印-第3步:定时器T1(8位自装),STC89/STC12/STC15/STC8,设置定时自动重/*
ET1=0; //串口打印-第3步:定时器T1(8位自装),STC89/STC12/STC15/STC8,不需要定时器1的中断
TR1=1;//*/ //串口打印-第3步:定时器T1(8位自装),STC89/STC12/STC15,定时器1开始计时
//--------------------------------------以下代码BBB,适合STC15/STC8,不能用于STC12/STC89。--------------------------------------------------------------------
/*
AUXR&=0xBF; //串口打印-第3步:定时器T1(16位自装),STC15/STC8,定时器时钟12T模式
AUXR&=0xFE; //串口打印-第3步:定时器T1(16位自装),STC15/STC8,串口1选择定时器1为波特率发生器
TMOD&=0x0F; //串口打印-第3步:定时器T1(16位自装),STC15/STC8,设置定时器模式16位自动重装
TL1=(65536-FOSC/9600/4/12); //串口打印-第3步:定时器T1(16位自装),STC15/STC8,设置定时初始值
TH1=(65536-FOSC/9600/4/12)>>8; //串口打印-第3步:定时器T1(16位自装),STC15/STC8,设置定时初始值
ET1=0; //串口打印-第3步:定时器T1(16位自装),STC15/STC8,不需要定时器1的中断
TR1=1;//*/ //串口打印-第3步:定时器T1(16位自装),STC15/STC8,定时器1开始计时
//--------------------------------------以下代码CCC,适合STC89,不能用于STC12/STC15/STC8。--------------------------------------------------------------------
/*
RCAP2L=(65536-FOSC/9600/32); //串口打印-第3步:定时器T2(做BRT独立波特率发生器用 16位),STC89,
RCAP2H=(65536-FOSC/9600/32)>>8; //串口打印-第3步:定时器T2(做BRT独立波特率发生器用 16位),STC89,
T2CON=0x34;//*/ //串口打印-第3步:定时器T2(做BRT独立波特率发生器用 16位),STC89,RCLK=1、TCLK=1、启动T2定时器TR2=1。
//--------------------------------------以下代码DDD,适合STC12,不能用于STC89/STC15/STC8。--------------------------------------------------------------------
/*
PCON&=0x7F; //串口打印-第3步:独立波特率发生器,STC12,波特率不倍速
AUXR&=0xFB; //串口打印-第3步:独立波特率发生器,STC12,定时器时钟12T模式
BRT=(256-FOSC/9600/32/12); //串口打印-第3步:独立波特率发生器,STC12,设置定时重载值
AUXR|=0x01; //串口打印-第3步:独立波特率发生器,STC12,串口1使用独立波特率发射器为波特率发生器
AUXR|=0x10;//*/ //串口打印-第3步:独立波特率发生器,STC12,启动独立波特率发射器
//--------------------------------------以下代码EEE,适合STC15/STC8,不能用于STC12/STC89。
AUXR |= 0x01; //串口打印-第3步:定时器T2(16位自装),STC15/STC8,串口1选择定时器2为波特率发生器
AUXR &= 0xFB; //串口打印-第3步:定时器T2(16位自装),STC15/STC8,定时器2时钟为Fosc/12,即12T
T2L=(65536-FOSC/9600/4/12); //串口打印-第3步:定时器T2(16位自装),STC15/STC8,设置定时初始值
T2H=(65536-FOSC/9600/4/12)>>8; //串口打印-第3步:定时器T2(16位自装),STC15/STC8,设置定时初始值
AUXR |= 0x10;//*/ //串口打印-第3步:定时器T2(16位自装),STC15/STC8,启动定时器2
//----------------------------------------------------------------------------------------------------------------------------------------
//以下代码,这三行是必须的。
SCON|=0x50; //8位数据,可变波特率。
ES = 1; //串口1中断闸刀闭合,向CPU申请中断。
EA=1; //总中断闸刀闭合导通。
}
//*********************************《人人学会单片机》视频教程,祁绪电子2021-10
//串口发送函数。主函数调用,或者串口发送完中断后马上调用
//*********************************《人人学会单片机》视频教程,祁绪电子2021-10
void Uart1_Up_Data_Drive()
{
static u8 xdata count=0;
if(Uart1_Flag) //标志允许,发送一个字节
{
Uart1_Flag=0; //标志位翻转,只允许发送一个字节,避免拥挤
if(count<Up_MAX)
{
SBUF=Uart1_Up_Buffer[count];//每次只发送一个字节
Uart1_Up_Buffer[count]=0; //缓存清除
count++; //字节编号增加。
}
else
{
Uart1_Flag=0; //大于最多发送数量,不发送了
count=0; //串口TI不会置1,所以不再发送
}
}
}
//*********************************《人人学会单片机》视频教程,祁绪电子2021-10
//串口中断,接收一个字节,马上发送N个字节,发送数组显示到电脑
//*********************************《人人学会单片机》视频教程,祁绪电子2021-10
void Uart1_Routine() interrupt 4
{
u8 i;
static u8 Uart1_ser_n=0; //用于接收计数
if(RI) //如果接收到一个字节
{
RI=0; //标志位清除
//Uart1_Flag=1; //串口发送允许
if(SBUF==0x7f) //最低波特率9600,最高波特率9600,判断连续多个0x7f
{
Uart1_ser_n++; //判断连续多个0x7f
if(Uart1_ser_n>=10) //判断连续多个0x7f
{
Uart1_ser_n=0; //清0
IAP_CONTR|=0xe0; //执行自动软复位,可以做调试用,STC12、STC15、STC8
//ISP_CONTR|=0xe0; //执行自动软复位,可以做调试用,STC89
}
}
else Uart1_ser_n=0; //不是下载命令流,重新计数
if(Uart_Timer>50) //如果两个字节的时间间隔,超过50ms 很长了
{
for(i=0;i<Down_MAX;i++)
{
Uart1_Down_Buffer[i]=' '; //清除串口接收缓存数组(LCD1602液晶没有空字符,所以改成空格)
}
Uart_Timer=0; //定时时间清0,重新计时间
Down_Count=0; //一帧数据包字节的位置归0,表示首字节
Uart1_Down_Buffer[Down_Count]=SBUF; //保存到首字节位置
}
else //如果两个字节的时间间隔很短
{
Uart_Timer=0; //定时时间清0,重新计时间
Down_Count++; //一帧数据包字节的位置往后增加1个位置
Uart1_Down_Buffer[Down_Count]=SBUF; //保存到对应的字节位置
if(Down_Count>=Down_MAX) //如果超过最多接收数量
{
if(Uart1_Up_Buffer[Up_MAX-1]==0)//上一次串口发送已经全部打印发送完成了
{
Uart1_Flag=1; //允许下一次打印
for(i=0;i<Up_MAX;i++)
{
Uart1_Up_Buffer[i]=Uart1_Up_Symbol_Buffer2[i];//字符串拷贝到缓存
}
}
}
}
}
if(TI) //如果上一个字节发送完成了
{
TI=0; //标志位清除
Uart1_Flag=1; //串口发送允许
Uart1_Up_Data_Drive(); //执行串口发送下一个字节
}
}
//*********************************《人人学会单片机》视频教程,祁绪电子2021-10
//
大富大贵7
- 粉丝: 393
- 资源: 8870
最新资源
- 毕设和企业适用springboot企业知识管理平台类及机器学习平台源码+论文+视频.zip
- 毕设和企业适用springboot企业知识管理平台类及酒店管理平台源码+论文+视频.zip
- 毕设和企业适用springboot企业知识管理平台类及技术文档管理平台源码+论文+视频.zip
- 毕设和企业适用springboot企业知识管理平台类及企业IT解决方案平台源码+论文+视频.zip
- 毕设和企业适用springboot企业知识管理平台类及客户管理系统源码+论文+视频.zip
- 毕设和企业适用springboot企业知识管理平台类及企业数字化转型平台源码+论文+视频.zip
- 毕设和企业适用springboot企业知识管理平台类及全流程管理平台源码+论文+视频.zip
- 毕设和企业适用springboot企业知识管理平台类及企业项目管理平台源码+论文+视频.zip
- 毕设和企业适用springboot企业知识管理平台类及全球电商管理平台源码+论文+视频.zip
- 毕设和企业适用springboot企业知识管理平台类及全生命周期管理平台源码+论文+视频.zip
- 毕设和企业适用springboot企业知识管理平台类及视频监控系统源码+论文+视频.zip
- 毕设和企业适用springboot企业知识管理平台类及人工智能医疗平台源码+论文+视频.zip
- 毕设和企业适用springboot企业知识管理平台类及团队协作平台源码+论文+视频.zip
- 毕设和企业适用springboot企业知识管理平台类及线上广告平台源码+论文+视频.zip
- 毕设和企业适用springboot企业知识管理平台类及网络营销平台源码+论文+视频.zip
- 毕设和企业适用springboot企业知识管理平台类及职业技能培训平台源码+论文+视频.zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈