标题:
下列程序STC89C52可以用但烧到STC12单片机里面就不行了
[打印本页]
作者:
Henzie0226
时间:
2021-4-10 20:46
标题:
下列程序STC89C52可以用但烧到STC12单片机里面就不行了
下面的程序用STC89C52单片机可以实现:单片机先发送a,而后可以接到a机发送过来的字符数组,而后将其再转发出去;之后单片机再发送b,而后可以接到a机发送过来的字符数组,而后将其再转发出去。我想把下列程序烧到STC12C5A60S2中,但是无法完整接收和发送字符数组,大佬们谁知道怎么解决呢?
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar flag,i,s[6]="",j=0;
void DelayMS(uint xms) //延时大约1ms
{
uint x,y;
for(x=xms;x>0;x--)
for(y=110;y>0;y--);
}
void uartinit()//串口初始化函数
{
SCON=0x50;//串口工作方式为模式1
TMOD=0x20;//定时器T1工作方式2
PCON=0x00;//SMOD=0
TH1=0xfd;//波特率为9600
TL1=0xfd;
EA=1;
ES=1;
TR1=1;//启动定时器
}
void init() //初始化函数
{
uartinit();
}
void main()
{
init();
while(1)
{
SBUF='a';
while(!TI);
TI=0;
while(1)
{
if(flag==1)
{
for(i=0;i<6;i++)
{
SBUF=s[i];
while(!TI);
TI=0;
}
flag=0;
}
if(s[5]=='D')
break;
}
DelayMS(500);
SBUF='b';
while(!TI);
TI=0;
while(1)
{
if(flag==1)
{
for(i=0;i<6;i++)
{
SBUF=s[i];
while(!TI);
TI=0;
}
flag=0;
}
if(s[5]=='A')
break;
}
DelayMS(500);
}
}
void ser() interrupt 4
{
if(RI==1)
{
RI=0;
if(flag==0&&j!=0)//1.循环赋值为'\0'(字符串结尾标志符),j=0,为了第二次传递字符串是又是从头输出
{ //2.flag为0和j不为0时,保证是第二次及以后,传输字符串(控制输出格式)
for(j=0;j<6;j++)
s[j]='\0';
j=0;
}
s[j]=SBUF;
flag=1;
j++;
}
if(TI) //发送数据
{
}
}
复制代码
作者:
angmall
时间:
2021-4-11 07:45
STC12系列是STC所谓的1T时钟单片机,大部分的指令速度都比STC51系列要快6倍以上,也就是说,只要是有延时的,时间基本上是缩短了6倍以上了
void UartInit(void) //9600bps@11.0592MHz
{
PCON &= 0x7F; //波特率不倍速
SCON = 0x50; //8位数据,可变波特率
AUXR &= 0xBF; //定时器时钟12T模式
AUXR &= 0xFE; //串口1选择定时器1为波特率发生器
TMOD &= 0x0F; //设置定时器模式
TMOD |= 0x20; //设置定时器模式
TL1 = 0xFD; //设置定时初始值
TH1 = 0xFD; //设置定时重载值
ET1 = 0; //禁止定时器%d中断
TR1 = 1; //定时器1开始计时
EA=1;
}
复制代码
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1