/**************************************************************************************
实验现象: 1、该实验是测试串口1(P3.0 P3.1)的串口通信实验;
2、USB连接线给开发板通电下载程序,下载软件中内部IRC时钟选择11.0592MHZ;
3、打开串口调试助手,选择正确的串口号,波特率设置为9600,在发送区发送任意字符,
可观察到数据接收区收到刚发送的字符;
接线说明:
注意事项: USB连接线给开发板通电下载程序,STC下载软件中内部IRC时钟选择11.0592MHZ
***************************************************************************************/
#include "STC8.H"
#include "intrins.h"
#define MAIN_Fosc 11059200L //定义主时钟
#define uint32 unsigned long
#define uint16 unsigned int
#define uint8 unsigned char
/**********************
引脚别名定义
***********************/
sbit led1=P0^0; //用IO口P00
sbit led2=P0^1; //用IO口P01
/************* 本地变量声明 **************/
#define TRUE 1
#define FALSE 0
#define Buf_Max 50
volatile uint8 Flag=FALSE;
uint8 xdata Rec_Buf[Buf_Max];
uint8 i = 0;
uint8 uart1temp;
/**************************************
功能描述:延时函数
入口参数:uint16 x ,该值为1时,延时1ms
返回值:无
***************************************/
void delay_ms(uint16 x)
{
uint16 j,i;
for(j=0;j<x;j++)
{
for(i=0;i<1100;i++);
}
}
/***************************************************************************
* 描 述 : 串口1初始化函数
* 入 参 : 无
* 返回值 : 无
备注:波特率9600bps 晶振11.0592MHz
**************************************************************************/
void Uart1_Init(void)
{
PCON &= 0x3f; //波特率不倍速,串行口工作方式由SM0、SM1决定
SCON = 0x50; //8位数据,可变波特率,启动串行接收器
AUXR |= 0x40; //定时器1时钟为Fosc,即1T
AUXR &= 0xfe; //串口1选择定时器1为波特率发生器
TMOD &= 0x0f; //清除定时器1模式位
TMOD |= 0x20; //设定定时器1为8位自动重装方式
TL1 = 0xDC; //设定定时初值
TH1 = 0xDC; //设定定时器重装值
ET1 = 0; //禁止定时器1中断
TR1 = 1; //启动定时器1
ES = 1; // 串口1中断打开
EA = 1; // 总中断打开
}
/***************************************************************************
* 描 述 : 串口1发送数据函数
* 入 参 : uint8 数据
* 返回值 : 无
**************************************************************************/
void SendDataByUart1(uint8 dat)
{
SBUF = dat; //写数据到UART数据寄存器
while(TI == 0); //在停止位没有发送时,TI为0即一直等待
TI = 0; //清除TI位(该位必须软件清零)
}
/**************************************************************************************
* 描 述 : USART1接收到数据后串口发送出去
* 入 参 : 无
* 返回值 : 无
**************************************************************************************/
void USART1_Tx_Puts(void)
{
if(Flag) //有新数据通过串口被接收到
{
ES = 0; //串口1中断关闭
SendDataByUart1(uart1temp); //发送字符
SendDataByUart1(0x0D); //发送换行符
SendDataByUart1(0x0A); //发送换行符
ES = 1; //串口1中断打开
Flag=FALSE; //清除接收标识符
}
}
/***********************
功能描述:主函数
入口参数:无
返回值:无
************************/
int main()
{
P3M1 &= 0xFE; P3M0 &= 0xFE; //设置P3.0为准双向口
P3M1 &= 0xFD; P3M0 |= 0x02; //设置P3.1为推挽输出
Uart1_Init();
while(1)
{
USART1_Tx_Puts(); //串口接收到一个字符后返回该字符
}
}
/***************************************************************************
* 描 述 : 串口1中断服务函数
* 入 参 : 无
* 返回值 : 无
**************************************************************************/
void Uart1() interrupt 4 using 1
{
ES = 0; // 串口1中断关闭
Flag=TRUE; //接收到数据,接收标识符有效
if (RI) //串行接收到停止位的中间时刻时,该位置1
{
RI = 0; //清除RI位 (该位必须软件清零)
uart1temp = SBUF;
}
if (TI) //在停止位开始发送时,该位置1
{
TI = 0; //清除TI位(该位必须软件清零)
}
ES = 1; // 串口1中断打开
}
没有合适的资源?快使用搜索试试~ 我知道了~
基于STC8A单片机基础实验例程源码之-串口1收发实验.zip
共9个文件
uvopt:1个
template:1个
m51:1个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 173 浏览量
2023-11-28
20:44:39
上传
评论
收藏 75KB ZIP 举报
温馨提示
基于STC8A单片机基础实验例程源码之-串口1收发实验.zip
资源推荐
资源详情
资源评论
收起资源包目录
基于STC8A单片机基础实验例程源码之-串口1收发实验.zip (9个子文件)
基于STC8A单片机基础实验例程源码之-串口1收发实验
串口调试助手现象.png 52KB
template.M51 7KB
template 21KB
template.uvgui.Administrator 132KB
template.uvproj 13KB
template_Target 1.cfg 20B
template.hex 939B
main.c 4KB
template.uvopt 6KB
共 9 条
- 1
资源评论
GJZGRB
- 粉丝: 1638
- 资源: 6448
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功