㈠ 51单片机中,用串口通信助手向单片机发送数据时,不用16进制的话,发送1,勾上16
发送的时候选择16进制发送,否则按字符发送,就是发送ASCII码,1的ASCII码是49,16进制就是31.
具体网络一下ASCII
㈡ 51单片机,通过串口助手向单片机发送字符串,单片机将字符串逆序发送回计算机,用C语言编程
像这种发送字符串的,需要有一个字符串结束标志,不能用0作为字符串结束标志了!这里以回车作0xd为结束标志!
#include <reg51.h>
typedef unsigned char uint8;
bit flag = 0;
uint8 idata buf[30];
uint8 ct;
void InitUART(void) //串口初始化 9600bps
{
TMOD = 0x20;
SCON = 0x50;
TH1 = 0xFD;
TL1 = TH1;
PCON = 0x00;
EA = 1;
ES = 1;
TR1 = 1;
}
void Send(uint8 c)
{
SBUF = c;
while(!TI);
TI = 0;
}
void main(void)
{
char j;
InitUART();
while(1)
{
if(flag) //是否接收到回车 字符串发送完
{
flag = 0;
for(j = ct ; j > 0 ; j--)
{
Send(buf[j-1]);
}
}
}
}
void UARTInterrupt(void) interrupt 4
{
static uint8 i = 0;
if(RI)
{
RI = 0;
buf[i++] = SBUF;
if(SBUF == 0x0d) //接受到回车
{
ct = i-1 ;
flag = 1;
i = 0;
}
}
else
TI = 0;
}
仿真结果
程序作为参考 希望 你自己能理解程序!只有自己掌握了才能很好地用!
㈢ 用51单片机与PC进行通信,通过串口助手进行调试
首先检测你的硬件电路。
方法是,拔掉你的单片机,把rxd和txd脚短路。然后在串口调试助手里面,选任意波特率发送任意字符,如果收到的是发送的内容,则能肯定max232和rs-232之间连接正确。
接下来就要检查你的程序了
最容易出问题的就是波特率了。
如果你用12m的晶振,那么,最好设置波特率为1200
或
2400。
㈣ 51单片机串口发送的数据和51助手收到的数据不一样,什么原因
波特率问题,建议用11.05926MHZ的晶振并重新计算初始值
㈤ 怎么用手机蓝牙调试助手控制51单片机上的LED灯亮
#include<reg52.h>
typedef unsigned char unit8;
typedef unsigned short unit_16;
void Receive_Handle(unit8 Value)
{
switch(Value)//具体发送过来的是什么数据 需要自己自己通过串口调试助手查看
//改变这里面对应的数据即可
{
case 0x00:P2=0xff;break;
case 0x01:P2=0xfe;break;
case 0x02;P2=0xfd;break;
case 0x03:P2=0xfb;break;
case 0x04:P2=0xf7;break;
default:P2=0xff;break;
}
}
void main()
{
TMOD |= 0x20;//定时器1 工作方式2 8位自动重装模式
SCON = 0x50;//串口工作方式1 允许接收 8位数据位
TH1 = 0xfd; //波特率9600
TR1 = 1;
ES = 1;
EA = 1;
while(1);
}
void UART1_Rountine()interrupt 4
{
static unit8 Receive_Data=0;
ES = 0;
while(!RI);
RI=0;
Receive_Data = SBUF;
Receive_Handle(Receive_Data);
ES = 1;
}
/*---------------------------------------------------------------------------------------
如有问题可再咨询
----------------------------------------------------------------------------------------*/
㈥ 求个口串口助手控制51单片机LED亮与灭程序
#include<stc89.h>
#define uchar unsigned char
#define uint unsigned int
sbit led1 = P1 ^ 1; //定义两个LED灯
sbit led2 = P1 ^ 2; // 这里需要你自己定义你的I/O口
uchar a;
//void delay(uint z);
void init();
void main()
{
init();
while(1)
{
if (a == 0x31)
{
led1 = 0;
led2 = 0;
}
if (a == 0x32)
{
led1 = 1;
led2 = 1;
}
if (a == 0x33)
{
led1 = 0;
}
if (a == 0x34)
{
led1 = 1;
}
}
}
void init() //初始化
{
TMOD = 0x20;
TH1 = 0xfd;
TL1 = 0xfd;
TR1 = 1;
ES = 1;
EA =1;
SCON=0x50;
}
/*void delay(uint z) //延时
{
uint x,y;
for(x=110;x>0;x--)
for(y=z;y>0;y--);
}
*/
void Serial() interrupt 4 //串口中断程序
{
RI = 0;
a = SBUF;
}
/*
----------------
说明:
波特率 9600
在串口助手里面(把16进制关闭) 输入 31 是 开启灯亮
32 是 关闭
也可以用switch语句
----------------
*/
㈦ 51单片机通信问题,串口调试助手能接受单片机发送的数据,但是单片机却不能接受串口调试助手发送的数据。
不需要延时的。下面的程序可以正常接收。
ORG 0000H
SJMP START
ORG 0030H
START:
MOV P1, #0FBH ;给p1附初值
MOV SCON, #50H ;设置串口工作方式1
MOV PCON, #00H ;波特率不加倍
MOV TMOD, #20H ;设置定时器1工作方式2
MOV TL1, #0FDH
MOV TH1, #0FDH ;给定时器赋值,波特率为9600
SETB TR1 ;启动定时器
MAIN:
JBC RI, RCV ;若RI为1,则转到RCV,否则跳转MAIN
SJMP MAIN
RCV:
MOV A, SBUF ;将接受到的数据读到累加器中
MOV P1, A ;将累加器中的数据送到P1口显示
SJMP MAIN ;跳转主程序
END
㈧ 51单片机 如何编程实现通过串口助手输入内容
可以的,实际上就是利用串口实现输入输出,只需要正确设置串口波特率就行了。
void mInitSTDIO( void )
{
SCON = 0x50;
PCON = 0x80;
TMOD = 0x21;
TH1 = 0xf3; /* 24MHz晶振, 9600bps */
TR1 = 1;
TI = 1;
}
main( )
{
mInitSTDIO( ); /* 为了让计算机通过串口监控演示过程 */
printf( "Start\n" );
while(1);
}
㈨ 我想知道proteus仿真的51单片机怎样发送数据到串口助手 很急的 能解答吗
要用PROTEUS中的一个元件:COMPIM,还要安装一个虚拟终端(这个上网找吧),在程序,COMPIM,虚拟终端,串口助手的通信参数都要一致,如果程序与接线正确,就可以通信了.
㈩ 怎么用51单片机向串口调试助手发送字符串有程序解释更好啊,求解~
ASCII码在单片机中也是用16进制来表示的,只是解码后显示的是字符,你要是随便发一个字符,串口调试助手选择字符显示接收就可以显示一个字符出来(可能我们不认识这个字符)。发送一个字符串就是不停的发送直到发送完毕,51单片机有自己的串行发送端口P3.0和P3.1端口,但是它是一个字节一个字节发送的,发送完一个字节会产生一个中断(也可以用判断TI的方式判断是否发送完),中断响应后再次启动发送SBUF=0Xxx,就会自动连续的发送,再加上判断就可以控制发送的字节数。
串口初始化:
void uart_init()
{
TMOD=0x20;//定时器1,模式2
SCON=0x50;//串口通讯方式1
TH1=0xfd;//波特率9600
TL1=0xfd;
button=0;
delay(1);
TI=0;//发送中断标志位清零
RI=0;//接收中断标志位清零
TR1=1;//启动定时器1
EA=1; //使能全局中断
ES=1; //启动串口中断
}
}
void main()
{ P1=0xff;
uart_init() ;
while(1)
{
}
// 串行中断程序
void commIntProc() interrupt 4
{
if(TI)
{
TI = 0;
if(sendPosi < sendCount) //判断是否发送完成
{
sendPosi++; //发送一次计数器加一
SBUF = sendBuf[sendPosi];//启动发送
}