新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 51單片機使用一個IO口做RC充放電來模擬ADC

        51單片機使用一個IO口做RC充放電來模擬ADC

        作者: 時間:2016-11-28 來源:網絡 收藏
        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


        評論


        技術專區

        關閉
        主站蜘蛛池模板: 汨罗市| 翼城县| 旬阳县| 庄浪县| 建始县| 龙川县| 临邑县| 金门县| 黄浦区| 竹溪县| 临城县| 永宁县| 丰都县| 孝感市| 油尖旺区| 遂溪县| 城市| 金溪县| 万山特区| 乌拉特中旗| 天全县| 吉木乃县| 上犹县| 龙川县| 贵州省| 陇西县| 左权县| 扶余县| 当涂县| 杭州市| 黄石市| 博罗县| 栾川县| 通化县| 庐江县| 囊谦县| 革吉县| 建宁县| 邯郸县| 益阳市| 金华市|