求一段STC89C52单片机将数值通过串口输出的代码
2个回答
展开全部
可以利用print函数或者sprint函数
程序如下:
#include "reg52.h" //此头文件中定义了单片机的一些特殊功能寄存器
typedef unsigned int u16;
typedef unsigned char u8;
void UsartInit()
{
SCON=0X50; //0101 000设置串行口控制寄存器sm0,sm1为01,即为工作方式1
TMOD=0X20; //设置计数器
PCON=0X80; //定义PCON寄存器中的SMOD=1,波特率加倍
TH1=0XF3; //计数器初始值设置,注意波特率是4800的,当然大家可以改
TL1=0XF3;
EA=1; //打开总中断 根据需要
ES=1; //打开中断允许中的串行口中断允许
TR1=1; //打开计数器
TI = 1;//如果使用print函数,TI一定要是1 否则 删掉该句
}
void main()
{
u16 Val;
UsartInit();
while(1)
{ Val = GetSensor();
printf("%d",Val;) //printf中一定要用u16的 不能用u8 这样就直接将数字格式化为ascii
}
}
程序如下:
#include "reg52.h" //此头文件中定义了单片机的一些特殊功能寄存器
typedef unsigned int u16;
typedef unsigned char u8;
void UsartInit()
{
SCON=0X50; //0101 000设置串行口控制寄存器sm0,sm1为01,即为工作方式1
TMOD=0X20; //设置计数器
PCON=0X80; //定义PCON寄存器中的SMOD=1,波特率加倍
TH1=0XF3; //计数器初始值设置,注意波特率是4800的,当然大家可以改
TL1=0XF3;
EA=1; //打开总中断 根据需要
ES=1; //打开中断允许中的串行口中断允许
TR1=1; //打开计数器
TI = 1;//如果使用print函数,TI一定要是1 否则 删掉该句
}
void main()
{
u16 Val;
UsartInit();
while(1)
{ Val = GetSensor();
printf("%d",Val;) //printf中一定要用u16的 不能用u8 这样就直接将数字格式化为ascii
}
}
更多追问追答
追问
最后一段void函数我不是很明白,您能写下注释吗?
追答
你是说主函数吗?
展开全部
#include<reg51.h>
#define uchar unsigned char
uchar dat;
int dly;
main()
{
TMOD=0x20;
TH1=0xfd;
TL1=0xfd;
TR1=1;
SCON=0x40;
while(1)
{
SBUF=dat/10000+0x30;
while(TI==0);
TI=0;
SBUF=dat%10000/1000+0x30;
while(TI==0);
TI=0;
SBUF=dat%1000/100+0x30;
while(TI==0);
TI=0;
SBUF=dat%100/10+0x30;
while(TI==0);
TI=0;
SBUF=dat%10+0x30;
while(TI==0);
TI=0;
dat++;
SBUF=' ';
while(TI==0);
TI=0;
dly=3000;
while(dly--);
}
}
#define uchar unsigned char
uchar dat;
int dly;
main()
{
TMOD=0x20;
TH1=0xfd;
TL1=0xfd;
TR1=1;
SCON=0x40;
while(1)
{
SBUF=dat/10000+0x30;
while(TI==0);
TI=0;
SBUF=dat%10000/1000+0x30;
while(TI==0);
TI=0;
SBUF=dat%1000/100+0x30;
while(TI==0);
TI=0;
SBUF=dat%100/10+0x30;
while(TI==0);
TI=0;
SBUF=dat%10+0x30;
while(TI==0);
TI=0;
dat++;
SBUF=' ';
while(TI==0);
TI=0;
dly=3000;
while(dly--);
}
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询