新聞中心

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

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

本文引用地址:http://2s4d.com/article/201611/315822.htm

一下是匯編程序

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

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

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

LED_0 EQU 36H ;存放三個(gè)數(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 ;啟動(dòng)轉(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語(yǔ)言中

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í)候加上小數(shù)點(diǎn)

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í)函數(shù)(延時(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語(yǔ)言片段,由于不能使用long行,int型還是不夠,因此真實(shí)的只能保留一位(最后兩位相同)

#pragma code small

#include

#include //定義絕對(duì)地址

#define NCIRCLE DBYTE[0x35]

#define NCIRCLE1 DBYTE[0x38]

#define NCIRCLE2 DBYTE[0x37]

#define NCIRCLE3 DBYTE[0x36]

void cAlu()

{ //計(jì)算出電壓的0-5v真實(shí)值

int data temp;

temp= NCIRCLE*50/256 ;

NCIRCLE1=temp/10;

NCIRCLE2=temp%10;

NCIRCLE3=temp%10;

}



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

評(píng)論


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

關(guān)閉