📄 2543adc.txt
字号:
AD12:NOP ;TLC2543 A/D转换子程序
NOP ;入口:R1=通道号,R0=上一工作周期转换的数据高8位存放的内存地址
NOP ;入口:[@R0,@R0+1]有上一周期采集数的高8位,低4位
CLR P1.5 ;I/O CLOCK=0
SETB P1.4 ;令-CS=1
NOP
CLR P1.4 ;令-CS=0,以上两句使-CS产生一次由高到低的变化,开始一个工作周期
MOV A,R1 ;通道号赋给A
SWAP A ;高低4位交换后,使得A中的数成为控制字,因为控制字的低4位为0
MOV R2,#08H ;循环8次
AD1: MOV C,P1.7 ;DATA OUT 位赋给C,即取得TLC2543输出一味数据
RLC A ;A带进位左移
MOV P1.6,C ;C赋给DATA IN,即控制字的一位输入TLC2543
SETB P1.5 ;产生一个时钟脉冲(I/O CLOCK)
CLR P1.5
DJNZ R2,AD1 ;循环8次
MOV @R2,AD1 ;取出的上一个工作周期A/D数据的高8位,放入·R0
MOV A,R1
MOV A,R1
SWAP A
MOV R2,#04H ;循环4次,取出上一工作周期A/D数据的低4位
AD2: MOV C,P1.7 ;DATA OUT一位赋给C,即TLC2543输出一位数据
RLC A ;A带进位左移
MOV P1.6,C ;C赋给DATA IN一位,即控制字的一位输入TLC2543
SETB P1.5 ;产生一个时钟脉冲(I/O CLOCK)
CLR P1.5
DJNZ R2,AD2 ;循环4次
INC R0 ;取出的上一工作周期A/D数据的低4位,放入@(R0+1)中
MOV @R0,A
SETB P1.4 ;置-CS=1
RET
以下是利用上述子程度采集0 通道数据放入内存21H、22H,采集1 通道数据放入内存
23H、24H 的主程序。注意其中调用了三次子程序,而第一次调用取出的数据是随机数。
CJDZ: NOP ;采集AIN0-AIN1 2个通道数据放入内存21H-24H
NOP ;启动0通道转换,本次取出的数据为无效数据
MOV R1,#00H ;通道号=0,赋给R1
MOV R0,#21H ;输出数据的高8位将存放的内存地址,赋给R0
LCALL AD12 ;调TLC2543 A/D转换子程序
NOP ;启动1通道转换,取出0通道数据放入内存21H,22H
MOV R1,#01H ;通道号=1,赋给R1
MOV RO,#21H ;上一工作周期转换的数据高8位将存放的内存地址,赋给R0
LCALL AD12 ;调TLC2543 A/D转换子程序
NOP ;启动0通道转换,取出0通道数据放入内存23H,24H
MOV R1,#00H ;通道号=0,赋给R1
MOV R0,#23H ;上一工作周期转换的数据高8位将存放的内存地址,赋给R0
LCALL AD12 ;调TLC2543 A/D转换子程序
RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -