您的位置 首页 制造

51单片机运用一个IO口做RC充放电来模仿ADC

AUXRDATA08EH;AuxiliaryregisterP1M1DATA091H;P1M1N,P1M0N=00—>Standard,01—>push-pullP1M0DATA0

AUXR DATA 08EH ;Auxiliary register

P1M1 DATA 091H ;P1M1.N,P1M0.N =00—>Standard, 01—>push-pull
P1M0 DATA 092H ; =10—>pure input, 11—>open drain
P_RC BIT P1.0 ;RC port
DLY_H DATA 30H ;Delay high byte
DLY_M DATA 31H ;delay mid byte
DLY_L DATA 32H ;delay low byte
SEND_CNT DATA 33H ;send counter
;//////////////////////////////////////////////////////////
ORG 0000H
LJMP RESET
ORG 0100H
RESET:
LCALL INIT_UART ;initial UART
LCALL INIT_IO ;initial io
MOV SP,#40H
MOV SEND_CNT,#10 ;10 results per line
MAIN:
MOV DLY_H,#25
DLY1:
MOV DLY_M,#HIGH 10000
MOV DLY_L,#LOW 10000
DLY2:
DJNZ DLY_L,DLY3
DEC DLY_M
DLY3:
MOV A,DLY_M
ORL A,DLY_L
JNZ DLY2
DJNZ DLY_H,DLY1
LCALL RC
DJNZ SEND_CNT,MAIN
MOV SEND_CNT,#10 ;10 results per line
MOV A,#0DH ;send CR
LCALL SEND_UART ;send to PC from the UART
MOV A,#0AH ;send chage line
LCALL SEND_UART ;send to PC from the UART
SJMP MAIN
;//////////////////////////////////////////////////////////
INIT_UART:
MOV SCON,#5AH ;set UART mode as 8-bit variable baudrate
MOV TMOD,#20H ;timer1 as 8-bit auto reload mode
MOV AUXR,#40H ;timer1 work at 1T mode
MOV TL1,#0FBH ;115200 bps(256 – 18432000 / 32 / 115200)
MOV TH1,#0FBH
SETB TR1
RET
;//////////////////////////////////////////////////////////
Init_IO:
ORL P1M1, #0x01 ;P1.0 config as Open-Drain
ORL P1M0, #0x01
CLR P_RC ;Clear P1.0 to 0
ORL TMOD, #0x01 ;T0 as 16 bits timer
RET
;//////////////////////////////////////////////////////////
SEND_UART:
CLR TI ;clear TI flag
MOV SBUF,A ;send current data
JNB TI,$ ;wait data sent
RET
;//////////////////////////////////////////////////////////
RC:
MOV TH0, #0 ;clear Timer 0
MOV TL0, #0
SETB P_RC ;RC charge
SETB TR0 ;enable Timer 0
JNB P_RC,$ ;wait charge finish
CLR TR0 ;deable Timer 0
CLR P_RC ;decharge
MOV R3,TH0; ;read the RC time
MOV R4,TL0;
LCALL F_HEX2_DEC
MOV A,R5
ADD A,#30H ;Charge to ASCII code
LCALL SEND_UART ;send to PC from the UART
MOV A,R6
SWAP A
ANL A,#0FH
ADD A,#30H ;Charge to ASCII code
LCALL SEND_UART ;send to PC from the UART
MOV A,R6
ANL A,#0FH
ADD A,#30H ;Charge to ASCII code
LCALL SEND_UART ;send to PC from the UART
MOV A,R7
SWAP A
ANL A,#0FH
ADD A,#30H ;Charge to ASCII code
LCALL SEND_UART ;send to PC from the UART
MOV A,R7
ANL A,#0FH
ADD A,#30H ;Charge to ASCII code
LCALL SEND_UART ;send to PC from the UART
MOV A,#20H
LCALL SEND_UART ;send to PC from the UART
MOV A,#20H
LCALL SEND_UART ;send to PC from the UART
RET
;//////////////////////////////////////////////////////////
F_HEX2_DEC: ;(R3—R4) HEX Change to DEC —> (R5—R7), use (R2~R7), 344T
MOV R2,#16
MOV R5,#0
MOV R6,#0
MOV R7,#0
L_HEX2_DEC:
CLR C
MOV A,R4
RLC A
MOV R4,A
MOV A,R3
RLC A
MOV R3,A
MOV A,R7
ADDC A,R7
DA A
MOV R7,A
MOV A,R6
ADDC A,R6
DA A
MOV R6,A
MOV A,R5
ADDC A,R5
DA A
MOV R5,A
DJNZ R2,L_HEX2_DEC
RET
END

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/bandaoti/zhizao/255884.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部