?? 28-0 tlc549.asm
字號:
;//****************************************************************
;//*文件名:串行A/D轉(zhuǎn)換器TLC549轉(zhuǎn)換程序
;//*創(chuàng)建人:巫升輝
;//*2006.2.25
;功能:把模擬的量通過串行的模數(shù)轉(zhuǎn)換成數(shù)字信號,并同過調(diào)用7279顯示被轉(zhuǎn)換
;的數(shù)字量
;接線:P1.0接DATA,P1.1接CLK,P1.2接CS-549,AIN接可調(diào)電壓0~5V端。
;//****************************************************************
DAT0 BIT P1.0
CLK0 BIT P1.1
CS BIT P1.2
ADHEX DATA 050H
DBUF DATA 060H
BIT_COUNT DATA 070H
TIMER DATA 072H
TIMER1 DATA 073H
TIMER2 DATA 074H
DATA_IN DATA 020H
DATA_OUT DATA 021H
CLK BIT P1.6
DAT BIT P1.7
ORG 0000H
LJMP MAIN
ORG 0100H
main:
ACALL TLC549_ADC
MOV R7,#0
DJNZ R7,$
ACALL TLC549_ADC
MOV R7,A ;存轉(zhuǎn)換結(jié)果
MOV ADHEX,A
CALL MUL500 ; ADHEX*500/256
CALL HB2
CALL TODISP ; 拆開顯示
NOP
CALL DISPLAY
CALL delay
LJMP MAIN
TLC549_ADC: ;串行顯示處理程序,結(jié)果存在A中
CLR A
CLR CLK0
CLR CS
MOV R6,#8
ADLOOP:
SETB CLK0
NOP
NOP
MOV C,DAT0
RLC A
CLR CLK0
NOP
DJNZ R6,ADLOOP
SETB CS
SETB CLK0
RET
DISPLAY:
ANL P2,#00H ; CS7279有效
MOV DATA_OUT,#10100100B ; A4H,復(fù)位命令
CALL SEND
MOV DATA_OUT,#11001000B ; 譯碼方式0,0位顯示
CALL SEND
MOV DATA_OUT,DBUF
CALL SEND
MOV DATA_OUT,#11001001B ; 譯碼方式0,1位顯示
CALL SEND
MOV DATA_OUT,DBUF+1
CALL SEND
MOV DATA_OUT,#11001010B ; 譯碼方式0,2位顯示
CALL SEND
MOV DATA_OUT,DBUF+2
CALL SEND
MOV P2,#0FFH ; CS7279無效
RET
SEND: MOV BIT_COUNT,#8 ; 發(fā)送字符子程序
ANL P2,#00H
CALL LONG_DELAY
SEND_LOOP:MOV C,DATA_OUT.7
MOV DAT,C
SETB CLK
MOV A,DATA_OUT
RL A
MOV DATA_OUT,A
CALL SHORT_DELAY
CLR CLK
CALL SHORT_DELAY
DJNZ BIT_COUNT,SEND_LOOP
CLR DAT
RET
LONG_DELAY:MOV TIMER,#150 ;延時約200US
DELAY_LOOP:DJNZ TIMER,DELAY_LOOP
RET
SHORT_DELAY:
MOV TIMER,#20 ;延時約20US
SHORT_LP: DJNZ TIMER,SHORT_LP
RET
DELAY:MOV TIMER,#4
AA0: MOV TIMER1,#0
AA1: MOV TIMER2,#0
AA2: DJNZ TIMER2,AA2
DJNZ TIMER1,AA1
DJNZ TIMER,AA0
RET
;功能:單字節(jié)二進制無符號數(shù)乘500(1f4H=100H+0f4H)
;入口條件:被乘數(shù)在R7中。
;出口信息:乘積在R4、R5、R6中(R6低八位)。
MUL500:
MOV A,#0f4H ;計算R3乘R7
MOV B,R7
MUL AB
MOV R5,B ;暫存部分積
MOV R6,A
MOV A,R7
ADD A,B
MOV R5,A
CLR A
RLC A
MOV R4,A
CLR C
MOV A,R6
SUBB A,#80H
JC RETURN
CLR C
MOV A,R5
ADD A,#1
MOV R5,A
MOV A,R4
ADDC A,#0
MOV R4,A
RETURN: RET
; 功能:雙字節(jié)十六進制整數(shù)轉(zhuǎn)換成雙字節(jié)BCD碼整數(shù)
; 入口條件:待轉(zhuǎn)換的雙字節(jié)十六進制整數(shù)在R6、R7中。
; 出口信息:轉(zhuǎn)換后的三字節(jié)BCD碼整數(shù)在R3、R4、R5中。
HB2:
MOV A,R4
MOV R6,A
MOV A,R5
MOV R7,A
CLR A ;BCD碼初始化
MOV R3,A
MOV R4,A
MOV R5,A
MOV R2,#10H ;轉(zhuǎn)換雙字節(jié)十六進制整數(shù)
HB3: MOV A,R7 ;從高端移出待轉(zhuǎn)換數(shù)的一位到CY中
RLC A
MOV R7,A
MOV A,R6
RLC A
MOV R6,A
MOV A,R5 ;bcd碼帶進位自身相加,相當于乘2
ADDC A,R5
DA A ;十進制調(diào)整
MOV R5,A
MOV A,R4
ADDC A,R4
DA A
MOV R4,A
MOV A,R3
ADDC A,R3
MOV R3,A ;雙字節(jié)十六進制數(shù)的萬位數(shù)不超過6,不用調(diào)整
DJNZ R2,HB3 ;處理完16bit
RET
TODISP:
MOV A,R4
ORL A,#80H
MOV DBUF+2,A
MOV A,R5
SWAP A
ANL A,#0FH
MOV DBUF+1,A
MOV A,R5
ANL A,#0FH
MOV DBUF,A
RET
END
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -