好难 好难好难 |
你用的晶振是多少啊? |
GG276192978 发表于 2017-11-15 11:34 你试试 #include <reg51.h> void InitUART(void) { TMOD=0x20;//定时器1方式2(8位重载) TH1=0xfd;//定时器1重载 波特率9600 TL1=0xfd;//定时器1重载 TR1=1; //开定时器1 SM0=0; //设置串口方式1(8位UART波特率可变) SM1=1; //设置串口方式1(8位UART波特率可变) } void SendOneByte(void) { SBUF = 0x01; while(!TI); TI = 0; } void main(void) { InitUART(); while(1) { SendOneByte(); } } |
你用的是12T?波特率是多少? 你自己完整的程序发上来看看 |
lucyxi 发表于 2017-11-15 20:50 你这个 是哪里的 ? 看这数据帧也不想是协议里面的,难道是自己定义的么? 还有那个起始位都是0103开始,应该有规律,只是没有参考数据 |
数据 : 0103 0000000000000000 1f 0103 0100000000000000 11 0103 0200000000000000 03 0103 0300000000000000 0d 0103 0400000000000000 12 0103 0500000000000000 1c 0103 0600000000000000 0e 求大佬 告知 算法 |
不大明白![]() |
我把你的程序烧写进去后, 结果 如下: 01 40 01 40 01 40 01 40 01 40 01 40 40 40 40............后面一直都发送40,这是什么问题呢 |
我用11.0592M的晶振,我自己把程序改了,但是在正确接收到数据之前,前面一直有几组数据帧是错误的。我查了资料说是串扰,可是我用的开发板有没有引入其他信号,怎么会有串扰这个问题呢,很纳闷求解答? 再请教一个问题,比如说我想只发一次,这个函数一直在循环,具体我要怎么处理 |
要求只发送特定的值,很简单嘛。 在你的程序中,去掉中断功能,串口中断是为了接收而准备的。 你的程序我改为这样,你试试: #include <reg51.h> void InitUART(void) { TMOD = 0x20; SCON = 0x50; TH1 = 0xFD; TL1 = TH1; PCON = 0x00; TR1 = 1; } void SendOneByte(void) { SBUF = 0x01; while(!TI); TI = 0; } void main(void) { InitUART(); while(1) { SendOneByte(); } } 我没有检验你的波特率,因为你没有告诉我硬件是怎么样的,如晶振频率等 |