51单片机: A/D 模数转换实验

发布者:SereneWhisper最新更新时间:2022-01-24 来源: eefocus关键字:51单片机  模数转换 手机看文章 扫描二维码
随时随地手机看文章

51单片机: A/D 模数转换实验

一、实验内容

利用实验台上的0809做A/D转换实验,实验台上的W1电位器提供模拟量输入。编制程序,将模拟量转换成数字量。(要求模拟量由0809的IN2采集)


二、仿真图

三、代码

C语言实现:


#include

#include                

#define AD XBYTE[0XFF22]          //定义AD0808的地址  Y4(20) Y1(01) Y7(31)

#define PA XBYTE[0XFF28]           //定义8255A中PA段的地址

#define PB XBYTE[0XFF29]           //定义8255A中PB段的地址

#define PC XBYTE[0XFF2a]           //纯属方便定义,没用到

#define COM8255 XBYTE[0XFF2B]    //定义8255A的控制字 Y5(FF2B) Y3(FF1B)  Y7(FF3B)


#define uint unsigned int

#define uchar unsigned char


float x=0;


uchar count=0;

uchar xdata *ad=&AD;//定义指针指向AD8080的地址

//uchar table[]={0xC0,0xF9,0xA4,0xB0,

// 0x99,0x92,0x82,0xF8,

// 0x80,0x90,0x88,0x83,

// 0xC6,0xA1,0x86,0x8E}; //数码管共阳极的显示编码

uchar table[]=

{0x3f,0x06,0x5b,0x4f,

  0x66,0x6d,0x7d,0x07,

  0x7f,0x6f,0x77,0x7c,

  0x39,0x5e,0x79,0x71};//数码管共阴极的显示编码


void delayMS(unsigned int ms)//延时函数

{

unsigned char i,j;

  for(i=ms;i>0;i--)

    for(j=60;j>0;j--);

}

void main()

{

IT0=1;  //设置外部中断为边沿触发

EX0=1;  //打开外部中断

EA=1;   //打开总中断

*ad=0x01; // AD0808数值进行初始化

COM8255=0x89;//10000000  //8255A数值进行初始化,设置端口为输出

delayMS(100);   //进行适当的延时

while(1)

{

PB=0X00;

PA=0xff;//进行消影

        PB=0X80;

PA=~table[count%16]; //选定最后一位数码管(段选),进行显示

        delayMS(1);                //进行延时,但延时时间不宜过长

    PB=0X00;

PA=0xff ;      //进行消影

        PB=0X40;

PA=~table[count/16];

delayMS(1);//选定倒数第二位数码管(段选),进行显示

}

}


void ad0() interrupt 0//进入外部中断,此处为了通过脉冲方便进行AD0808的采样

{

    count=*ad;         //此处count的值应为采集到的数据,范围应在0~255

   // x=x*0.9+count*0.1; //此处程序完成了低通滤波的功能,在实际演示中,由于种种限制,数字会有较大变化,不利于人的观察

 //  count=(uchar)x;    //再将处理好的值赋给count,此时的数字显示趋于稳定

    *ad=0x01;           //清除采集到的数据当下,一个脉冲到来时重新采集

}


汇编实现:


        AD  EQU 0FFE2H ;1111 1111 11/10 0(138)/010(通道数)

    COM8255  EQU 0FFEBH ;键盘显示单元的8255控制口1111 1111 11/10 1/010

    PA  EQU 0FFECH   ;字形控制口 1111 1111/11/10 1/0?/00(00指向PA) p184

    PB  EQU 0FFEDH   ;字位/键扫控制口 1111 1111/ 11/10 1/0?/01(01指向PB)

    ORG 0000H

        LJMP START

        ORG 0030H

START:  MOV SP, #60H

    MOV DPTR,#AD    ;

MOVX @DPTR,A    ;0809的通道0采样

    MOV DPTR,#COM8255 ;片选 

    MOV A,#89H      ;P186 命令字:选择工作方式,A,B口输出 1/000 1/00/1 (A,B:方式0)

MOV DPTR,#0FFEBH ;控制寄存器送入DPTR,8255才工作 0111 1111/ 11/10 1/0?/11

   // MOVX @DPTR,A ;方式寄存器送入控制寄存器 

MOVX @DPTR,A    ;累加器送外部RAM,8255初始化

    MOV R7,#100 ;保证转换结束,EOC=1

CALL DELAY ;

    MOV DPTR,#AD ;

L1: JB P3.2,L1

    MOVX A,@DPTR    ;读取AD转换数据

