芯片:stc11f02e兼容at2051。开发工具:keil3 。
硬件连接:P3.0 3.1做ISP下载,P1.6-1.7接电脑串口 晶振用的11.0592MHz
目标:发送字符到PC串口助手上显示出来。
现象:串口助手接收不到信息
程序如下,请问高手要怎么改才能发送字符到串口助手上去。
#include<reg52.h> //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义
#include"delay.h"
/*------------------------------------------------
函数声明
------------------------------------------------*/
void SendStr(unsigned char *s);
/*------------------------------------------------
串口初始化
------------------------------------------------*/
void InitUART (void)
{
AUXR1|= 0x80; // 选用P1串口
SCON = 0x50; // **SCON: 模式 1, 8-bit UART, 使能接收
TMOD |= 0x02; // **TMOD: timer 1, mode 2, 8-bit 重装
//PCON &= 0x7F; //系统默认的就是SMOD=0;
TH0 = 0xFD; // **TH1=256-11059200/384/波特率. TH1: 重装值 9600 波特率 晶振 11.0592MHz
TL0 = 0xFD; // 原来是TH1 TL1我改成TH0TL0因为stc11f02e没定时器1.
TR0 = 1; // **TR0: timer 0 打开
EA = 1; //**打开总中断
//ES = 1; //打开串口中断
}
/*------------------------------------------------
主函数
------------------------------------------------*/
void main (void)
{
InitUART();
while (1)
{
SendStr("abcd12345678");
DelayMs(240);//延时循环发送
DelayMs(240);
}
}
/*------------------------------------------------
发送一个字节
------------------------------------------------*/
void SendByte(unsigned char dat)
{
SBUF = dat;
while(!TI);
TI = 0; //8位接收完自动置位接收发送
}
/*------------------------------------------------
发送一个字符串
------------------------------------------------*/
void SendStr(unsigned char *s)
{
while(*s!='\0')// \0 表示字符串结束标志,
//通过检测是否字符串末尾
{
SendByte(*s);
s++;
}
}
------解决方案--------------------
TMOD |= 0x02; // **TMOD: timer 1, mode 2, 8-bit 重装
你设置了定时器1,但开启的是定时器0
TR0 = 1; // **TR0: timer 0 打开
所以,把
TR0 = 1; // **TR0: timer 0 打开
改为
TR1 = 1; // **TR0: timer 1 打开