配置SCON寄存器
我们使用方式1
参照手册配置 SCON=0x40;
用STC-ISP软件生成配置
波特率加倍其实就是把PCON寄存器最高位置1(参考手册)
需要波特加倍,否则误差太大,无法工作。但系统频率为11.0592时,其可与波特率完美匹配,所以我们如果做串口通信的话,最好选择频率11.0592的晶振。
代码:
UART.c
#include <REGX52.H>
/**
* @brief 串口初始化,4800bps@12.000MHz
* @param 无
* @retval 无
*/
void UART_Init()
{
SCON=0x50;
PCON |= 0x80; //使能波特率倍速位SMOD
TMOD &= 0x0F; //设置定时器模式
TMOD |= 0x20; //设置定时器模式
TL1 = 0xF3; //设置定时初始值
TH1 = 0xF3; //设置定时重载值
ET1 = 0; //禁止定时器%d中断
TR1 = 1; //定时器1开始计时
EA=1;
ES=1;
}
/**
* @brief 串口发送一个字节数据
* @param Byte 要发送的一个字节数据
* @retval 无
*/
void UART_SendByte(unsigned char Byte)
{
SBUF=Byte;
while(TI==0);
TI=0;
}
/*串口中断函数模板
void URAT_Routine() interrupt 4
{
if(RI==1)
{
RI=0;
}
}
*/
UART.h
#ifndef __UART_H__
#define __UART_H__
void UART_Init();
void UART_SendByte(unsigned char Byte);
#endif
main.c
#include <REGX52.H>
#include "Delay.h"
#include "UART.h"
unsigned char Sec;
void main()
{
UART_Init();
while(1)
{
}
}
void URAT_Routine() interrupt 4
{
if(RI==1)
{
P2=~SBUF;
UART_SendByte(SBUF);
RI=0;
}
}
仿真:
部分原件
原件 | 关键词 |
---|---|
虚拟仪器模式中的虚拟终端 | VIRTUAL TERMINAL |
DB9 | COMPIM |
LED灯 | LED-RED |
排阻 | RESPACK-8 |
电阻 | RES |
仿真图:
遇到问题
这一部分遇到问题了,还没解决。(有没有大佬帮忙解决一下啊)
我用虚拟串口仿真,但单片机总只是能接受hex数据。,然后也没有产生中断点亮LED,串口助手也没有接收到返回的数据
我以为是串口问题,但我打开两个
STC-ISP进行串口通信却可以
还未解决…………………………