我要发很多十六进制数, 0012H,0013H,0015 等等
MOV A,#0012H
MOV SBUF,
CLR TI
那是发一个的.
但我想把它们全发出去,一班应该怎么写?
本质上,串口就是串行通信,一次发一个位,一帧发一个字节
它不可能同时发这么多数据
看LZ的意思已经知道了循环发送的方式,也就只有那样了,别无它法
哈哈 他想要一个循环发送最经典的代码 代表我女儿谢谢大家了
经典?
两个思路:
一:定长发送
发送一定的长度(相当于一帧数字)
二:定特殊字符
除非遇到自己定义的特殊字符(像C标准库里定义的是'\0')不然就不停循环发送缓冲区里的数据
呵呵,一般就这两个
ORG 0000H
AJMP START
ORG 000BH
AJMP TIMER1
ORG 0023H
AJMP SERIAL
ORG 30H
START:
MOV DPTR,#TABLE
MOV SP,#5FH
MOV TMOD,#00100101B ;定时计数器1作计数用,1。0不用全置0
MOV PCON,#80H
MOV TH1,#0FDH
MOV SCON,#50H
;预置值,要求每计到6个脉冲即为一个事件
MOV TH0,#0FFH
MOV TL0,#0FAH
SETB REN
SETB TR1
SETB TR0
SETB EA
SETB ET0
SETB ES
GG:JNB P1.1,COMMFS
AJMP GG
;串口发数据
COMMFS:
MOV A,#01FH
;CLR A
;MOVC A,@A+DPTR
;MOV SBUF,A
;CLR RI
;CJNE A,#01H,LOOP1
;LCALL DELAY
;AJMP GG
;LOOP1:INC DPTR
;AJMP COMMFS
MOV SBUF,A
CLR RI
LCALL DELAY
JBC TI,GG ;如果TI等于1则清TI并转GG
;串口收数据
SERIAL:
MOV A,SBUF
MOV P2,A
CLR RI
RETI
;串口发数据
TIMER1:
MOV TH0,#0FFH
MOV TL0,#0FAH
;MOV A,#011H
;改一次发多个数
LX:CLR A
MOVc A,@a+DPTR
MOV A,#05H
MOV SBUF,A
CLR RI
CJNE A,#01H,LOOP2
LCALL DELAY
RETI
LOOP2:INC DPTR
AJMP LX
;MOV SBUF,A
;LCALL DELAY
;CLR RI
;RETI
;延时子程序
DELAY:
MOV R7,#0FFH
DJNZ R7,$
RET
;表数据
TABLE:DB 05H,05H,31H,05H,05H
DB 05H,05H,05H,05H,05H
DB 01H
END
帮我看看我串口发送有什么问题