关于单片机和串口助手的问题
怎么样能够把单片机中的数据送到串口助手,比如说,单片机要显示的是1、2、3三个数据,怎么样编写程序,才能使串口助手显示出1、2、3呢?请高手们帮帮忙。要求是c语言的......
怎么样能够把单片机中的数据送到串口助手,比如说,单片机要显示的是1、2、3三个数据,怎么样编写程序,才能使串口助手显示出1、2、3呢?请高手们帮帮忙。要求是c语言的...
展开
3个回答
展开全部
给你一个程序,不过是单片机这边显示的是发送的键值,可以根据你的要求自己更改一下程序即可
#include <reg52.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
uchar code LEDData[ ] = {0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,
0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E };
uchar temp,buf;
uchar data disbuf[]={0x00,0x00};
/**********************************************************
延时子程序
**********************************************************/
void delayms(uint ms)
{
uchar k;
while(ms--)
{
for(k = 0; k < 120; k++);
}
}
/*********************************************************
发送数据函数
*********************************************************/
void senddata(uchar dat)
{
SBUF =dat;
while(!TI);
TI = 0;
}
/*********************************************************
串行中断服务函数
*********************************************************/
void serial() interrupt 4
{
ES = 0; //关闭串行中断
RI = 0; //清除串行接受标志位
buf = SBUF; //从串口缓冲区取得数据
switch(buf)
{
case 0x31: senddata('H');break; //接受到1,发送字符'H'给计算机
case 0x32: senddata('E');break; //接受到2,发送字符'E'给计算机
case 0x33: senddata('N');break; //接受到3,发送字符'N'给计算机
case 0x34: senddata('G');break; //接受到4,发送字符'G'给计算机
case 0x35: senddata('J');break; //接受到5,发送字符'J'给计算机
case 0x36: senddata('L');break; //接受到6,发送字符'L'给计算机
default: senddata(buf);break; //接受到其它数据,将其发送给计算机
}
if(buf!=0x0D)
{
if(buf!=0x0A)
temp =buf;
}
ES = 1; //允许串口中断
}
/*********************************************************
数据显示函数
*********************************************************/
void play()
{
disbuf[0]=temp & 0x0f;
P0=LEDData[disbuf[0]];
P2 = 0x7f;
delayms(1);
disbuf[1]=(temp & 0xf0)>>4;
P0=LEDData[disbuf[1]];
P2 = 0xbf;
delayms(1);
P2=0xff;
}
/*********************************************************
主函数
*********************************************************/
void main(void)
{
P0 = 0xff;
P2 = 0xff;
SCON=0x50; //设定串口工作方式
PCON=0x00; //波特率不倍增
TMOD=0x20; //定时器1工作于8位自动重载模式, 用于产生波特率
EA=1;
ES = 1; //允许串口中断
TL1=0xfd;
TH1=0xfd; //波特率9600
TR1=1;
while(1) //等待串行中断
{
play(); //数码管显示
}
}
/*********************************************************/
#include <reg52.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
uchar code LEDData[ ] = {0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,
0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E };
uchar temp,buf;
uchar data disbuf[]={0x00,0x00};
/**********************************************************
延时子程序
**********************************************************/
void delayms(uint ms)
{
uchar k;
while(ms--)
{
for(k = 0; k < 120; k++);
}
}
/*********************************************************
发送数据函数
*********************************************************/
void senddata(uchar dat)
{
SBUF =dat;
while(!TI);
TI = 0;
}
/*********************************************************
串行中断服务函数
*********************************************************/
void serial() interrupt 4
{
ES = 0; //关闭串行中断
RI = 0; //清除串行接受标志位
buf = SBUF; //从串口缓冲区取得数据
switch(buf)
{
case 0x31: senddata('H');break; //接受到1,发送字符'H'给计算机
case 0x32: senddata('E');break; //接受到2,发送字符'E'给计算机
case 0x33: senddata('N');break; //接受到3,发送字符'N'给计算机
case 0x34: senddata('G');break; //接受到4,发送字符'G'给计算机
case 0x35: senddata('J');break; //接受到5,发送字符'J'给计算机
case 0x36: senddata('L');break; //接受到6,发送字符'L'给计算机
default: senddata(buf);break; //接受到其它数据,将其发送给计算机
}
if(buf!=0x0D)
{
if(buf!=0x0A)
temp =buf;
}
ES = 1; //允许串口中断
}
/*********************************************************
数据显示函数
*********************************************************/
void play()
{
disbuf[0]=temp & 0x0f;
P0=LEDData[disbuf[0]];
P2 = 0x7f;
delayms(1);
disbuf[1]=(temp & 0xf0)>>4;
P0=LEDData[disbuf[1]];
P2 = 0xbf;
delayms(1);
P2=0xff;
}
/*********************************************************
主函数
*********************************************************/
void main(void)
{
P0 = 0xff;
P2 = 0xff;
SCON=0x50; //设定串口工作方式
PCON=0x00; //波特率不倍增
TMOD=0x20; //定时器1工作于8位自动重载模式, 用于产生波特率
EA=1;
ES = 1; //允许串口中断
TL1=0xfd;
TH1=0xfd; //波特率9600
TR1=1;
while(1) //等待串行中断
{
play(); //数码管显示
}
}
/*********************************************************/
意法半导体(中国)投资有限公司
2023-06-12 广告
2023-06-12 广告
STM32是ARM Cortex内核单片机和微处理器市场和技术方面的佼佼者,目前提供16大产品线 (F0, G0, F1, F2, F3, G4, F4, F7, H7, MP1, L0, L1, L4, L4+,L5, WB),超过100...
点击进入详情页
本回答由意法半导体(中国)投资有限公司提供
展开全部
把单片机和电脑的串口线连接,然后编程序,让单片机向串口发送数据。如果没出错的话,电脑的串口就能收到数据了。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
#include"main.h"
/*串口调试助手发送asc代码 o 时,
单片机返回数组Buffer[10]
*/
char a;
//-------------------------------------------------------------
void serial_int(void) interrupt 4
{
if(_testbit_(RI))
{
if(SBUF == 'o')
{
SBUF = Buffer[0];
a = 0;
}
}
if(_testbit_(TI))
{
if(asd < 10)
SBUF = Buffer[++a];
}
return;
}
//-------------------------------------------------------------
void main(void)
{
Reset();
while(1)
{
;
}
//-------------------------------------------------------------
void Reset(void)
{
RCAP2H = 0xFF; /*晶振12M 波特率 9600*/
RCAP2L = 0xd9;
T2CON = 0x34;
EA = 1;
ES = 1;
SCON = 0x50;
return;
}
//-------------------------------------------------------------
/*串口调试助手发送asc代码 o 时,
单片机返回数组Buffer[10]
*/
char a;
//-------------------------------------------------------------
void serial_int(void) interrupt 4
{
if(_testbit_(RI))
{
if(SBUF == 'o')
{
SBUF = Buffer[0];
a = 0;
}
}
if(_testbit_(TI))
{
if(asd < 10)
SBUF = Buffer[++a];
}
return;
}
//-------------------------------------------------------------
void main(void)
{
Reset();
while(1)
{
;
}
//-------------------------------------------------------------
void Reset(void)
{
RCAP2H = 0xFF; /*晶振12M 波特率 9600*/
RCAP2L = 0xd9;
T2CON = 0x34;
EA = 1;
ES = 1;
SCON = 0x50;
return;
}
//-------------------------------------------------------------
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询