新聞中心

        EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > ad轉(zhuǎn)換(匯編加c)

        ad轉(zhuǎn)換(匯編加c)

        作者: 時間:2016-11-18 來源:網(wǎng)絡(luò) 收藏

        本文引用地址:http://www.104case.com/article/201611/315822.htm

        一下是匯編程序

        ;此程序使用匯編調(diào)用c語言(由于ad轉(zhuǎn)換出來的數(shù)據(jù)用匯編計算非常麻煩)

        ;在proteus中,數(shù)碼管顯示從0-5的電壓值,保留小數(shù)點后2位

        EXTRN code(cAlu) ;聲明外部函數(shù)

        LED_0 EQU 36H ;存放三個數(shù)碼管的段碼

        LED_1 EQU 37H

        LED_2 EQU 38H

        ADC EQU 35H ;存放轉(zhuǎn)換后的數(shù)據(jù)

        ST BIT P3.2

        OE BIT P3.0

        EOC BIT P3.1

        ORG 00H

        START: MOV LED_0,#00H

        MOV LED_1,#00H

        MOV LED_2,#00H

        MOV DPTR,#TABLE ;送段碼表首地址

        SETB P3.4

        SETB P3.5

        CLR P3.6 ;選擇ADC0808的通道3

        WAIT: CLR ST

        SETB ST

        CLR ST ;啟動轉(zhuǎn)換

        JNB EOC,$ ;等待轉(zhuǎn)換結(jié)束

        SETB OE ;允許輸出

        MOV ADC,P1 ;暫存轉(zhuǎn)換結(jié)果

        CLR OE ;關(guān)閉輸出

        lcall delay

        lcall cAlu ;跳轉(zhuǎn)到c語言中

        lcall DISP ;顯示AD轉(zhuǎn)換結(jié)果

        SJMP WAIT

        DISP: mov dptr,#table

        MOV A,LED_0 ;數(shù)碼顯示子程序

        MOVC A,@A+DPTR

        CLR P2.3

        MOV P0,A

        LCALL DELAY

        SETB P2.3

        mov dptr,#table

        MOV A,LED_1

        MOVC A,@A+DPTR

        CLR P2.2

        MOV P0,A

        LCALL DELAY

        SETB P2.2

        mov dptr,#table ;最高位,顯示的時候加上小數(shù)點

        MOV A,LED_2

        MOVC A,@A+DPTR

        setb acc.7

        CLR P2.1

        MOV P0,A

        LCALL DELAY

        SETB P2.1

        RET

        delay: mov r4,#5 ;延時函數(shù)(延時大概5*255*2=25ms)

        l1: mov r5,#0ffh

        l2: djnz r5,$

        djnz r4,l1

        ret

        TABLE: DB 3FH,06H,5BH,4FH,66H

        DB 6DH,7DH,07H,7FH,6FH

        END

        //下面是c51語言片段,由于不能使用long行,int型還是不夠,因此真實的只能保留一位(最后兩位相同)

        #pragma code small

        #include

        #include //定義絕對地址

        #define NCIRCLE DBYTE[0x35]

        #define NCIRCLE1 DBYTE[0x38]

        #define NCIRCLE2 DBYTE[0x37]

        #define NCIRCLE3 DBYTE[0x36]

        void cAlu()

        { //計算出電壓的0-5v真實值

        int data temp;

        temp= NCIRCLE*50/256 ;

        NCIRCLE1=temp/10;

        NCIRCLE2=temp%10;

        NCIRCLE3=temp%10;

        }



        關(guān)鍵詞: ad轉(zhuǎn)換匯編加

        評論


        技術(shù)專區(qū)

        關(guān)閉
        主站蜘蛛池模板: 即墨市| 淳化县| 犍为县| 应用必备| 巴青县| 沁源县| 安吉县| 酒泉市| 通道| 西乡县| 潼关县| 临潭县| 仁怀市| 桃江县| 水城县| 邵阳市| 长垣县| 出国| 玉龙| 桃江县| 东光县| 永平县| 潢川县| 景宁| 武平县| 广河县| 长兴县| 金沙县| 和林格尔县| 阿拉善左旗| 南开区| 文成县| 衡阳市| 中江县| 错那县| 基隆市| 清河县| 大连市| 司法| 长武县| 布拖县|