微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > ad转换(汇编加c)

ad转换(汇编加c)

时间:11-18 来源:互联网 点击:

一下是汇编程序

;此程序使用汇编调用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;

}

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top