[求助]关于AD转换的程序TLC1543的片子
请各位高手帮我分析一下这个程序,调试了两天没有通过,郁闷啊。。。。。。
显示结果总是 001.采集电压调了以后还是没有显示的变化。
EOC BIT P1.3; AD1543连接
IOCLK BIT P1.4
ADDR BIT P1.5
DOUT BIT P1.6
CS5 BIT P3.7
CS9 BIT P3.6 ; DA5615定义,CS低电平有效,DOUT 数据输出,用于级连
DI BIT P1.0
SCLK BIT P1.1
DIN BIT P3.5 ; MAX7219连接
LOAD BIT P3.4
CLK BIT P3.3
ADH_DATA EQU 26H; AD转换后的高位数据
ADL_DATA EQU 27H; AD转换后的低位数据
DATATEMP EQU 32H
DAH_DATA EQU 28H; DA要转换的高位数据
DAL_DATA EQU 29H; DA要转换的低位数据
ADADDRESS EQU 30H; AD要转换的的通道地址
DATATEMP EQU 31H
LED1 EQU 25H
LED2 EQU 24H
LED3 EQU 23H
LED4 EQU 22H
LED5 EQU 21H
LED6 EQU 20H
LED7 EQU 19H
LED8 EQU 18H
DR0 EQU 10H
DR1 EQU 11H
INT_R0 EQU 12H
INT_R1 EQU 13H
INT_R2 EQU 14H
BUZT1 EQU 15H
BUZT2 EQU 16H
BUZT3 EQU 17H
DIGIT0 EQU 01H
DIGIT1 EQU 02H
DIGIT2 EQU 03H
DIGIT3 EQU 04H
DIGIT4 EQU 05H
DIGIT5 EQU 06H
DIGIT6 EQU 07H
DIGIT7 EQU 08H
DECODE_MODE EQU 09H
INTENSITY EQU 0AH
SCAN_LIMIT EQU 0BH
SHUTDOWN EQU 0CH
FLASH_CON EQU 0DH
SLEEP_STATE EQU 0EH
DISPLAY_TEST EQU 0FH
STACK_TOP EQU 6aH
org 0000h
AJMP START
ORG 0080H
START: mov sp,#STACK_TOP
MOV ADADDRESS,#02H; 选择转换的通道为A2通道
LCALL AD1543
MOV DATATEMP,ADL_DATA ;取低八位中的高四位
MOV A,ADL_DATA
ANL A,#11110000B
SWAP A
MOV ADL_DATA,A
MOV A,DATATEMP;取低八位中的低四位
ANL A,#00001111B
MOV DATATEMP,A
DISPLAY: clr ea
clr load
lcall t1s
MOV LED1,ADH_DATA
MOV LED2,ADL_DATA
MOV LED3,#DATATEMP
MOV LED4,#0fH
MOV LED5,#0fH
MOV LED6,#0fH
MOV LED7,#0fH
MOV LED8,#0fH
LCALL T1S
MOV DR0,#00H
MOV DR1,#SHUTDOWN
LCALL TRT
LCALL T1S
LCALL T1S
MOV DR0,#04h
MOV DR1,#INTENSITY
LCALL TRT
LCALL T2mS
MOV DR0,#07H
MOV DR1,#SCAN_LIMIT
LCALL TRT
LCALL T2mS
MOV DR0,#0FFH
MOV DR1,#DECODE_MODE
LCALL TRT
LCALL T2mS
MOV DR0,#01H
MOV DR1,#SHUTDOWN
LCALL TRT
LCALL T1S
main: LCALL LED_COM
ajmp main
;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
;%%% %%%
;%%% SUBPROC OF LED_COM %%%
;%%% %%%
;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
dlbuz1s:
mov buzt3,#18h
dlbuz30ms: mov buzt2,#0ffh
dlbuz128us: mov buzt1,#0ffh
dlbuz1us: djnz buzt1,dlbuz1us
djnz buzt2,dlbuz128us
djnz buzt3,dlbuz30ms
ret
LED_COM:
LCALL T1S
MOV DR0,#01H
MOV DR1,#SHUTDOWN
LCALL TRT
LCALL T1S
LCALL T1S
MOV DR0,LED1
MOV DR1,#DIGIT0
LCALL TRT
LCALL T1S
MOV DR0,LED2
MOV DR1,#DIGIT1
LCALL TRT
LCALL T1S
MOV DR0,LED3
MOV DR1,#DIGIT2
LCALL TRT
LCALL T1S
MOV DR0,LED4
MOV DR1,#DIGIT3
LCALL TRT
LCALL T1S
MOV DR0,LED5
MOV DR1,#DIGIT4
LCALL TRT
LCALL T1S
MOV DR0,LED6
MOV DR1,#DIGIT5
LCALL TRT
LCALL T1S
MOV DR0,LED7
MOV DR1,#DIGIT6
LCALL TRT
LCALL T1S
MOV DR0,LED8
MOV DR1,#DIGIT7
LCALL TRT
LCALL T1S
; mov dr0,#01h
; mov dr1,#display_test
; lcall trt
; lcall t5s
; mov dr0,#00h
; mov dr1,#display_test
; lcall trt
; lcall t5s
; mov dr0,#0ffh
; mov dr1,#flash_con
;
; lcall trt
RET
TRT:
CLR LOAD
NOP
NOP
MOV R2,#08H
MOV A,DR1
CLR CLK
T_1:
RLC A
MOV DIN,C
nop
nop
SETB CLK
LCALL T88
CLR CLK
LCALL T88
DJNZ R2,T_1
LCALL T88
MOV R2,#08H
MOV A,DR0
T_2:
CLR CLK
LCALL T88
RLC A
MOV DIN,C
nop
nop
nop
SETB CLK
LCALL T88
DJNZ R2,T_2
SETB LOAD
LCALL T88
CLR CLK
LCALL T88
RET
T88: MOV INT_R1,#02H
TSM0: MOV INT_R0,#01FH
TSM1: DJNZ INT_R0,TSM1
DJNZ INT_R1,TSM0
RET
t12ms: mov r6,#0ffh
t12ms2: mov r7,#0ffh
t12ms1: djnz r7,t12ms1
djnz r6,t12ms2
ret
T2mS: MOV INT_R1,#18H
TSM: MOV INT_R0,#0FFH
TSM6: DJNZ INT_R0,TSM6
DJNZ INT_R1,TSM
RET
T1S: MOV INT_R1,#01H
TSM3: MOV INT_R0,#0FFH
TSM4: DJNZ INT_R0,TSM4
DJNZ INT_R1,TSM3
RET
T500mS: MOV INT_R2,#10H
TSM8: MOV INT_R1,#0FFH
TSM5: MOV INT_R0,#0F0H
TSM7: DJNZ INT_R0,TSM7
DJNZ INT_R1,TSM5
DJNZ INT_R2,TSM8
RET
T5S: MOV INT_R2,#02FH
TSM9: MOV INT_R1,#0FFH
TSMA: MOV INT_R0,#0FFH
TSMB: DJNZ INT_R0,TSMB
DJNZ INT_R1,TSMA
DJNZ INT_R2,TSM9
AD1543: SETB CS5
clr EOC
CLR ADDR
CLR IOCLK; 初始化
MOV PSW,#00H; ; 清状态寄存器
MOV A,#0BH ;测试地址
SWAP A; 取4位地址
LCALL DATA_IN; 调用转换子程序
SETB CS5
MOV A,ADADDRESS
SWAP A
WAIT:NOP
NOP
JNB EOC,WAIT
NOP
LCALL DATA_IN
SETB CS5
;MOV A,ADADDRESS
;SWAP A
;WAIT2:NOP
;JNB EOC,WAIT2
;LCALL DATA_IN
;SETB CS5
MOV R3,A; 转换结果的低8字节放入寄存器R3
MOV A,R2; 读转换结果的高8字节到A
RL A; 取高两位
RL A;
ANL A,#03H
MOV R2,A; 转换结果的高2位放入R2
MOV ADH_DATA, R2;高两位存入ADH_DATA
MOV ADL_DATA,R3;低八位存入ADL_DATA
RET
;********** 子程序 *************
DATA_IN: CLR CS5
MOV R5,#10; I/O CLOCK脉冲次数放入R5
LOOP1: MOV C,DOUT; 读转换数据到C
RLC A; 转换数据移到A的最低位,通道地址移入C
MOV ADDR,C; 写通道地址
NOP
SETB IOCLK; 置I/O CLOCK为高
LCALL DELAY
NOP
LCALL DELAY
CLR IOCLK
LCALL DELAY
CJNE R5,#02H,LOOP2; 判断8个数据是否送完?未完则跳转
MOV R2,A; 转换结果高8位放入A
LOOP2: DJNZ R5,LOOP1; 10个脉冲是否结束?没有则跳转
RET
DELAY:MOV 51h,#0FFH
DELAY1:DJNZ 51h,DELAY1
RET
END
发表时间:2003年5月18日12:24:20