‘壹’ 求一个 串口通信发送的程序 用汇编的
;程序如下:
MOV SCON, #0x50; //串口工作在方式1.
ANL PCON, #0x7F; //SMOD=0
MOV TMOD, #0x20; //定时器1当做波特率发生器.
MOV TH1, #0xFD; //初值, 9600 @ 11.0592MHz
MOV TL1, #0xFD;
SETB TR1;
LOOP:
MOV A, #0
MOV SBUF, A
JNB TI, $
CLR TI
INC A
CJNE A, #31, LOOP
SJMP $
end
‘贰’ 汇编 串口通信
参考:
http://hi..com/do_sermon/item/c382edd859cf70d8241f4067
‘叁’ 单片机串口通信程序怎么用汇编写
单片机串口通信程序用汇编写的仿真实例,可以仿真试试,参考一下吧。
很抱歉,回答者上传的附件已失效
‘肆’ 串口通信汇编程序解释
首先,你这样的写法是不对的,
ORG 001BH
AJMP sign0
这两句应该放到LJMP main后面,以免中间的字节占用到001B,那样就会出乱的。
第二、你的定时器0是用做中断吗?没看见你的中断入口。
第三、你的中断处理程序这样写是大忌:LJMP $ ;虚拟主程序,等待中断
中断处理程序不跳出去,除非是中断优先级更高的中断才能进来,而且这样做程序的流程更混乱
第四、你的p1.0取反在两个地方都写了,最好只在一秒处理里面写。
‘伍’ 汇编串口通信程序
用8250做吗???
框图我搞不出来,2台机子之间的数据输送倒可以
一开始初始化8250,搞成双工的相同的波特和格式
然后一开始判断有没有那4个错误,没有则判断
数据接受准备好没有,准备好则就去接受,然后打印到
屏幕,没准备好则去检查发送准备好没有,好了就可以打字传送了,没准备好则返回继续检查那4个错误
‘陆’ 求单片机高手编写一个串口通信接受字符程序,用汇编语言. 急急急!!!!
ORG 00H
AJMP MAIN
ORG 23H
AJMP URT;串口中断
ORG 30H
MAIN:
MOV SP,#60H
MOV R0,#50H
MOV TMOD,#20H;T1工作方式2
SETB EA;开总中断
ACALL URTINIT;串口初始化
AJMP $ ;等待串口中断
URT: ;串口中断每次只收1个字节,未完继续进入中断,接收。
PUSH ACC
JNB RI,URT1
URT0:
CLR ES
CLR RI
MOV A,SBUF
MOV @R0,A;先保存
INC R0
CJNE R0,#60H,URT1
CLR EA
URT1:
SETB ES
POP ACC
RTI: RETI
URTINIT:
MOV SCON,#50H;串口工作方式1,接收
MOV TH1,#0F4H;11.0592M2400BPS
MOV TL1,TH1
SETB TR1;开启定时器
SETB ES;开启串口中断
RET
‘柒’ 单片机 汇编程序 串口通信
HERE: AJMP HERE
SINT: MOV P1,R0
JB RI,RECV
JB TI,SEND
AJMP HERE
中断里面直接用这种方式直接跳到主程序,我以前还是真没试过,不过估计能行吧。 我一直用RETI 返回堆栈地址位置的。
但下面这地方肯定有错的,就是执行MOV SBUF,A 后没有等待!!
正确的顺序是: CLR TI ;清发送标记
MOV SBUF,A ;发送
JNB TI,$ ; 这里是如果TI没有被置1就等待,因为送数可能还没有完成。。就去执行别的动作,可能会有问题。
接收也一样要等待:
MOV A,SBUF
JNB RI,$ ;等待接收完成标志。
另外:
CPL P1.7 有问题,我猜你是用P1.7来观察接收次数,
但由于CPL P1.7取反命令是读一下P1.7再取反输出的,如果你的p1.7外接电路不科学,不合理,可能会出现你每次不管发1,还是发0,p1.7都是低电平,比如你将p1.7直接接在npn三管基极就会一直是0V或0.7V , P1.7的读入值会总为0,CPL 输出会总是为1
你可以用内部(非P口的位地址过度一下),比如: CPL 01H
MOV C,01H
MOV P1.7,C
你先试验吧。。。
‘捌’ 汇编语言编程 串口通信 程序
ORG 0000H
LJMP MAIN
ORG 0030H
MAIN:
MOV TMOD,#20H
MOV TH0,#0F4H
MOV TL0,#0F4H
SETB TR1
MOV SCON,#50H
LOOP:
JNB RI,$
CLR RI
MOV A,SBUF
CJNE A,#'A',LOOP1
MOV A,#'O'
LCALL SEND
MOV A,#'K'
LCALL SEND
SJMP LOOP
LOOP1:
CJNE A,#'B',LOOP2
MOV A,#'E'
LCALL SEND
MOV A,#'R'
LCALL SEND
LCALL SEND
SJMP LOOP
LOOP2:
MOV A,#'N'
LCALL SEND
MOV A,#'O'
LCALL SEND
LJMP LOOP
SEND:
MOV SBUF,A
JNB TI,$
CLR TI
RET
END
‘玖’ 51单片机串口通信(汇编)
HERE: AJMP HERE
SINT: MOV P1,R0
JB RI,RECV
JB TI,SEND
AJMP HERE
中断里面直接用这种方式直接跳到主程序,我以前还是真没试过,不过估计能行吧。 我一直用RETI 返回堆栈地址位置的。
但下面这地方肯定有错的,就是执行MOV SBUF,A 后没有等待!!
正确的顺序是: CLR TI ;清发送标记
MOV SBUF,A ;发送
JNB TI,$ ; 这里是如果TI没有被置1就等待,因为送数可能还没有完成。。就去执行别的动作,可能会有问题。
接收也一样要等待:
MOV A,SBUF
JNB RI,$ ;等待接收完成标志。
另外:
CPL P1.7 有问题,我猜你是用P1.7来观察接收次数,
但由于CPL P1.7取反命令是读一下P1.7再取反输出的,如果你的p1.7外接电路不科学,不合理,可能会出现你每次不管发1,还是发0,p1.7都是低电平,比如你将p1.7直接接在npn三管基极就会一直是0V或0.7V , P1.7的读入值会总为0,CPL 输出会总是为1
你可以用内部(非P口的位地址过度一下),比如: CPL 01H
MOV C,01H
MOV P1.7,C
你先试验吧。。。
‘拾’ 汇编语言之串口通信
ORG 0000H
LJMP START
ORG 0023H
LJMP UARTInterrupt
;这段程序没有意义呀,永远执行不了
MOV R1,#8EH ;AUXR
MOV A,#40H ;T1
ORL A,@R1
MOV @R1,A ;T1, 1T Mode
START:
MOV SP,#60H
LCALL InitUART
LOOP:
;add your code here!
LJMP LOOP
InitUART:
MOV TMOD,#20H
MOV SCON,#50H
MOV TH1,#0DCH
MOV TL1,TH1
MOV PCON,#00H
SETB EA
SETB ES
SETB TR1
RET
UARTInterrupt:
JB RI,IsUART_Receive
CLR TI
RETI
IsUART_Receive:
CLR RI
PUSH ACC
MOV A,SBUF
;========================
;add your code here!
;========================
POP ACC
RETI
SendOneByte:
CLR ES
CLR TI
MOV SBUF,A
WaitSendFinish:
JNB TI,WaitSendFinish
CLR TI
SETB ES
RET
END
;其余没有什么问题,就是只接受数据,发送没有调用。