我的程序目的是51
单片机的按键1按下时单片机就往外发送56 0036 01 00这几个十六进制数,按键不按就不发送。问题在于按键按下,在串口助手接收区接的是00 56 00 36 01 00,不知道这是为什么? 串口助手的HEX显示打钩了。哪位高手帮忙看看程序哪里的问题.谢谢
#include<reg51.h>
#include<string.h>
#include<intrins.h>
unsigned char ch;
bit flag=0;
sbit K1=P3^1;
sbit K2=P3^2;
sbit LED=P1^0;
unsigned char start_photo_cmd[]={0x56,0x00,0x36,0x01,0x00};
void delay(unsigned char xms)
{
unsigned int i,j;
for(i=xms;i>0;i--)
for(j=110;j>0;j--);
}
void init()
{
SCON=0x50;
TMOD=0x20;
PCON=0x80;//
TH1=0xfd; //晶振11.0592MHZ,SMOD=1,波特率19200bps 如果晶振为22.1184NHZ时,波特率为38400
IE|=0x90;
TR1=1;
//
}
void uart_sendbuf(unsigned char *buf,unsigned char n)
{
unsigned char i;
ES=0;
for(i=0;i<n;i++)
{
SBUF=buf[i];
while(
ti==0);
TI=0;
}
ES=1;
}
void ser() interrupt 4 using 3
{
RI=0;
ch=SBUF;
flag=1;
}
main()
{
init();
while(1)
{
if(K1==0)
{
delay(10);
if(K1==0)
{
while(K1==0);
uart_sendbuf(start_photo_cmd,5);
}
}
}
}
把uart_sendbuf(start_photo_cmd,5);改为uart_sendbuf(start_photo_cmd,4);试试
当你按下按键后,TXD引脚变低,于是相当于发送了一个起始位,于是就有了最开始的数据0。至于为何是0x00而不是其他值,我希望你自己找找原因。
那么为什么又只有一个数据0x00呢,而不是多个呢?停止位在这里起了作用。
你做个实验:
把发送程序去掉,每当你按一次按键,你的串口调试助手就会接收到一个数。试试吧。
一周热门 更多>