TLC2543与1602结合的模拟采集显示程序(汇编程序)

CLK BIT P1.0
DIN BIT P1.1
DOUT BIT P1.2
CS BIT P1.3
DAT EQU 25H ;1602数据地址
COM EQU 24H ;1602指令地址
RS EQU P2.5 ;1602RS确定具体硬件的连接方式
RW EQU P2.6 ;1602RW确定具体硬件的连接方式
E EQU P2.7 ;1602E确定具体硬件的连接方式
ORG 0000H

MAIN: MOV SP,#60H ;堆栈指针初始化
LCALL LCD_INT
HERE: LCALL TLC2543 ;调用转换程序
LCALL TLC2543 ;舍去第一次采样
LCALL BCD ;调用转换BCD码
LCALL BCD1 ;将一位BCD码转换成两位十进制数
LCALL DISP ;调用显示
LCALL D200MS
LCALL D200MS
LCALL D200MS
AJMP HERE ;返回


;*********************
; 初始化液晶
;*********************
LCD_INT:
MOV COM,#28H ;四位数据端口,2行显示,5*7点阵
LCALL PR1
MOV COM,#01H ;清屏
LCALL PR1
MOV COM,#06H ;光标和显示模式设置
LCALL PR1
MOV COM,#0CH ;显示开关控制
LCALL PR1
RET


;*********************
; 写指令代码
;*********************
PR1:
PUSH ACC
LCALL D5MS
CLR RW
CLR RS
MOV P0,COM
SETB E
NOP
CLR E
MOV A,COM
SWAP A
MOV P0,A
SETB E
NOP
CLR E
POP ACC
RET

;*********************
; 写数据代码
;*********************
PR2: PUSH ACC
LCALL D5MS
CLR RW
SETB RS
MOV P0,DAT
SETB E
CLR E
MOV A,DAT
SWAP A
MOV P0,A
SETB E
CLR E
POP ACC
RET

;****************************
; 读取AD数据
;****************************
TLC2543:SETB DOUT ;P1口引脚初始化 ,P1.2为输入端
CLR CLK ;时钟接口
SETB CS ;片选端
MOV R4,#0CH ;读输入命令字到R4,AIN0,16位,高位在前
MOV A,R4 ;读输入数据到A
CLR CS ;置CS为低
JB ACC.1,LSB ;如果A的位1为1,先做低字节传送
MSB: MOV R5,#08 ;以下为传送高字节数据
LOOP1:MOV C,DOUT ;数据位读入进位位
RLC A
MOV DIN,C ;输出方式/通道位
SETB CLK ;产生I/O时钟
CLR CLK
DJNZ R5,LOOP1 ;输入/输出另一位
MOV R6,A ;高字节送入R6
MOV A,R4
JB ACC.1,RETURN
LSB: MOV R5,#08
LOOP2:MOV C,DOUT
RLC A
MOV DIN,C
SETB CLK
CLR CLK
DJNZ R5,LOOP2
MOV R7,A ;低字节送入R7
MOV A,R4
JB ACC.1,MSB

RETURN:SETB CS
RET


;************************************
; BCD码转换
;************************************
BCD: MOV R3,#4
L1: CLR C
MOV A,R6
RRC A
MOV R6,A
MOV A,R7
RRC A
MOV R7,A
DJNZ R3,L1
CLR A ;BCD码初始化

MOV R3,A ;BCD码高位
MOV R4,A ;BCD码中间位
MOV R5,A ;BCD码低位
MOV R2,#10H ;转换双字节十六进制整数
HB3: CLR C
MOV A,R7 ;从高端移出待转换数的一位到CY中
RLC A
MOV R7,A
MOV A,R6
RLC A
MOV R6,A

MOV A,R5 ;BCD码带进位自身相加,相当于乘2
ADDC A,R5
DA A ;十进制调整
MOV R5,A
MOV A,R4
ADDC A,R4
DA A
MOV R4,A
MOV A,R3
ADDC A,R3
MOV R3,A ;双字节十六进制数的万位数不超过6,不用调整
DJNZ R2,HB3 ;处理完16位
RET
BCD1:
MOV A,R3
ANL A,#0F0H
SWAP A
MOV 41H,A
MOV A,R3
ANL A,#0FH
MOV 42H,A

MOV A,R4
ANL A,#0F0H
SWAP A
MOV 43H,A
MOV 44H,#10
MOV A,R4
ANL A,#0FH
MOV 45H,A

MOV A,R5
ANL A,#0F0H
SWAP A
MOV 46H,A
MOV A,R5
ANL A,#0FH
MOV 47H,A
MOV 48H,#11
RET


DISP: MOV COM,#085H ;设置显示的首地址
LCALL PR1
MOV DPTR,#TAB
MOV R3,#6 ;设置循环量
MOV R1,#43H ;设置初始值地址
DISP1:MOV A,@R1
MOVC A,@A+DPTR
MOV DAT,A
LCALL PR2
INC R1
DJNZ R3,DISP1
RET

TAB: DB '0123456789.V'




D5MS:MOV R7,#5
D1: MOV R6,#250
DJNZ R6,$
DJNZ R7,D1
RET



D200MS:MOV R0,#2
D4:MOV R7,#255
D5:MOV R6,#255
DJNZ R6,$
DJNZ R7,D5
DJNZ R0,D4
RET
END

相关文档
最新文档