大家好,帮我看段程序~!数据采集程序:
ORG 0OOOH
LJMP DATA_SAM
CLK EQU P3.3
DIN EQU P3.4
DOUT EQU P3.5
CS EQU P3.7
DATA_SAM :
MOV R0,30H ;数据缓冲区首地址30H→R0
MOV R1,#00000000B ;0通道方式/通道数据
ACALL RD_AD ;第一次读取的转换结果可能不准弃。
MOV R1,#00000000B ;0通道有效转换开始
ACALL RD-AD
MOV @R0, R2 ;保存转换结果
INC R0
MOV @R0, R3
RET
单片机通过编程产生串行时钟,并按时序发送与接收数据位,完成通道方式/通道数据的写入和转换结果的读出,程序如下,供数据采集模块“DATA_SAM” 调用。
RD-AD: ;TLC2543AD转换子程序,R1内容为控;制字,结果的高;;8位保存在R2,低4位保存;在R3。
CLR CLK ; 置CLK为低
SETB CS ; 置CS为高
NOP
NOP
CLR CS ; 置CS为低,转换开始
MOV R4,#08 ; 8位控制字移入TLC2543,高8位;结果移出TLC2543
MOV A,R1 ; 控制字装入A中
LOOP1:
MOV C,DOUT ; 读转换结果
RLC A ; A寄存器左移,移入结果数据,移出方式/通道控制位
MOV DIN,C ; 1位控制字移入TLC2543
SETB CLK ; 设置I/O时钟为高
NOP
NOP
NOP
CLR CLK ;清I/O时钟口
DJNZ R4, LOOP1 ; R4不为0。则返回LOOP1
MOV R2, A ; 结果的高8位装入R2
MOV A, #00H ; 复位A寄存器
MOV R4, #04 ; 读取低4位转换结果
LOOP2:
MOV C, DOUT ;读转换结构
RLC A ;A寄存器左移,移入结果数据位
SETB CLK
NOP
NOP
NOP
CLR CLK ;清I/O时钟口
DJNZ R4, LOOP2 ;R4不为0则返回LOOP2
MOV R3, A ;低4位转换结果装入R3
SETB CS ;设置片选为高
RET
错误的是DATA_SAM块中的那2条
MOV @R0,R2 331错误
INC R0
MOV @R0,R3 331错误
我查了TLC2543和单片机AT89C2051的编程,人家都是这样遍的,为什么我用软件仿真的时候会出错~!