您的位置 首页 主动

ad转化(汇编加c)

一下是汇编程序;此程序使用汇编调用c语言(由于ad转换出来的数据用汇编计算非常麻烦);在proteus中,数码管显示从0-5的电压值,保留小数点…

一下是汇编程序

;此程序运用汇编调用c言语(因为ad转化出来的数据用汇编核算十分费事)

;在proteus中,数码管显现从0-5的电压值,保存小数点后2位

EXTRN code(cAlu) ;声明外部函数

LED_0 EQU 36H ;寄存三个数码管的段码

LED_1 EQU 37H

LED_2 EQU 38H

ADC EQU 35H ;寄存转化后的数据

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 ;发动转化

JNB EOC,$ ;等候转化完毕

SETB OE ;答应输出

MOV ADC,P1 ;暂存转化成果

CLR OE ;封闭输出

lcall delay

lcall cAlu ;跳转到c言语中

lcall DISP ;显现AD转化成果

SJMP WAIT

DISP: mov dptr,#table

MOV A,LED_0 ;数码显现子程序

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 ;最高位,显现的时分加上小数点

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 ;延时函数(延时大约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;

}

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

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

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

微信扫一扫关注我们

返回顶部