//******************************************************************《人人学会单片机》视频教程,祁绪电子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
//
没有合适的资源?快使用搜索试试~ 我知道了~
18 STC串口1 串口助手发送到LCD1602 STC15W(WQX06 51单片机 源代码).rar
共37个文件
h:11个
obj:6个
lst:6个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 188 浏览量
2023-02-06
12:22:06
上传
评论
收藏 85KB RAR 举报
温馨提示
WQX06 51单片机入门 源代码免责声明:资料部分来源于合法的互联网渠道收集和整理,部分自己学习积累成果,供大家学习参考与交流。收取的费用仅用于收集和整理资料耗费时间的酬劳。 本人尊重原创作者或出版方,资料版权归原作者或出版方所有,本人不对所涉及的版权问题或内容负法律责任。如有侵权,请举报或通知本人删除。
资源推荐
资源详情
资源评论
收起资源包目录
18 STC串口1 串口助手发送到LCD1602 STC15W(WQX06 51单片机 源代码).rar (37个子文件)
18 STC串口1 串口助手发送到LCD1602 STC15W
c_and_h
HC595_Drive.c 1KB
STC8H.h 18KB
LCD1602_Ser.h 752B
SMG_Ser.c 2KB
HC595_Drive.h 966B
STC89.H 4KB
STC8.h 19KB
STC12C5A60S2.H 18KB
LCD1602_Ser.c 4KB
STC15.h 13KB
UART1_Drive.h 425B
SMG_Ser.h 603B
STC8G.h 33KB
main.c 3KB
all.h 2KB
UART1_Drive.c 9KB
project
Objects
LCD1602_Ser.obj 11KB
SMG_Ser.obj 6KB
串口助手发送到LCD1602.lnp 265B
串口助手发送到LCD1602.build_log.htm 1KB
HC595_Drive.obj 7KB
UART1_Drive.obj 11KB
串口助手发送到LCD1602 40KB
STARTUP.obj 838B
串口助手发送到LCD1602.hex 4KB
main.obj 9KB
串口助手发送到LCD1602.uvproj 16KB
STARTUP.A51 6KB
Listings
UART1_Drive.lst 17KB
LCD1602_Ser.lst 8KB
SMG_Ser.lst 4KB
串口助手发送到LCD1602.m51 29KB
main.lst 6KB
STARTUP.lst 14KB
HC595_Drive.lst 4KB
串口助手发送到LCD1602.uvgui.wangqixu 90KB
串口助手发送到LCD1602.uvopt 9KB
共 37 条
- 1
资源评论
大富大贵7
- 粉丝: 319
- 资源: 8869
下载权益
C知道特权
VIP文章
课程特权
开通VIP
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功