while1:

   MOV B,A;此处略有不同,先把数据拆分,不然下边麻烦

       SWAP A          ;累加器高四位与低四位互换

       ANL A,#0FH      ;进位内容与直接地址内容相与,取高4位

       ANL B,#0FH      ;进位内容与直接地址内容相与,取低4位

   MOV R4,A        ; R4存高位相当于/16

   MOV R5,B        ; R5存低位相当于%16

       MOV DPTR,#AD

   MOVX @DPTR,A    ;开始下次AD转换

       MOV R3,#64h    ;???

for:;第一个数码管显示

   MOV DPTR,#PB   ;进行消影,先位选

   MOV A,#00H     ;全选 

   MOVX @DPTR,A   ;输出

       MOV DPTR,#PA   ;再段选

MOV A,#0FFH     ;全选 

MOVX @DPTR,A ;输出

        MOV DPTR,#PB

MOV A,#80H      //1000 0000,选中第一位

MOVX @DPTR,A //第一位输出

        MOV DPTR,#LEDMAP  //指向表头

MOV A,R5   // R5存低位相当于%16

MOVC A,@A+DPTR ;变位寻址

MOV DPTR,#PA        ;选定的数送入RAM

MOVX @DPTR,A ;再输出

        MOV R7,#1

CALL DELAY    ;第二个数码管显示

MOV DPTR,#PB  //进行消影

MOV A,#00H    //  

MOVX @DPTR,A   //

        MOV DPTR,#PA  ;

MOV A,#0FFH    ;  

MOVX @DPTR,A   ;

        MOV DPTR,#PB

MOV A,#40H      //0100 0000,选中第二位

MOVX @DPTR,A

        MOV DPTR,#LEDMAP

MOV A,R4  ;R4存高位相当于/16

MOVC A,@A+DPTR;

MOV DPTR,#PA      

MOVX @DPTR,A

        MOV R7,#1 ;

CALL DELAY

        DJNZ R3,for

MOV DPTR,#AD

    L2:JB P3.2,L2   

       MOVX A,@DPTR    ;读取AD转换数据

        JMP while1


DELAY:  MOV R6,#135

        DJNZ R6,$

        DJNZ R7,DELAY;

RET

LEDMAP: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H    ;字形表

        DB 80H,90H,88H,83H,0C6H,0A1H,86H,8EH,0FFH

        END

关键字:51单片机  模数转换 引用地址:51单片机: A/D 模数转换实验

上一篇:蓝桥杯单片机设计与开发笔记(三)
下一篇:51单片机:D/A数模转换实验

推荐阅读最新更新时间:2024-11-11 12:03

