程序用在摇摇棒上,我用VB写了发送汉子代码的界面,可是摇摇棒上不能显示。。 估计是不能接收 请高手帮我看看是哪里不对
我用的晶振是12M的
串口初始化
TMOD=0x62;//用了INT0,INT1,T1
TL1=0xFF;
TH1=0xFF;
IE=0x9F;
TCON=0x45;
SCON=0x05;
TH0=-6;
TL0=-6;
TR0=1;
PCON=0x80;
串口中断程序
void RIE(void) interrupt 4
{
RI=0;
if(m==1)
{
if(count1==32)
count=0;
if(count1<=15)
one11[count1]=SBUF;
if(count1>15)
one12[count1]=SBUF;
count1++;
}
if(m==2)
{
if(count2==64)
count2=0;
if(count2<=15)
one11[count2]=SBUF;
if(count2>15&&count2<=31)
one12[count2]=SBUF;
if(count2>31&&count2<=47)
two11[count2]=SBUF;
if(count2>47&&count2<=63)
two12[count2]=SBUF;
count2++;
}
if(m==3)
{
if(count3==96)
count3=0;
if(count3<=15)
one11[count3]=SBUF;
if(count3>15&&count<=31)
one12[count3]=SBUF;
if(count3>31&&count3<=47)
two11[count3]=SBUF;
if(count3>47&&count3<=63)
two12[count3]=SBUF;
if(count3>63&&count3<=79)
three11[count3]=SBUF;
if(count3>79&&count3<=95)
three12[count3]=SBUF;
count3++;
}
if(m==4)
{
if(count4==128)
count4=0;
if(count4<=15)
one11[count4]=SBUF;
if(count4>15&&count4<=31)
one12[count4]=SBUF;
if(count4>31&&count4<=47)
two11[count4]=SBUF;
if(count4>47&&count4<=63)
two12[count4]=SBUF;
if(count4>63&&count4<=79)
three11[count4]=SBUF;
if(count4>79&&count4<=95)
three12[count4]=SBUF;
if(count4>95&&count4<=111)
four11[count4]=SBUF;
if(count4>111&&count4<=127)
four12[count4]=SBUF;
count4++;
}
if(m==5)
{
if(count5==160)
count5=0;
if(count5<=15)
one11[count5]=SBUF;
if(count5>15&&count5<=31)
one12[count5]=SBUF;
if(count5>31&&count5<=47)
two11[count5]=SBUF;
if(count5>47&&count5<=63)
two12[count5]=SBUF;
if(count5>63&&count5<=79)
three11[count5]=SBUF;
if(count5>79&&count5<=95)
three12[count5]=SBUF;
if(count5>95&&count5<=111)
four11[count5]=SBUF;
if(count5>111&&count5<=127)
four12[count5]=SBUF;
if(count5>127&&count5<=143)
five11[count5]=SBUF;
if(count5>143&&count5<=159)
five12[count5]=SBUF;
count5++;
}
单片机串口通信,发送数据感觉不对,请大佬帮看看?
你的主循环转得太快,前一个数据还没发送完就把SBUF又填充新数值,这样很容易破坏发送的帧。既然你不开中断,就应当采用查询工作方式,查询TI标志位确认发送完成之后再进行下一步工作。
单片机发送的数据在串口调试助手接收正常,但是在linux下接收出现乱码...
1、具体检查方法,将linux中的发送和接受进行短接(就是将发送和接受连起来),看看接受的数据是否相同。这一步中,因为使用的是同一个串口,所以串口的设置一定是相同的。这样如果都收不正确,可以确定是linux串口驱动的问题。2、详细设置linux串口的参数,包括波特率,校验,串口位数。将linux和单片机设置...
向单片机串口发送汉字如何能解码出正确的汉字?为什么我用串口助手 16进...
你可以看下然后自行修改,程序是可以用的。一个是8*8显示的,一个是16*16的 8*8显示程序: #include <iom16v.h> #include <macros.h> #define uchar unsigned char #define uint unsigned int const tabPB[8]=; \/\/const tabPD[8]=; const tabPD[8]=; \/\/心形 \/\/const tabPD[8]=;...
单片机收发程序出现数据错位的现象?是什么原因呢?
把单片机两个口的波特率或数据格式设置相同,把PC串口的发送和接受波特率或数据格式设置相同,那么就可以了
怎么用51单片机向串口调试助手发送字符串?有程序解释更好啊,求解~
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];\/\/启动发送 ...
51单片机串口接收数组数据有误
在处理单片机串口接收数据时,如果遇到接收数组数据有误的问题,可以尝试调整发送数据的方式。例如,可以将数据以十六进制形式发送,这样可以减少数据转换的复杂性。对于发送端,如果数据量较小,且发送时间间隔较短,可以采用中断查询的方式来接收数据包。具体实现如下:在中断服务程序中,可以定义一个接收缓冲...
单片机串口控制数码管显示两位数字时显示不对。
程序都是对的,你对16进制 10进制数。可能没理解透彻。。。你的数码管显示是10进制显示模式。所以出现了这种情况。你可以改成16进制显示。也可以自己发送数据的时候换算一下10进制应该是什么?是否跟显示的值一样?文本模式也是显示的对的。。。下面网址是ASII码表。你发送的文本1ASII码值就是49(10...
51单片机串口接收错误,发一串固定字符串,接受的也是固定的,只是接受错 ...
12M可以达到这个波特率...查一下硬件跟软件的搭配..有必要的话降速测试 或是把接收资料取反...
用串口调试助手给单片机发送一串字符串,单片机接受完之后向串口助手回显...
发送子程序修改如下:\/*发送子程序*\/void fasong(uchar dat){ SBUF=dat; while(TI==0) { _nop_; } TI=0; } DMF_WYW | 发布于2012-06-03 举报| 评论(1) 0 1 为您推荐: 串口调试助手发送文件 传感器串口调试 串口调试stx 串口数字字符串 串口调试站号 串口调试开始码 串口接受字符串是...
单片机串口发送数据 电脑上串口助手接收正常,但经蓝牙模块发送后蓝牙...
看现象是 bit4丢失后bit765顶替bit 654, bit7被置位为1 不知道细节,原因只能猜 一种可能是波特率误差大了,可以降低波特率试试看,或者不降低到其它波特率,但把发送波特率故意调慢5%~10%先看看现象