📄 tlc2543.asm
字号:
;; #include "regv51.h"
sbit IOC=P1.0;
sbit DI=P1.1;
sbit DO=P1.2;
sbit CS=P1.3;
TLC2543 segment code
Delay segment code
public _TLC2543
public _delay
;*******************************************************************
;作者:ywg
;日期:2003-7-31
;说明:延时子程序
;*******************************************************************
rseg Delay
_delay:
using 0
Del0: mov a,r7 ;6
mov r6,a ;6
Del1: mov a,r5 ;6
mov r4,a ;6
Del2: djnz r4,Del2 ;12
djnz r6,Del1 ;12
ret ;12
;;;;1+1+(1+1+2*r5+2)*r7+2=4+(4+2*r5)*r7=4*r7+2*r5*r7
;;;;4+(4+2*r5)*r7个机器周期
;;;;delay(1,14):r7=1;r6=14
;;;;1。4+4+2*14=36个指令周期;时间为36*(6/11.0592)us=19.53us.
;;;;2。加上lcall delay 的2个指令周期=1.08us;
;;;;1+2=20.61us
;*******************************************************************
;作者:ywg
;日期:2003-7-31
;说明:TLC2543的采集程序
;*******************************************************************
rseg TLC2543
using 0
_TLC2543:
;using 3
mov a,r7/*读入通道数据到A*/
mov r4,a
clr CS/*片选有效*/
jb acc.1,LSB
MSB:
mov r1,#08/*定义MSB的8位计数*/
LOOP1: mov c,DO
nop
nop
rlc a
mov DI,c
setb IOC
nop
nop
clr IOC
djnz r1,LOOP1
mov r6,a
mov a,r4
jb acc.1, return/*若位为1则转移*/
jb acc.3,LSB/*若高位为1则肯定不是8位*/
jb acc.2,return
LSB: mov r1,#04/*定义LSB的8位计数*/
mov r7,#0/*v2.3*/
mov a,#0/*v2.3*/
LOOP2: mov c,DO
rlc a
mov DI,c
setb IOC
nop
nop
clr IOC
djnz r1,LOOP2
mov r7,a/*低4位*/
/*处理数据*/
mov a,r6
swap a
anl a,#0xf0
orl a,r7
mov r7,a
mov a,r6
swap a
anl a,#0x0f
mov r6,a
mov a,r4/*可以不要*/
jb acc.1, MSB
return:
setb CS/*片选有效*/
ret
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -