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

一直调试不成功,想用一个从零开始自加的变量给SBUF,串口助手那里一直接收不到数据... 一直调试不成功,想用一个从零开始自加的变量给SBUF,串口助手那里一直接收不到数据 展开
 我来答
lycdl
高粉答主

2018-08-10 · 醉心答题,欢迎关注
知道大有可为答主
回答量:2万
采纳率:94%
帮助的人:4721万
展开全部

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

程序很简单的,如下

#include <reg51.h>

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,单片机按十进制数形式发送时,接收数据如下,是按十六进制数显示,但没有十六进制数了

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

追问
谢谢了,真的是掌握的不好,初学者。
追答
定时器T0定时的时间是50ms
专注51单片机
2018-08-10 · TA获得超过809个赞
知道小有建树答主
回答量:1150
采纳率:58%
帮助的人:223万
展开全部
#include<reg51.h>
#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);
}
更多追问追答
追问
亲为什么我接受到的不是从零开始的呀
追答

稍微改一下就好了。

#include<reg51.h>
#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;
    SBUF=dat;
    while(TI==0);
    TI=0;
    dat++;
    }
}
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);
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式