改变数据发送顺序的程序如下:
OUTDA:MOV A,DBH ;取高位
SWAP ;高4位和低4位交换
MOV DBH,A
MOV A,DBL ;取低位
ANL A,#OFOH ;截取高4位
SWAP ;高4位和低4位交换
ORL A,DBH ;合成,(DBH)=D11 D10 D9 D8 D7 D6 D5 D4
LCALL ASMBB ;顺序转换
MOV DBH,A ;存结果(DBH)=D4 D5 D6 D7 D8 D9 D10 D11
MOV A,DBL ;取低位
ANL A,#OFH ;截取低4位
SWAP ;交换,(A)=D3 D2 D1 D0 0 0 0 0
LCALL ASMBB ;顺序转换
MOV DBL,A ;存结果(A)=0 0 0 0 D0 D1 D2 D3
MOV A, DBH
MOV SBUF,A ;发送高8位
JNB TI $ ;等待发送完成
CLR TI ;发送完毕,清标志
MOV A,DBL
MOV SBUF,A ;发送低4位
JNB TI $ ;等待
CLR TI ;发送完毕
CLR P1.0 ;A寄存器加载到B寄存器
NOP
SETB P1.0 ;恢复
REF
……
ASMBB: MOV R6,#00H
MOV R7,#08H
CLR C
ALO: RLC A
XCH A,R6
RRC A
XCH A,R6
DJNZ R7,AL0
XCH A,R6
RET
以上这种方式的单片机串行通讯口与AD7543的接口电路,其波特率固定为CPU时钟频率的1/12,如果CPU的频率为6MHz,那么波特率为50kbps,位周期为20μs,显然,这种连接方法只能用于高速系统。
3.2 AD7543与单片机普通输入输出口线的连接
AD7543可以用8031的P1口实现数据传送。这种方法的波特率可调,传输速度由程序控制。电路与图2相同,仅把8031的数据输出端由RXD引脚改为P1.1,将移位脉冲输出端由TXD改为P1.2口线,P1.0仍为加载脉冲输出。其程序如下:
FS: MOV R7,#04H
MOV A,DBH;数据高4位
SWAP
LOOP1: RLC A
MOV P1.0 ;输出
LCALL PULSE ;移位脉冲输出
DJNZ R7,LOOP1 ;4位未完继续
MOV R7,#08H
MOV A,DBLH ;数据低8位
LOOP2: RLC A
MOV P1.0 C ;输出
LCALL PULSE ;移位脉冲输出
DJNZ R7,LOOP2 ;8位未完继续
CLR P1.1 ;输出加载脉冲
NOP
SETB P1.1
RET ;传送完毕
PULSE: SETB P1.1 ;输出高电平
MOV R3,#4
PULS1: DJNZ R3,PULS1
CLR P1.1;输出低电平
MOV R3,#4
PULS2:DJNZ R3,PULS2
RET
其中FS为AD7543驱动程序,子程序PULSE为移位脉冲形成程序,改变R3的数值可以改变移位脉冲的频率。从而改变串行通讯波特率。