苹果A12处理器跑分曝光,性能提升恐怖?
现在都已经是5月份了,离苹果9月份的iPhone新品发布会还有4个月,不出意外的话,新发布的iPhone将会搭载A12处理器,工艺制程和性能都会有提升。 近日,知名数码博主@i冰宇宙在微博爆料称,苹果下一代手机处理器A12在GeekBench中的跑分为单核5200、多核13000左右。作为对比,现在iPhone X、iPhone 8搭载的A11的跑分成绩大概为单核4200、多核10000,也就说A12处理器的单核性能大概提升了24%,多核性能提升了30%。 在制程方面,A12采用了7nm工艺,功耗会有进一步降低。不过,据@i冰宇宙透露,目前A12大核的功耗问题依然存在,苹果正在着力解决。A12处理器的核心数和架构信息,目前
[嵌入式]
是德科技KEYSIGHT示波器高压差分探头N2791A使用说明
示波器用户经常需要进行浮地测量。在这种测量中,任何测量点都不会接地。使用N2791A高电压差分探头,示波器可以进行安全和精确的浮地测量。 主要特性: · 25 MHz 带宽 · 用户可选择衰减设置:10:1 或 100:1 · 在 100:1 模式下,额定的差分和共模电压测量值高达 ±700 V · 由 4 节 AA 电池供电或由示波器或计算机的任何一个 USB 主机端口供电 附件包括: · 两个伸缩式挂钩探针 · 两个鳄鱼夹 兼容的示波器: · 兼容任何带 1 MΩ BNC 输入的示波器 使用 N2791A 25-MHz 低成本高压差分探头,示波器可以进行安全和精确的浮置测量。 借助 N2791A 差分探头,您就能使用普通的
[测试测量]
是德科技KEYSIGHT示波器高压差分探头N2791<font color='red'>A</font>使用说明
吉时利高功率数字源表2657A的特点及应用分析
吉时利高功率数字源表2657A为吉时利2600A系列高速、精密源测量单元数字源表系列产品增加了高电压功能。此系列仪器能帮助吉时利客户分析范围更宽的功率半导体器件和材料。2657A内建3,000V、180W源,支持以极低的成本向被测器件输出5倍于最接近竞争系统的功率,并且,构建至2657A的精密、高速6位半测量引擎的1fA(飞安)电流测量分辨率满足了下一代功率半导体器件的低漏电要求。 2657A专门做了这些优化:二极管、FETs和IGBTs等功率半导体器件的高压测试应用以及氮化镓(GaN)、碳化硅(SiC)等新材料及其它复合半导体材料和器件的特性分析。而且,2657A还适于高速瞬态分析以及在高达3000V的各种电子器件上进行故障
[测试测量]
基于51单片机的羽毛球计分器设计
一.硬件方案 本设计采用单片机AT89C51作为核心元件。本设计由控制系统,显示模块,按键驱动模块3部分组成。主要编写了主程序,中断程序,显示程序功能模块程序等。实现羽毛球计分器功能。 主要由51单片机+最小系统+LCD1602液晶显示模块+LED指示灯模块+按键模块;如图: 二.设计功能 (1)采用按钮开关实现功能控制,按照设计的功能模块共选用8个按钮开关,分别实现启动、A队加分、A队减分、B队加分、B队减分、暂停、停止、清零功能。 (2)选用LCD1602液晶屏作为显示器件,用于记录两队的分数。 三.设计原理图 (1)原理图主要采用AD软件进行设计,如图: (2)Protues仿真图如下: 四.软件设计 (
[单片机]
基于<font color='red'>51单片机</font>的羽毛球计分器设计
51单片机P1口介绍
P1.0 P1.7为P1口的8位双向口线,用于完成8位数据的并行输入/输出。 P1口内部结构及其功能描述 如图是P1口内部1位的电路结构 与P0口内部结构电路比较可发现:P1端口只是一个标准的准双向端口,无第二功能; P1内部取消了上拉的FET,而以一个上拉电阻代替;但此内部上拉电阻阻值较大,故上拉驱动能力较弱,除了有低功耗要求的应用系统,最好外接10K左右的上拉电阻; P1内部下拉FET仍存在,因此P1在作为输入时,仍需先向端口数据锁存器输出1,使输出驱动FET截止,保证数据读入的正确性; 在MCS-52系列单片机中,P1.0和P1.1具有第二功能,分别是作为定时器/计数器2的外部输入端
[单片机]
51单片机-基于PCF8591的AD采样和DA输出
首先思考一个问题,我们的世界是数字的还是模拟的? 当然是模拟的了,所有的量都是在一定范围内连续变化的。我们为了能够更加方便的描述这些量,对它们进行了数字化。而数字量就不一样了,它是分立的的几个值。 举个例子,我们形容一个人的身高,模拟的说法是一米七到一米七五之间,数字的说法就是一米七三。 接下来说AD转换器,它的出现也是为了让我们能更方便、更直接的描述电压的高低。AD转换器,英文全称为Analog-to-Digital Converter,是模拟量到数字量的一个转换过程,主要用于电压的采集。它的出现就如同有了一把尺子,很容易就能量出电压的高低。 在电子设备中,经常要检测各种模拟量:温度、压力、速度、
[单片机]
学<font color='red'>51单片机</font>-基于PCF8591的AD采样和DA输出
51单片机T2定时器应用
定时器T2有三种工作模式,其中MODE 2为波特率发生器。 1、Mode 2:波特率发生器 串口方式1和3的波特率计算如下: 波特率bps=振荡器频率freq/ 则:RCAP2=65536-(freq/32/bps) 如果freq=11.0592MHZ,bps=9600,则:RCAP2 = 65500 RCAP2H = 255;RCAP2L = 220 此时的程序设置如下: uint a, bps = 96; // 9600 bps SCON |= 0x50; // 0101 0000串口方式1,允许接收 a=3456/bps; a=~a; RCAP2H = a/256; R
[单片机]
A123未来3年拟倍增电池产能 加强在华投资
    电池供应商A123近日发布声明称,该公司计划未来三年中将其全球电池产能扩大一倍,达到1.5千兆瓦时。     A123在美国密歇根州(Michigan)、中国杭州、常州均设有产能,目前均以满负荷运转。该公司已经开始其耗资1亿美元的产能扩张,并且认为为了满足市场不断增长的需求,该公司后续还需继续扩大投资。     未来3年中,A123计划再投资2亿美元逐步扩大产能,新增产能将用于支持全球新客户的低电压混动车、插混乘用车以及一些商用车项目。     A123在声明中表示,该公司抓住了中国市场插电式混动车型的增长趋势,未来数年中还将继续加大高能率以及电池设计方面的研发力度。
[汽车电子]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved