vb与51单片机通信,下位机的问题,高手指点啊

ORG0000HLJMPMAINORG000BHLJMPSCANORG0023HLJMPRXTORG0060Hmain:movsp,#60MOVTMOD,#21HMOVS... ORG 0000H
LJMP MAIN
ORG 000BH
LJMP SCAN
ORG 0023H
LJMP RXT
ORG 0060H

main: mov sp,#60
MOV TMOD, #21H
MOV SCON, #50H
MOV TH1,#0fdh ;9600bit
MOV TL1,#0fdh
MOV TH0,#0EEH ;5ms
MOV TL0,#00H
SETB EA
SETB REN
SETB TR1
SETB ET0
SETB TR0
SETB ES
wait: MOV R0,#50H
ACALL show
JMP wait
SHOW:RET
SCAN: PUSH ACC
PUSH PSW
SCAN2: POP PSW
POP ACC
RETI
RXT: CLR ES
PUSH ACC
PUSH PSW
JNB RI,RXT_END
CLR RI
MOV A,SBUF
MOV @R0,A
INC R0
CJNE R0,#54H,HAND
MOV R0,#50H
HAND: NOP
JNB TI,RXT_END
CLR TI
MOV A,#0FH
MOV SBUF,A
RXT_END:POP PSW
POP ACC
SETB ES
RETI
END
我使用12MHZ晶振,我做了简单的发送程序,证明串口是通的,而且连接线没问题;
我需要实现的功能是RS232向单片机发送5个8位16进制数(如:0F01010101)
但是调试很久也没搞好,不知道是中断问题,还是串行通信问题,希望大虾们指教啊!!!
展开
 我来答
巨季雅d0
2011-02-25 · TA获得超过1365个赞
知道小有建树答主
回答量:1101
采纳率:0%
帮助的人:620万
展开全部
你用是汇编语言,估计现在看懂汇编的人不多,虽然我以前写过汇编程序,现在也不想看了,对于你的问题描述,我想问你两个问题:
1、单片机能接收到单字节(如0AAH)吗?
2、中断等参数设置是否正确。

如果单字节能接收,说明你的设计没有问题,一定是中断处理除了问题。

给一段我的中断处理程序,用c语音编写的。

//串口接收中断函数
void serial () interrupt 4 using 3
{
EA=0;
if(RI)
{
unsigned char ch;
RI = 0;
ch=SBUF;
dat[num++]=ch;
}
EA=1;
}

其中dat[num]就是想获取的十六进制数据
VB编写的程序,我也做过,

希望对你有帮助
OK
更多追问追答
追问
昨天一直开不了,然后我发TR1置位,发现应该能进入中断,但是发现RI标志位不为1,
赋值进不去,例如我用串口助手发数据,
0F0101010101,回复出来的数字不是0F0F0F0F0F,而是一段或多或少的乱码
奇怪,指点啊高手
RXT: JNB RI,RXT_END-------RI标志位
CLR RI
。。。。。
HAND: NOP
JNB TI,RXT_END
CLR TI
MOV A,#0FH -----写0F
MOV SBUF,A
追答
PC接收你选的是字符型还是16进制接收

。估计你是选择了字符型接收了

参考资料: http://zhidao.baidu.com/team/view/%E5%8D%95%E7%89%87%E6%9C%BA-CAN

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
tarzanfun
2011-03-02 · TA获得超过587个赞
知道小有建树答主
回答量:108
采纳率:0%
帮助的人:76.2万
展开全部
汇编不太想看,就没全看,但是有两个地方和在一起绝对错误,12M的晶振用9600的波特率是绝对不行的,我个人使用2400的波特率最后一位还会错误,但勉强能通信,所以两个建议:
1,换11.0592的晶振
2. 换成2000一下的波特率
其他的错误暂时不挑了。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
47okey
2011-02-25 · TA获得超过1.2万个赞
知道大有可为答主
回答量:5900
采纳率:75%
帮助的人:2369万
展开全部
其它未细看。首先你的晶振选择得不对,不能用12M,误差太大(8.51%)。如果波特率不变,晶振要用11.0592M(误差为0 )。如果晶振不变,波特率可改成2400试试(误差0.16%)。
MOV TH1,#0F3H ;2400
MOV TL1,TH1
追问
我已经按您的修改了;
[14:23:00 --- Tx] 0F 01 01 01 01
[14:23:00 16 Rx] 00 00 80 4C 20
[14:23:09 --- Tx] 0F 01 01 01 01
[14:23:09 0 Rx] 00 3F 20 1C 20
串口检测软件就会向上面那样显示,回复的给我程序设定的不一样!!!
也存不进@R0 的位置,高手指教
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
cdeoug
2011-02-25 · TA获得超过3136个赞
知道小有建树答主
回答量:1224
采纳率:0%
帮助的人:1108万
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式