新聞中心

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

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

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

本文引用地址:http://m.butianyuan.cn/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)閉