AD转换汇编语言模数转换实验
**
1. A/D0809芯片特点
**
ADCO809是美国国家半导体公司生产的CMOS工艺8通道,8位逐次逼近式A/D模数转换器。其内部有一个8通道多路开关,可根据地址码选通其中一路输入信号进行AD转换。该芯片主要具有以下特性:
☆8路输入通道,8位AD转换器,即分辨率为8位;
☆具有转换启动停止控制端;
☆转换时间为100us(时钟为640KHz时),130us(时钟为500KHz时)﹔
☆单个+5V电源供电,低功耗,约15mV;
☆模拟输入电压范围O~+5V,不需零点和满刻度校准;
☆工作温度范围为-40~~+85摄氏度;
2.A/D0809引脚
ADCO809芯片有28个引脚,采用双列直插式封装。如下图所示:
3.时序图
4.实验仿真
Tips:因为Proteus里面无法使用0809,所以用0808代替0809,两者的功能差不多
首先是proteus的仿真图:
其中的蓝色的时钟在这里找:
因为0809时钟周期的典型值为100us,所以我的频率设置为10kHz
其中仿真的器件表如下:
器件 | 名称 |
---|---|
ADC0808数模转换芯片 | ADC0808 |
滑动变阻器 | POT-HG |
共阳极数码管(Common anode) | 7SEG-MPX4-CA |
单片机 | 80C51 |
汇编代码如下:
ORG 1000HDB 0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8, 0x80, 0x90 AD0809_ADDA BIT P1.4AD0809_ADDB BIT P1.5AD0809_ADDC BIT P1.6AD0809_CLK BIT P1.3AD0809_STAT BIT P1.2AD0809_EOC BIT P1.1AD0809_OE BIT P1.0AD0809_DA EQU 71HORG 0000HSJMP MAINORG 0030H
MAINLOOP:ACALL MAINSJMP MAINLOOP
MAIN: ;选择0通道输出CLR AD0809_ADDACLR AD0809_ADDBCLR AD0809_ADDC;产生一个下降沿启动AD转换CLR AD0809_STATSETB AD0809_STATCLR AD0809_STAT
LOOP1:;等待转换完成JNB AD0809_EOC,LOOP1;允许输出SETB AD0809_OE;P3的输出到AMOV A,P3;下面是计算16进制转换为10进制的数,从0-255映射到0-5的比较精确的做法,;这个做法相当于0-25500映射到0-500,然后显示的时候在百位后面加一个小数点就好;而最后面一种做法是0-255映射到0-5,这种计算方法的累计误差到最后映射时会增大到0.1;下面的注释都是以A=ff计算出来的结果,可以直接将A赋值为ffH,然后在调试窗口观察得到;计算个位MOV B,#33H ;B=51,A=254DIV ABMOV 30H,A ;A=4,B=50,(30h) = 4;计算小数点后一位MOV A,B ;A= B=50MOV B,#0AH ;A=50,B= 10MUL AB ;A=244,B=1=256(因为计算后B保存高位,111110100=100000000+11110100=256+244)ADD A,B ;A=245,加B是因为b的值除以51后余数为1,要加入低位中进行计算,否则会漏掉一些数MOV R0,A ;保存低位的值,因为后面要用AMOV A,#05H ;A=5,B=1将A赋值为5,是因为B是高位,B=1实际是B=100000000=256除以51后为五MUL AB ;A=5,B=0MOV R1,A ;这个5的值是小数点后的一部分,还可能因为最开始A输入的值的不同而等于零,A的实际的数字是以A=0xFE计算所得MOV A,R0 ;A=245,B=0;MOV B,#33H ;A=245,B=51DIV AB ;A=4,B=41ADD A,R1 ;R1=9MOV 31H,A ;(31h)=9;计算小数点后两位,步骤跟上面一样,可以从B保存了的值计算出第二位小数MOV A,#0AH ;A=10,B=41MUL AB ;A=9A=154,B=1=256ADD A,B ;A=9B=155,B=1=256MOV R0,A ;A=155,R0=155MOV A,#05H ;A=5,B=1MUL AB ;A=5,B=0MOV R1,A ;R1=A=5,B=0MOV A,R0 ;A=155,B=0MOV B,#33H ;A=155,B=51=0X33DIV AB ;A=3,B=2ADD A,R1 ;R1=8MOV 32H,A ;(32H)=8// 以下是第二种计算方法,在做乘法的时候原本以为高位不会有值
//;但只要乘法后的数字大于255就会对高位进行赋值但本题目高位最多为1或者为零
// MOV B,#0x33
// DIV AB
// MOV 30H,A
// MOV A,B
// MOV B,#0AH
// MUL AB
// MOV B,#0x33
// DIV AB
// MOV 31H,A
// MOV A,B
// MOV B,#0AH
// MUL AB
// MOV B,#33
// DIV AB
// MOV 32H,A;以下是第一种转换数值的方法,发现误差太大;MOV R0,#71H; MOV @R0,A;将16进制数转换到10进制数并且保存到30H,31H,32H; MOV B,#64H; DIV AB; MOV 30H,A; MOV A,B; MOV B,#0AH; ;DIV AB; MOV 31H,A; MOV 32H,B ;原来的数字,; MOV R0,#30H; MOV A,@R0; MOV 33H,A; MOV R0,#31H;MOV A,@R0; MOV 34H,A; MOV R0,#32H; MOV A,@R0; MOV 35H,A;转换函数.乘二
; MOV R0,#32H
; MOV A,@R0
; RL A
; MOV B,#0AH
; DIV AB
; MOV 32H,B
; MOV R0,#31H
; MOV B,A ;对A里面的内容进行保存
; MOV A,@R0 ;更新A
; RL A ;乘二
; ADD A,B ;加一
; MOV B,#0AH
; DIV AB
; MOV 31H,B; MOV R0,#30H
; MOV B,A ;对A里面的内容进行保存
; MOV A,@R0 ;更新A
; RL A ;乘二
; ADD A,B ;加一
; MOV 30H,A
;显示函数---------------------------------------------------------
;段选:P1.0->P1.7
;位选:P2.0->P2.3
DISPLAY1:
MOV DPTR, #1000H ;码表起始地址
MOV R0, #30H ;显存起始地址
MOV R1, #02H ;位选码 P3.7->0 0 0 0 0 0 0 1->P3.0;四位循环----------------------------------------------------------
DISPLAYLOOP:
MOV P0, #0FFH ;消影;查表操作
MOV A, @R0 ;间接寻址,获取显存
MOVC A, @A+DPTR ;将显存中的数字映射到段码CJNE R1,#02H,LOOP2
MOV R3,#80H
ADD A,R3
LOOP2:
MOV P0, A ;段选赋值
MOV P2, R1 ;位选赋值
ACALL DELAY ;延时
INC R0 ;显存地址自加,切换到下一位数字的显存;位选左移,切换到下一位显示
MOV A, R1
RL A
MOV R1, ACJNE R1, #10H,DISPLAYLOOP ;根据位选码,判断是否完成四位切换
SJMP MAIN
RET;延时函数----------------------------------------------------------
DELAY:
MOV R7, #2
DELAYLOOP1:
MOV R6, #2
DELAYLOOP2:
MOV R5, #10
DELAYLOOP3:
NOP
DJNZ R5, DELAYLOOP3
DJNZ R6, DELAYLOOP2
DJNZ R7, DELAYLOOP1
RET
END
上面的代码废话有点多,不喜欢的可以直接看这个:
ORG 1000HDB 0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8, 0x80, 0x90 AD0809_ADDA BIT P1.4AD0809_ADDB BIT P1.5AD0809_ADDC BIT P1.6AD0809_CLK BIT P1.3AD0809_STAT BIT P1.2AD0809_EOC BIT P1.1AD0809_OE BIT P1.0AD0809_DA EQU 71HORG 0000HSJMP MAINORG 0030H
MAINLOOP:ACALL MAINSJMP MAINLOOP
MAIN: ;选择0通道输出CLR AD0809_ADDACLR AD0809_ADDBCLR AD0809_ADDC;产生一个下降沿启动AD转换CLR AD0809_STATSETB AD0809_STATCLR AD0809_STAT
LOOP1:;等待转换完成JNB AD0809_EOC,LOOP1;允许输出SETB AD0809_OE;P3的输出到AMOV A,P3;下面是计算16进制转换为10进制的数,从0-255映射到0-5的比较精确的做法,;这个做法相当于0-25500映射到0-500,然后显示的时候在百位后面加一个小数点就好MOV B,#33H DIV ABMOV 30H,A MOV A,B MOV B,#0AH MUL AB ADD A,B MOV R0,A MOV A,#05H MUL AB MOV R1,A MOV A,R0 MOV B,#33H DIV AB ADD A,R1 MOV 31H,A MOV A,#0AH MUL AB ADD A,B MOV R0,A MOV A,#05H MUL AB MOV R1,A MOV A,R0 MOV B,#33H DIV AB ADD A,R1 MOV 32H,A
;显示函数---------------------------------------------------------
;段选:P1.0->P1.7
;位选:P2.0->P2.3
DISPLAY1:
MOV DPTR, #1000H ;码表起始地址
MOV R0, #30H ;显存起始地址
MOV R1, #02H ;位选码 P3.7->0 0 0 0 0 0 0 1->P3.0;四位循环----------------------------------------------------------
DISPLAYLOOP:
MOV P0, #0FFH ;消影;查表操作
MOV A, @R0 ;间接寻址,获取显存
MOVC A, @A+DPTR ;将显存中的数字映射到段码CJNE R1,#02H,LOOP2
MOV R3,#80H
ADD A,R3
LOOP2:
MOV P0, A ;段选赋值
MOV P2, R1 ;位选赋值
ACALL DELAY ;延时
INC R0 ;显存地址自加,切换到下一位数字的显存;位选左移,切换到下一位显示
MOV A, R1
RL A
MOV R1, ACJNE R1, #10H,DISPLAYLOOP ;根据位选码,判断是否完成四位切换
SJMP MAIN
RET;延时函数----------------------------------------------------------
DELAY:
MOV R7, #2
DELAYLOOP1:
MOV R6, #2
DELAYLOOP2:
MOV R5, #10
DELAYLOOP3:
NOP
DJNZ R5, DELAYLOOP3
DJNZ R6, DELAYLOOP2
DJNZ R7, DELAYLOOP1
RET
END
这是我做单片机实验的时候做的,如果您翻阅这篇文章的时间离我发表的时间够近,我还可以帮您解答您的相关疑问,但是时间长了我可能就忘记了,到时候说不定有些地方我自己也看不懂,也就也爱莫能助了,抱歉!!!
AD转换汇编语言模数转换实验相关推荐
- ad转换汇编语言程序_C程序如何转换成汇编
ad转换汇编语言程序 在较早的文章中,我们已经了解了C运行时:启动main和如何将C程序存储在RAM存储器中之前 . 在这里,我们将看到" C程序如何转换为程序集?" 以及它在机器 ...
- pic1路AD转换c语言,pic单片机的ad转换(实例解析)
描述 AD转换就是模数转换.顾名思义,就是把模拟信号转换成数字信号.主要包括积分型.逐次逼近型.并行比较型/串并行型.Σ-Δ调制型.电容阵列逐次比较型及压频变换型.A/D转换器是用来通过一定的电路将模 ...
- AD转换中【参考电压】的作用
AD转换 AD转换就是模数转换.顾名思义,就是把模拟信号转换成数字信号.主要包括积分型.逐次逼近型.并行比较型/串并行型.Σ-Δ调制型.电容阵列逐次比较型及压频变换型. A/D转换器是用来通过一定的电 ...
- AD转换中参考电压的作用
AD转换 AD转换就是模数转换.顾名思义,就是把模拟信号转换成数字信号.主要包括积分型.逐次逼近型.并行比较型/串并行型.Σ-Δ调制型.电容阵列逐次比较型及压频变换型. A/D转换器是用来通过一定的电 ...
- 单片机模数转换实验c语言程序,单片机实验AD转换实验
<单片机实验AD转换实验>由会员分享,可在线阅读,更多相关<单片机实验AD转换实验(5页珍藏版)>请在人人文库网上搜索. 1.实验报告课程名称: 单片机原理及应用 实验项目: ...
- 计算机控制系统AD实验报告,实验一AD转换实验报告.docx
文档介绍: 实验一AD转换实验报告.docx计算机控制系统实验报告实验一实验名称:A/D转换实验二零一六年三月实验_A/D转换实验.实验要求利用ADC做A/D转换器,将模拟量转换成二进制数字量,用延时 ...
- c语言ad转换实验报告,数据采集AD转换实验报告.doc
数据采集AD转换实验报告.doc 学生实验报告册课程名称学 院专业班级姓 名学 号指导教师成 绩学年学期2017-2018学年 秋学期重庆邮电大学教务处制实验项目名称数据采集_A/D转换实验地点控制专 ...
- 计算机控制系统AD实验报告,实验一AD转换实验报告
实验一AD转换实验报告 (6页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 9.9 积分 计算机控制系统实验报告实验一实验名称:A/D转换实验二零一六年三 ...
- AVR单片机 实验六 AD转换应用实验
AVR单片机 实验六 AD转换应用实验 1 实验目的 通过实验,了解AVR单片机模数转换器的初始化,及以定时器自动触发AD转换的方法和工作原理. 2 实验内容 (1) 调整可变电阻, 以获取模拟电压输 ...
最新文章
- freemarker 读取字符串模板,(非文件)
- 您认为有关垃圾收集的7件事-完全错了
- 在linux 5上配置戴尔MD3220i
- 实现pv uv统计_聊聊前端监控(二)--行为监控的技术实现
- 学好Windows编程要看的书籍
- .NET下实现分布式缓存系统Memcached
- javaweb中jsp调试8080端口被占用问题
- mysql按年创建分区表,增加分区表,删除分区表,实战练习
- 把代码写成艺术,真正体会面向对象编程思想
- 基于图神经网络的时空预测
- 用纯css打造表格第一行和前几列锁定
- Unreal Engine 4(虚幻UE4)GameplayAbilities 插件入门教程(三)技能标签(Ability Tags)
- java从零到项目实战(八)
- vi编辑器终端程序的运行(hello world)
- ubuntu(18.04LTS)切换 tty终端模式 和图形桌面
- 使用endnote导入参考文献后的诸多问题
- Django urls 下划线的坑-Using the URLconf defined in xxx, Django tried these URL patterns, in thi
- 2021 中国一流大学名单(30 所)和中国大学综合实力 700 强出炉!
- 重庆大学教授向宏:360扣扣保镖不是病毒和间谍软件
- 用C语言编写数字时钟