STC15W202S串口可用吗?为什么不能收发?
很是怀疑STC15W202S串口1是否存在!用STC数据手册上的例程测试了一下,根本就不能收发。下面是例程:/*
定时器2用作串口1波特率发生器,MCU时钟18.432M
*/
#include "reg51.h"
#include "intrins.h"
typedef unsigned char BYTE;
typedef unsigned int WORD;
#define FOSC 18432000
#define BAUD 115200
#define NONE_PARITY 0 // 无校验
#define ODD_PARITY 1 // 奇校验
#define EVEN_PARITY 2 // 偶校验
#define MARK_PARITY 3 // 标记校验
#define SPACE_PARITY 4 // 空白校验
//#define PARITYBIT NONE_PARITY
#define PARITYBIT EVEN_PARITY
sfr AUXR = 0x8e;
sfr AUXR1 = 0xa2;
sfr T2H = 0xd6;
sfr T2L = 0xd7;
sbit P33 = P3^3;
bitbusy;
void sendData(BYTE dat);
void sendString(char *s);
void main()
{
AUXR1 &= ~0x40; // 串口1配置为P3.0/RX,P3.1/TX
#if (PARITYBIT == NONE_PARITY)
SCON = 0x50; // 8位可变波特率
#elif (PARITYBIT == ODD_PARITY) || (PARITYBIT == EVEN_PARITY) || (PARITYBIT == MARK_PARITY)
SCON = 0xda; // 9位可变波特率,校验位初始为1
#elif (PARITYBIT == SPACE_PARITY)
SCON = 0xd2; // 9位可变波特率,校验位初始为0
#endif
T2L = (655536 - (FOSC/4/BAUD)); // 设置波特率重装值
T2H = (655536 - (FOSC/4/BAUD)) >> 8;
AUXR = 0x14; // T2为1T模式,并启动定时器2
AUXR |= 0x01; // 选择定时器2为串口1波特率发生器
ES = 1; // 使能串口1中断
EA = 1;
sendString("STC15W202S2\r\nUart Test !\r\n");
while(1);
}
/*----------------------------
UART 中断服务程序
-----------------------------*/
void Uart() interrupt 4 using 1
{
if (RI)
{
RI = 0; //清除RI位
sendData(SBUF); //串口回传收到的数据
}
if (TI)
{
TI = 0; //清除TI位
busy = 0; //清忙标志
}
}
/*----------------------------
发送串口数据
----------------------------*/
void sendData(BYTE dat)
{
while (busy); //等待前面的数据发送完成
ACC = dat; //获取校验位P (PSW.0)
if (P) //根据P来设置校验位
{
#if (PARITYBIT == ODD_PARITY)
TB8 = 0; //设置校验位为0
#elif (PARITYBIT == EVEN_PARITY)
TB8 = 1; //设置校验位为1
#endif
}
else
{
#if (PARITYBIT == ODD_PARITY)
TB8 = 1; //设置校验位为1
#elif (PARITYBIT == EVEN_PARITY)
TB8 = 0; //设置校验位为0
#endif
}
busy = 1;
SBUF = ACC; //写数据到UART数据寄存器
}
/*----------------------------
发送字符串
----------------------------*/
void sendString(char *s)
{
while (*s) //检测字符串结束标志
{
sendData(*(s++) ); //发送当前字符
}
}
再附上原始的C文件。
经常怀疑处理器最基本功能的人,我觉得都应该去看看医生。 STC官网库函数例程 06-串口1中断收发。
STC15系列库函数与例程测试版V1.0.rar
http://www.stcmcu.com/STC-LIB/STC15%E7%B3%BB%E5%88%97%E5%BA%93%E5%87%BD%E6%95%B0%E4%B8%8E%E4%BE%8B%E7%A8%8B%E6%B5%8B%E8%AF%95%E7%89%88V1.0.rar 应该不会有问题,你先用示波器测测波形 steaven2000 发表于 2015-5-12 15:55
经常怀疑处理器最基本功能的人,我觉得都应该去看看医生。
确实眼花了,把65536打成了655536!改过来就好了。 LZ注意,用keil的话,超过65535的常数,后面要加L或UL,否则,你懂的。
#define FOSC 18432000L
#define BAUD 115200L 小李非刀 发表于 2015-5-13 23:54
LZ注意,用keil的话,超过65535的常数,后面要加L或UL,否则,你懂的。
#define FOSC 18432000L
#define ...
多谢提醒,我用的keil 5,没加L也正常。问题出在TIM2重载值计算上,把65535打成655535了。
页:
[1]