哪位大哥给个单片机串口程序了(最好是汇编

哪位大哥给个单片机串口程序了(最好是汇编)就是电脑发送个数据“10”能后单片机接收到后,再判断数据是不是为“10”如果是10往下不是10跳转... 哪位大哥给个单片机串口程序了(最好是汇编) 就是电脑发送个数据 “10”能后单片机接收到后,再判断数据是不是为“10”
如果是10往下 不是10跳转
展开
 我来答
蓝草飘香MC
2011-08-28 · TA获得超过165个赞
知道小有建树答主
回答量:95
采纳率:0%
帮助的人:118万
展开全部
楼上那个太纠结了,估计那里找来的 ,改都要改死你,下面这个是接收加上判断数值的片段程序,可以参考然后做适当改正
ORG 0000H
LJMP MAIN
ORG 0030H

MAIN: SETB TR1
MOV TMOD ,#20H
MOV SCON ,#50H
MOV TH1,#0FDH
MOV TL1,#0FDH
LOOP: JNB RI, $
MOV A, SBUF
CJNE A,#10 , LOOP
(然后是接下来的程序)

ps: 我这个是按照晶振设置为11.0592HZ做的,你要按照自己的晶振再计算机定时器的初始值,这个需要注意, 是程序的关键,时序出问题是无法传送指令的, 祝您的问题早日解决~~
10伯乐01
2011-08-26 · TA获得超过501个赞
知道小有建树答主
回答量:95
采纳率:0%
帮助的人:100万
展开全部
给您一个相类似的,程序有注释,您先看看。

; //*****************************************************************
; //* 功能: 双机串口接收程序,主机连续接收R0个数据存放在DPTR开始 *
; //* 的单元中。对接收到的数据进行奇偶校验,若正确则发送00作 *
; //* 应答信号,否则发送ff作应答信号。串口工作在方式3, *
; //* 由定时器1提供波特率。 *
; //*****************************************************************
发送程序代码:
ORG 0000H
SJMP MAIN
ORG 0023H
LJMP COM_INT
MAIN:
MOV SP, #60H
MOV TMOD,#20H
MOV TH1, #0F4H
MOV TL1, #0F4H ;初始值为0XF4 设置波特率为2.4kb/s
MOV PCON,#80H
SETB TR1 ;打开计数器
MOV SCON,#90H ;串口工作在方式3 并且允许接收
MOV DPTR,#DATA_COM ;发送数据的首地址
MOV R0, #00H
SETB EA ;CPU开中断
SETB ES ;允许串口中断
MOV A, R0
MOVC A, @A+DPTR
MOV P1, A
ACALL DELAY
ADD A, #00H
MOV C, P
MOV TB8, C
MOV SBUF,A ;启动串口中断 传数据
SJMP $ ;等待中断
COM_INT:
JB RI, COM_RECEIVE ;看中断是不是由于接收引起的 是则转接收
CLR TI ;否则是发送中断 此时需软件清中断
SJMP COM_END
COM_RECEIVE:
CLR RI
MOV A, SBUF
SUBB A, #01H
JC RIGHT ;应答信息正确 则结束 否则重新发送本次数据
MOV A, R0
MOVC A, @A+DPTR
ADD A, #00H
MOV C, P
MOV TB8, C
MOV SBUF,A ;启动串口中断 重新传本次数据
SJMP COM_END
RIGHT:
INC DPTR
INC R0
MOV A, R0
MOVC A, @A+DPTR
MOV P1, A
ACALL DELAY
ADD A, #00H
MOV C, P
MOV TB8, C
MOV SBUF,A
CJNE R0, #0AH, COM_END
CLR ES
COM_END:
RETI
DELAY:
MOV R2, #100
LOOP:
MOV R3, #100
DJNZ R3, $
DJNZ R2, LOOP
RET
DATA_COM:
DB 0C0H, 0F9H, 0A4H, 0B0H, 099H, 092H, 082H, 0F8H, 080H, 090H
END

接收程序代码:

ORG 0000H
LJMP MAIN
ORG 0023H
LJMP COM_INT
ORG 0100H
MAIN:
MOV SP, #60H
MOV TMOD,#20H
MOV TH1, #0F4H
MOV TL1, #0F4H ;初始值为0XF4 设置波特率为2.4kb/s
MOV PCON,#80H
SETB TR1 ;打开计数器
MOV SCON,#90H ;串口工作在方式3 并且允许接收
MOV R1,#30H ;接收数据的首地址
MOV R0, #00H
SETB EA ;CPU开中断
SETB ES ;允许串口中断
SJMP $
COM_INT:
JB RI, COM_RECEIVE ;看中断是不是由于接收引起的 是则转接收
CLR TI ;否则是发送中断 此时需软件清中断
SJMP COM_END
COM_RECEIVE:
CLR RI
MOV A, SBUF
ADD A, #00H
MOV C, P
JC DATA_JS ;接收到的数据为奇数时转移
ORL C, RB8 ;接收到的数据为偶数 则C应该等于0才正确
JC ERROR ;如果c=1 则说明接收错误
SJMP RIGHT ;否则是正确的
DATA_JS:
ANL C, RB8 ;数据为奇数 C应该等于1才正确
JC RIGHT
ERROR: ;接收到错误数据则发送0ff返回
MOV A, #0FFH
MOV SBUF,A
SJMP COM_END
RIGHT: ;接收正确则存放起来并发送00返回
MOV @R1, A
MOV P1, A
ACALL DELAY
MOV A, #00H
MOV SBUF, A
INC R1
INC R0
CJNE R0, #0AH, COM_END
CLR ES
COM_END:
RETI
DELAY:
MOV R2, #100
LOOP:
MOV R3, #100
DJNZ R3, $
DJNZ R2, LOOP
RET
END
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式