怎么用stc89c52单片机利用串口助手向电脑每秒发送从零开始的数据啊

2024-12-27 18:33:37
推荐回答(2个)
回答1:

这个问题,你提问过,还没有写出程序呀。对串口程序不熟悉呀。

程序很简单的,如下

#include

unsigned char t0n;//T0中断20次为1秒

main()

{

unsigned char second;

TMOD=0x21;

TH1 =0xFD;//晶振频率=11.0592,波特率=9600

TL1 =0xFD;

SCON=0x50;

TH0 =0x4B;//晶振频率=11.0592,定时50us

TL0 =0xFD;

EA  =1;

ET0 =1;

TR0 =1;

TR1 =1;

while(1)

{

if(t0n>=20)//定时器T0中断20次,1秒到

{

t0n=0;

second++;

if((0x0f&second)==0x0a)//变成10进制数发送

{second+=6;}//删掉这两行,按十六进制数发送

SBUF=second;//发送秒

while(TI==0);

TI=0;

}

}

}

void T0_int() interrupt 1

{

TH0 =0x4B;

TL0 =0xFD;

t0n++;

}

下图是串口调试助手接收的情况

1,单片机按十进制数形式发送时,接收数据如下,是按十六进制数显示,但没有十六进制数了

如果删掉注释的两行,接十六进制数发送,接收就是十六进制数了。其实,这只是显示形式,其实,单片机的发送还是以十六进制发送的。

回答2:

#include
#define uchar unsigned char
uchar cnt,dat;
void t0isr() interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
cnt++;
if(cnt>=20)
    {
    cnt=0;
    dat++;
    SBUF=dat;
    while(TI==0);
    TI=0;
    }
}
main()
{
TMOD=0x21;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
TH1=0xfd;
TL1=0xfd;
SCON=0x40;
TR1=1;
TR0=1;
ET0=1;
ET0=1;
EA=1;
while(1);
}