×
单片机 > 单片机程序设计 > 详情

ad转换(汇编加c)

发布时间:2020-06-19 发布时间:
|

 

一下是汇编程序

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

}

关键字:ad转换  汇编加C

『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
C51 特殊功能寄存器SFR的名称和地址