求助STC15W408AS串口不能收发数据的问题

如题所述

STC15W408AS 这款单片机 没有定时器 T1......................................................
......
#define FOSC 11059200L
#define BAUD 9600
......
T2L = (65536 - (FOSC/4/BAUD)); //设置波特率重装值
T2H = (65536 - (FOSC/4/BAUD))>>8;
AUXR = 0x14; //T2为1T模式, 并启动定时器2
AUXR |= 0x01; //选择定时器2为串口1的波特率发生器
ES = 1; //使能串口1中断
EA = 1;
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
回复 3好小奋青:
#include "STC15F2K60S2.H" //STC 15W408AS 头文件

#define FOSC 11059200L //30000000L //11059200L
#define BAUD 9600 //38400 //9600

void InitUart() //STC 15W408AS 可以用的串口初始化
{
T2L = (65536 - (FOSC/4/BAUD)); //设置波特率重装值
T2H = (65536 - (FOSC/4/BAUD))>>8;
AUXR = 0x14; //T2为1T模式, 并启动定时器2
AUXR |= 0x01; //选择定时器2为串口1的波特率发生器
ES = 1; //使能串口1中断
EA = 1;
SM0=0; //
SM1=1; //??1,10??????(8???),?????
REN=1; //???????
}
////STC15W408AS 这款单片机 没有定时器 T1
////......
////#define FOSC 11059200L
////#define BAUD 9600
////......
////T2L = (65536 - (FOSC/4/BAUD)); //设置波特率重装值
////T2H = (65536 - (FOSC/4/BAUD))>>8;
////AUXR = 0x14; //T2为1T模式, 并启动定时器2
////AUXR |= 0x01; //选择定时器2为串口1的波特率发生器
////ES = 1; //使能串口1中断
////EA = 1;

/*发送一个字符串******************************************************************/
void TxString(uchar *puts) //发送一个字符串//u8
{
for (; *puts != 0;puts++) //遇到停止符0结束
{
TI = 0;
SBUF = *puts;
while(!TI);
TI = 0;
}
}
/*发送单个字节********************************************************************/
void TxChar(unsigned char Data)
{
TI = 0;
SBUF =Data;
while(!TI);
TI = 0;
}
/*接收单个字节********************************************************************/
uchar RxChar()
{
unsigned char Data;
// RI = 0;
while(!RI);
Data =SBUF;
RI = 0;
return(Data);
}
/*以文本形式发送数据***************************************************************/
void SendFourData(uchar Data)
{
unsigned char a=0,b=0,c=0;
a= (Data/100)+0x30; //对照ASCII表,0的编码"十进制"48--"十六进制"0x30
b= (Data/10%10)+0x30; //接收方式为文本
c= (Data%10)+0x30;
TxChar(a);
TxChar(b);
TxChar(c);
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2015-04-05
#include<STC15W408AS.h>
#include<INTRINS.H>
sbit Y55=P5^5; //将Y55位定义为P5.5
sbit SB0=P3^2; //将SB0位定义为P3.2
sbit SB1=P3^3; //将SB1位定义为P3.3
sbit SB2=P3^6; //将SB2位定义为P3.6
sbit SB3=P3^7; //将SB3位定义为P3.7
unsigned char Dio,D0,D1;

/**************************************************/
void FASHE(unsigned char x)
{
SBUF=x;
while(TI==0);
TI=0;
}

void UartInit(void) //[email protected]
{
SCON = 0x50; //8位数据,可变波特率
AUXR |= 0x01; //串口1选择定时器2为波特率发生器
AUXR |= 0x04; //定时器2时钟为Fosc,即1T
T2L = 0xE0; //设定定时初值
T2H = 0xFE; //设定定时初值
AUXR |= 0x10; //启动定时器2
}

void DioIN() //@11.0592MHz
{
Dio=0;
if(SB0==0)Dio = Dio+0x01;
if(SB1==0)Dio = Dio+0x02;
if(SB2==0)Dio = Dio+0x04;
if(SB3==0)Dio = Dio+0x08;
}

void Delay500ms() //@11.0592MHz
{
unsigned char i, j, k;

_nop_();
_nop_();
i = 22;
j = 3;
k = 227;
do
{
do
{
while (--k);
} while (--j);
} while (--i);
}

/*****************************
函数功能:主函数
*****************************/
void main(void)
{

UartInit();
while(1)
{
DioIN();
FASHE(Dio);
Delay500ms();

}
}
第2个回答  2014-11-24
具体什么问题
相似回答