|
本帖最后由 慕名而来 于 2019-10-18 09:49 编辑
起因:最近在玩红外线遥控器接收,用到了串口助手,用到了串口程序,于是问题出现了!!!
简述:玩单片机七八年了,从开始后不久就要学习单片机与电脑间的串口通信,可以肯定的说STC51单片机的串口初始化代码真的已经用烂了,电脑中存留的各种代码中很多都有好用的串口通信代码且复制粘贴重来没出过问题的,这次尴尬了。
一、测试用单片机型号:STC12C4052AD(曾用芯片:STC12C5A32S2、STC15W408AS)
二、测试代码:
#include <STC12C2052AD.H>
//==============================================
void main()
{
SCON = 0x50; //T1工作于方式1
TMOD = 0x20; //T1 8位自动重装
TH1 = 0xf3; //(256-12000000/12/32/2400)=243=0xf3波特率2400
TL1 = 0xf3;
TR1 = 1;
//注:因为没有用到中断,所以没有设置ES=1;EA=1
while(1)
{
SBUF = 10;
while( TI == 0 );
TI = 0;
}
}
三、测试结果:
注1:电脑串口为主板原生串口经RS232转的串口COM1注2:错误现象:下图中电脑端接收的串口数据每次“打开串口”时都是不同的!!!!
四、测试代码源自STC单片机官网,代码如下:
STC MCU Limited
8.4 串行口的测试程序
1. C程序:
/*------------------------------------------------------------------------------------*/
/* --- STC MCU International Limited ---------------------------------------*/
/* --- 演示STC 1T 系列单片机串行口功能 (8-bit/9-bit) -----------------*/
/* --- Mobile: (86)13922805190 -----------------------------------------------*/
/* --- Fax: 86-755-82944243 ---------------------------------------------------*/
/* --- Tel: 86-755-82948412 ----------------------------------------------------*/
/* --- Web: www.STCMCU.com -----------------------------------------------*/
/* 如果要在程序中使用或在文章中引用该程序, -----------------------*/
/* 请在程序中或文章中注明使用了宏晶科技的资料及程序 -----------*/
/*-------------------------------------------------------------------------------------*/
#include "reg51.h"
#include "intrins.h"
typedef unsigned char BYTE;
typedef unsigned int WORD;
#define FOSC 18432000L //System frequency
#define BAUD 9600 //UART baudrate
/*Define UART parity mode*/
#define NONE_PARITY 0 //None parity
#define ODD_PARITY 1 //Odd parity
#define EVEN_PARITY 2 //Even parity
#define MARK_PARITY 3 //Mark parity
#define SPACE_PARITY 4 //Space parity
#define PARITYBIT EVEN_PARITY //Testing even parity
sbit bit9 = P2^2; //P2.2 show UART data bit9
bit busy;
void SendData(BYTE dat);
void SendString(char *s);
void main()
{
#if (PARITYBIT == NONE_PARITY)
SCON = 0x50; //8-bit variable UART
#elif (PARITYBIT == ODD_PARITY) || (PARITYBIT == EVEN_PARITY) || (PARITYBIT == MARK_PARITY)
SCON = 0xda; //9-bit variable UART, parity bit initial to 1
#elif (PARITYBIT == SPACE_PARITY)
SCON = 0xd2; //9-bit variable UART, parity bit initial to 0
#endif
TMOD = 0x20; //Set Timer1 as 8-bit auto reload mode
TH1 = TL1 = -(FOSC/12/32/BAUD); //Set auto-reload vaule
TR1 = 1; //Timer1 start run
ES = 1; //Enable UART interrupt
EA = 1; //Open master interrupt switch
SendString("STC12C2052AD\r\nUart Test !\r\n");
while(1);
}
//********************
这个实验昨天在家了玩了一下午,百般实验无果,怀疑是STC_ISP软件的串口助手有问题(下载程序正常),换用了其他串口调试助手仍然不行,接下怀疑自制的自动断电下载线传输有问题,于是换用了USB_TTL下载线仍然是下载程序正常但串口通信不正常,接下来怀疑家里电脑的WIN7旗舰版有问题,今天用公司里的XP系统的电脑测试现象依然如故,接下来就只有怀疑人生了,各位说说问题还会出现在哪里呢,期待各位指点,先谢了!
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
x
|