51单片机汇编学习例程(9)——ADC0809篇
ASM9_ADC0808: ADC0808采集ADC参数,数码管显示
(注意代码显示不全,最下面有Keil源码和Proteus工程)
/**
******************************************************************************
* @file ADC0809/ADC0808.asm
* @author Alex——小白
* @version V1.0
* @date 2019.9.1
* @brief ADC0808/0809采集,数码管显示
* @store Proteus仿真店子
* @Link https://shop484534014.taobao.com/
* @Email 844545015@qq.com
******************************************************************************
* @attention All Rights Reserved
**/;例如采集ADC=127,则Num_2=1,Num_1=2,Num_0=7,只需要低3位数码管Num_0 EQU 30H ;数字0Num_1 EQU 31H ;数字1Num_2 EQU 32H ;数字2ADC EQU 33H ;ADC值Duan BIT P2.0 ;引脚变量名Wei BIT P2.1OE BIT P2.2ST BIT P2.3 EOC BIT P2.4 ORG 0000H ;程序执行的起始地址 LJMP Main ;跳转到main函数ORG 0100H ;程序跳转到0100H开始执行Main: CLR Wei ;573的位片选引脚CLR Duan ;573的段片选引脚MOV Num_0,#00H MOV Num_1,#00H MOV Num_2,#00HWhile: LCALL ADC0808 ;调用ADC0808采集代码SJMP While ;While循环 ADC0808: ;ADC采集代码CLR ST ;ST启动 SETB STCLR STJNB EOC,$ ;等待采集完成SETB OE ;开启数据传输MOV ADC,P1 ;采集数据赋给ADC变量LCALL CAL ;调用计算显示代码CLR OE ;关闭数据传输RETCAL: ;计算电压值MOV A,ADC ;0-255映射为0-5 循环取整MOV B,#51 DIV AB MOV Num_2,A ;整数MOV A,B ;余数放入ACLR F0SUBB A,#1AH ;余数和51的一半1AH比较,以便四舍五入MOV F0,CMOV A,#10MUL AB ;余数乘以10,再除以51MOV B,#51DIV ABJB F0,Next1ADD A,#5Next1:MOV Num_1,AMOV A,BSUBB A,#1AHMOV F0,CMOV A,#10MOV B,#51DIV ABJB F0,Next2ADD A,#5Next2:MOV Num_0,ALCALL DISPRETDISP: ;数码管5,6,7共3位显示,总是先位选,后段选。MOV DPTR,#Wei_Tab ;DPTR指向数组Wei_Tab首位SETB Wei ;打开控制位数码管的使能端-位选MOV A,#7 ;第7位赋给AMOVC A,@A+DPTR ;读取数组数Duan_TabMOV P0,A ;数码管赋值位CLR Wei ;关闭控制位数码管的使能端MOV P0,#0FFH ;消影MOV DPTR,#Duan_Tab ;DPTR指向数组Duan_Tab首位SETB Duan ;打开控制段数码管的使能端-段选 MOV A,Num_0 ;段号赋给AMOVC A,@A+DPTR ;读取数组数Duan_TabMOV P0,A ;数码管赋值段CLR Duan ;关闭段选MOV P0,#0FFH ;消影LCALL Delay ;延时5msMOV DPTR,#Wei_Tab ;DPTR指向数组Wei_Tab首位SETB Wei ;打开控制位数码管的使能端-位选MOV A,#6 ;第6位赋给AMOVC A,@A+DPTR ;读取数组数Duan_TabMOV P0,A ;数码管赋值位CLR Wei ;关闭控制位数码管的使能端MOV P0,#0FFH ;消影MOV DPTR,#Duan_Tab ;DPTR指向数组Duan_Tab首位SETB Duan ;打开控制段数码管的使能端-段选 MOV A,Num_1 ;段号赋给AMOVC A,@A+DPTR ;读取数组数Duan_TabMOV P0,A ;数码管赋值段CLR Duan ;关闭段选MOV P0,#0FFH ;消影LCALL Delay ;延时5msMOV DPTR,#Wei_Tab ;DPTR指向数组Wei_Tab首位SETB Wei ;打开控制位数码管的使能端-位选MOV A,#5 ;第5位赋给AMOVC A,@A+DPTR ;读取数组数Duan_TabMOV P0,A ;数码管赋值位CLR Wei ;关闭控制位数码管的使能端MOV P0,#0FFH ;消影MOV DPTR,#Duan_Tab ;DPTR指向数组Duan_Tab首位SETB Duan ;打开控制段数码管的使能端-段选 MOV P0,#080H ;数码管小数点CLR Duan ;关闭段选MOV P0,#0FFH ;消影LCALL Delay ;延时5msMOV DPTR,#Wei_Tab ;DPTR指向数组Wei_Tab首位SETB Wei ;打开控制位数码管的使能端-位选MOV A,#5 ;第5位赋给AMOVC A,@A+DPTR ;读取数组数Duan_TabMOV P0,A ;数码管赋值位CLR Wei ;关闭控制位数码管的使能端MOV P0,#0FFH ;消影MOV DPTR,#Duan_Tab ;DPTR指向数组Duan_Tab首位SETB Duan ;打开控制段数码管的使能端-段选 MOV A,Num_2 ;段号赋给AMOVC A,@A+DPTR ;读取数组数Duan_TabMOV P0,A ;数码管赋值段CLR Duan ;关闭段选MOV P0,#0FFH ;消影LCALL Delay ;延时5msRET Delay: ;t=t1*10=5ms,修改R6的值即可更改时间(不精准)MOV R6, #00AH ;00AH=10D1: MOV R7, #0FAH ;t1=250*2=500D2: DJNZ R7, D2 ;R7=250自减,直到为0跳出循环,双周期DJNZ R6, D1 ;R6=020自减,直到为0跳出循环,双周期RETDuan_Tab:DB 03FH,006H,05BH,04FH,066H,06DH,07DH,007H,07FH,06FH Wei_Tab:DB 0FEH,0FDH,0FBH,0F7H,0EFH,0DFH,0BFH,07FHEND
1、学习目的
通过对ADC0808芯片采集模拟值,然后数码管显示电压数值。
2、学习内容
ADC作为模数转换的核心,是必须要掌握的教程,51单片机没有自带的ADC引脚,只能使用常见的ADC0808/ADC0809(基本读写命令一致)来完成。ADC0808是8 位A/D 转换器,有8个模拟输入通道,主要控制引脚有Start、EOC、OE、CLK,具体时序如下图:
如需下载Proteus仿真文件和Keil工程,请关注公众号:
Proteus仿真店子
(若需Proteus和keil安装包,后台回复:安装包;若需Proteus教学视频,后台回复:Proteus视频;若需其它设计,后台回复:51汇编设计)
51单片机汇编学习例程(9)——ADC0809篇相关推荐
- 51单片机汇编学习例程(7)——74HC595数码管篇
7.ASM7_Seg_595: 74HC595控制数码管静态显示 (注意代码显示不全,最下面有Keil源码和Proteus工程) /** **************************** ...
- 51单片机汇编学习例程(16)——AT24C02篇
ASM16_AT24C02:EEPROM数据读写,LED显示 (注意代码显示不全,最下面有Keil源码和Proteus工程) /*********************************** ...
- 51单片机汇编学习例程(17)——KeyPad4X4篇
ASM17_KeyPad4X4:矩阵键盘,LCD1602显示按键值. (注意代码显示不全,最下面有Keil源码和Proteus工程) 仿真视频 /** *********************** ...
- 51单片机汇编学习例程(10)——DAC0832篇
ASM10_DAC0832: DAC0832输出各种波形 (注意代码显示不全,最下面有Keil源码和Proteus工程) /** ****************************** ...
- 51单片机汇编学习例程(13)——DC-Motor篇
ASM13_DCMotor: DC-Motor电机控制 (注意代码显示不全,最下面有Keil源码和Proteus工程) /********************************** ...
- 51单片机汇编学习(一)点亮你的LED灯
本帖为使用汇编编写51单片机的学习笔记,本帖使用软件为keil5,因为没有实际硬件,所以选择porteus仿真软件,因为是第一篇,所以内容多有赘述,详细说明了工程建立等,因为文章太长所以编程和仿真分开 ...
- 51单片机汇编学习笔记9——定时计数器
这一小节介绍一下51单片机的一个重要外设定时计数器. 顾名思义定时计数器主要是两种功能:定时.计数. 定时:就是当你开启定时器后到了设定的时间他会触发中断,然后去执行中断服务函数里面的程序. 计数:主 ...
- 51单片机汇编学习11——扩展原理与接口技术
终于到这一小节了.这一节讲扩展原理与接口技术. 那么什么是扩展原理&接口技术呢?其实主要是3种. 1.扩展一个程序存储器 2.扩展一个数据存储器 3.扩展IO口 1.扩展程序存储器 其实这个扩 ...
- 51单片机汇编学习10——串口通讯
这一小节写一下串口通讯. 建议先去了解一下什么串行通讯. 推荐一个视频3分钟理解通信协议之串口UART到底是个啥?_哔哩哔哩_bilibili 因为串口通讯涉及的寄存器相对较多.所以尽量要自己去看看S ...
最新文章
- 指针 是否相同_c专题之指针---野指针和空指针解析
- MSChart使用导航之开发
- NYOJ 36 最长公共子序列 dp
- 全球唯一:MySQL社区2018年度公司贡献奖颁给阿里云
- php foreach 为什么在if条件下多条数据只取出一条数据_微信大牛教你深入了解数据库索引...
- 2道编程题:1.给定一个字符串,计算字符串中数值的个数并求和。
- iOS 11.3 显示:Apple ID 或将实现微信式扫码登陆
- typedef与define的区别
- multiprocessing.queue取数据要加锁么_秒杀抢购思路以及高并发下数据安全
- linux malloc 内存不足,linux中 对malloc/free分配及释放内存空间时发生的泄漏问题
- 【C 语言】文件操作 ( fread 函数 )
- 什么是私有ip 、A类地址、B类地址和C类地址?
- TeamTalk 配置模块详解
- 关闭445端口bat脚本
- 硬件工程师的真实前途我说出来可能你们不信
- 有关XLS文件的读取
- 数据库简介、及常用数据库介绍
- 架构师推荐书籍 一
- 传智播客创始人张孝祥因病去世(转)
- Win11笔记本耗电大怎么解决?Win11耗电快怎么办?
热门文章
- 中值滤波,均值滤波,高斯滤波,双边滤波,联合双边滤波介绍
- [Samba] Linux(Centos)samba服务安装,Samba文件共享及Samba配置详解
- Java毕业设计-商城管理系统
- python获取根目录位置
- html+css+js仿写星巴克网页
- 软件产品质量要求和测试细则-信息安全性
- 如何实现1-100的阶乘?
- linux 性能测试 antutu,安兔兔“不诚实”?这三款跑分软件绝对值得一试!
- IBM Rational Functional Tester用户手册(一)
- 另一种MTK特效制作的方法,层复制