标题:
STC52RC单片机问题求助
[打印本页]
作者:
caogen
时间:
2019-11-21 21:56
标题:
STC52RC单片机问题求助
代码如下 #include "reg52.h"
void UartInit(void)
{
TMOD=0x20;
TH1=0xfd;
TL1=0xfd;
TR1=1;
SCON=0X50;
ES=1;
EA=1;
}
void main()
{
UartInit();
while(1);
}
void Uart() interrupt 4
{
P1=SBUF;
RI=0;
SBUF=P1;
while(!TI);
TI=0;
}
烧录提示如下
正在检测目标单片机 ...
单片机型号: STC89C52RC/LE52RC
固件版本号: 4.3C
当前芯片的硬件选项为:
. 当前的时钟频率: 7.332MHz
. 系统频率为12T(单倍速)模式
. 振荡器的放大增益不降低
. 当看门狗启动后,任何复位都可停止看门狗
. MCU内部的扩展RAM可用
. ALE脚的功能选择仍然为ALE功能脚
. P1.0和P1.1与下次下载无关
. 下次下载用户程序时,不擦除用户EEPROM区
单片机型号: STC89C52RC/LE52RC
固件版本号: 4.3C
正在重新握手 ... 成功 [0.765"]
当前的波特率: 9600
正在擦除目标区域 ... 完成 ! [0.312"]
正在下载用户代码 ... 完成 ! [0.827"]
正在设置硬件选项 ... 完成 ! [0.063"]
更新后的硬件选项为:
. 当前的时钟频率: 7.332MHz
. 系统频率为12T(单倍速)模式
. 振荡器的放大增益不降低
. 当看门狗启动后,任何复位都可停止看门狗
. MCU内部的扩展RAM可用
. ALE脚的功能选择仍然为ALE功能脚
. P1.0和P1.1与下次下载无关
. 下次下载用户程序时,不擦除用户EEPROM区
单片机型号: STC89C52RC/LE52RC
固件版本号: 4.3C
操作成功 !(2019-11-21 21:53:47)
用串口助手点灯 灯乱亮 求大神帮助
作者:
pcbboy
时间:
2019-11-22 08:09
看看内部时钟频率设定和波特率是否匹配。
作者:
moluxiyan
时间:
2019-11-22 09:04
1、检查串口接收是否正常
2、串口助手是不是以16进制的方式发送的
作者:
wulin
时间:
2019-11-22 11:03
程序没有什么问题,串口助手是HEX模式,可能是楼主没适应P1接LED的反码表示,可以加一个中间变量取反处理。
#include "reg52.h"
void UartInit(void)
{
TMOD=0x20;
TH1=0xfd;
TL1=0xfd;
TR1=1;
SCON=0X50;
ES=1;
EA=1;
}
void main()
{
UartInit();
while(1);
}
void Uart() interrupt 4
{
unsigned char i;
RI=0;
i=SBUF;
P1=~i;//LED低电平亮
SBUF=i;
while(!TI);
TI=0;
}
复制代码
作者:
w2w11111143242
时间:
2019-11-22 14:48
可以加一个中间变量取反处理。
作者:
bh2030693
时间:
2019-11-22 19:57
前面几位朋友给出的建议值得参考,但是还有一点需要注意,楼主实际已经给出了答案:串口设置和实际时钟不统一。
STC89C52RC没有内部时钟,只能用外部时钟,而且上面这个芯片版本也很旧了。
另外我不明白为什么要把“while(!TI);”放在串口中断里面?你们学习是从哪里学的?真怀疑自己是不是落伍了!
下面这段代码可以试试:
由于没有实际测试7.332Mhz,有什么问题还请帮忙修改。
#include <intrins.h>
#include <reg51.h>
#define FOSC 7332000UL
// #define FOSC 11059200UL
#define BAUD 9600
// 9600bps@FOSC
void UartInit(void) {
SCON = 0x50;
TMOD &= 0x0f;
TMOD |= 0x20;
TL1 = 256 - (FOSC / 12 / 32 / BAUD); //
0xfe@7.332MHz
TH1 = TL1;
ET1 = 0;
ES = 1;
TR1 = 1;
}
void Uart_Isr() interrupt 4 {
if (RI) {
RI = 0;
P1 = SBUF;
_nop_();
SBUF = P1;
}
if (TI) {
TI = 0;
}
}
// 主函数
void main(void) {
UartInit();
EA = 1;
while (1) {
}
}
作者:
caogen
时间:
2019-11-24 20:05
谢谢各位大佬的帮助
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1