这个问题,你提问过,还没有写出程序呀。对串口程序不熟悉呀。
程序很简单的,如下
#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,单片机按十进制数形式发送时,接收数据如下,是按十六进制数显示,但没有十六进制数了
如果删掉注释的两行,接十六进制数发送,接收就是十六进制数了。其实,这只是显示形式,其实,单片机的发送还是以十六进制发送的。
#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);
}