松翰单片机内部8位分辨率ADC

发布者:dswecd最新更新时间:2013-04-03 来源: 51hei关键字:松翰单片机  8位分辨率  ADC 手机看文章 扫描二维码
随时随地手机看文章

;目的学习内部8位分辨率ADC及数据处理
;完整代码下载:http://www.51hei.com/f/shrad.rar
 CHIP     SN8F27E65
//{{SONIX_CODE_OPTION
 .Code_Option WDT_CLK  Flosc/4
 .Code_Option Reset_Pin P04
 .Code_Option LVD  LVD_Max  ; 3.3V Reset
 .Code_Option Watch_Dog Disable  ;关闭看门狗
 .Code_Option Low_Fcpu Flosc/1
 .Code_Option High_Clk IHRC_16M ; Internal 16M RC Oscillator
 .Code_Option High_Fcpu Fhosc/1
 .Code_Option Security Enable
 .Code_Option Noise_Filter Enable
//}}SONIX_CODE_OPTION
 
 
 DATAC EQU P4M
 DATA EQU P4
 LEDC EQU P0M
 LED EQU P0

.DATA;数据
 ORG  0
 TEMP  DS 1
 ACCBUF  DS 1
 PflagBUF DS 1

.CODE;程序代码
 ORG 0000H
 JMP A0
 ORG 000BH
 JMP T0
 ORG 0015H
A0: B0BCLR FT0IEN;关闭T0中断
 B0BCLR FT0ENB;禁止T0中断
 MOV A,#16;设置T0时钟
 B0MOV T0M,A;
 MOV A,#16;装初值
 B0MOV T0C,A;
 B0BCLR FT0IRQ;清中断标志
 B0BSET FT0IEN;开T0中断
 B0BSET FT0ENB;允许T0中断
 B0BSET FGIE;开总中断
 MOV A,#3;显示值
 MOV 41H,A
 
 MOV A,#2;显示值
 MOV 42H,A
 MOV A,#1;显示值
 MOV 43H,A
 MOV A,#0;显示值
 MOV 44H,A
;*********************************************
;显示设置
;*********************************************
A1: MOV A,#11111110B ;显示位码
 MOV 31H,A
 MOV A,#4;显示位数
 MOV 33H,A
 B0MOV H,#0 ; 清“H”以寻址RAM bank 0。
 B0MOV L,#41H ; 设定寄存器地址。
 
A2:
 CLR ADM;清ADC 模式寄存器ADM
 
 CLR ADR;清ADR寄存器
 
 MOV A,#00000001B
 B0MOV P5CON,A;选择P5.0为ADC输入通道
 
 MOV A,#00000000B
 B0MOV P5M,A;设置P5口为输入模式
 
 MOV A,#00000000B
 B0MOV P5UR,A;禁止P5口为上拉模式
 
 B0BSET FADENB;ADC使能
 CALL M005;延时
 MOV A,#00001000B
 OR ADM,A;设置ADCHS[3:0]选择ADC 输入通道
 
 B0BSET FGCHS;使能ADC 输入通道
 
 B0BSET FADS;开始AD 转换。
A3:
 B0BTS1 FEOC; 判断是否转换完成
 JMP A3
;*************************
; MOV A,ADB
 MOV A,#0
 MOV 60H,A
 MOV A,ADB;8位模式下转换后数据存在ADB中
 MOV 61H,A
;****************************
 CALL CL1;调用数据处理
 MOV A,64H;将处理后的数据显示出来
 MOV 44H,A;千位
 MOV A,63H
 MOV 43H,A;百位
 
 MOV A,62H
 MOV 42H,A;十位
 
 MOV A,61H
 MOV 41H,A;个位

 B0BCLR FEOC;清标志
 CALL M008;延时
 
 JMP A2
 
;*********************************************
;T0中断
;*********************************************
T0: B0BCLR FT0IEN;关T0中断
 B0BCLR FT0ENB;禁止T0中断
 B0XCH A,ACCBUF;压栈
 B0MOV A,PFLAG;
 B0MOV PFLAGBUF,A;
 MOV A,#0FFH;清显示
 B0MOV DATAC,A;
 B0MOV DATA,A;
 MOV A,#0FFH;
 B0MOV LEDC,A;
 MOV A,#0FFH;
 B0MOV LED,A;
T1:
 MOV A,#0FFH;设置为输出口
 B0MOV DATAC,A;
 B0MOV Y,#Q1$M;编码表地址
 B0MOV Z,#Q1$L;编码表地址
 B0MOV A, @HL;间接寻址
 ADD Z,A;寻找要显示编码
 MOVC ;查表高八位存在R低八位存在ACC
 B0MOV DATA,A;数据输出
 
 
 MOV A,#0FFH;设为输出口
 B0MOV LEDC,A

 MOV A,31H;位码
 B0MOV LED,A
 MOV A,31H;处理位码的数由于没有RL只有RLC现在这里处理C
 MOV 32H,A
 RLC 32H
 RLCM 31H;移动位码
 INCMS L;显示数据控制寄存器处理
 CALL M001;延时提高亮度
 MOV A,#0FFH;清显示
 B0MOV DATAC,A
 B0MOV DATA,A
 MOV A,#0FFH
 B0MOV LEDC,A
 MOV A,#0FFH
 B0MOV LED,A
 DECMS 33H;自动减1判断是否也显示完成
 JMP T1[page]
 
 MOV A,#11111110B ;显示位码
 MOV 31H,A
 MOV A,#4;显示位数
 MOV 33H,A
 B0MOV H,#0 ; 清“H”以寻址RAM bank 0。
 B0MOV L,#41H ; 设定寄存器地址。
 B0MOV A,PFLAGBUF;弹栈
 B0MOV PFLAG,A;
 B0XCH A,ACCBUF;
 MOV A,#16;设T0时钟
 B0MOV T0M,A;
 MOV A,#16;重装初值
 B0MOV T0C,A;
 B0BCLR FT0IRQ;清中断标志
 B0BSET FT0IEN;开中断
 B0BSET FT0ENB;允许中断
 B0BSET FGIE;开总中断
 RETI;

CL1:
;******************************
; MOV A,#60H
; MOV 62H,A
;
; MOV A,#11111111b
; MOV 61H,A
 
 

;***************************
 CALL CL2
 MOV A,65H
 AND A,#11110000B
 MOV 60H,A
 SWAP 60H
 MOV 62H,A;十位
 MOV A,65H
 AND A,#00001111B
 MOV 61H,A;个位
 MOV A,63H;万位
 MOV 65H,A
 
 MOV A,64H
 AND A,#00001111B
 MOV 63H,A;百位
 MOV A,64H
 AND A,#11110000B
 MOV 64H,A
 SWAPM 64H;千位
 RET
 
 
CL2: MOV A,#0
 MOV 63H,A
 MOV 64H,A
 MOV 65H,A
 MOV A,#16
 MOV 67H,A
CL3: B0BCLR FC
 RLCM 61H;(低8位)
 RLCM 60H;(高8位)
 MOV A,65H;个十位
 ADC A,65H;
 DAA ;
 MOV 65H,A;
 MOV A,64H;百千位
 ADC A,64H;
 DAA ;
 MOV 64H,A;
 MOV A,63H;万位
 ADC A,63H;
 DAA ;
 MOV 63H,A;
 
 DECMS 67H;
 JMP CL3;
 RET;
 
 
 
 
 
 
 
;******************************************
;延时子程序
;******************************************
M001: MOV A,#1
 MOV 51H,A
M002: MOV A,#24
 MOV 52H,A
M003: MOV A,#250
 MOV 53H,A
M004: DECMS 53H
 JMP M004
 DECMS 52H
 JMP M003
 DECMS 51H
 JMP M002
 RET

M005: MOV A,#200
 MOV 55H,A
M006: DECMS 55H
 JMP M006 
 RET
M007: MOV A,#1
 MOV 56H,A
M008: MOV A,#20
 MOV 57H,A
M009: MOV A,#250
 MOV 58H,A
M010: DECMS 58H
 JMP M010
 DECMS 57H
 JMP M009
 DECMS 56H
 JMP M008
 RET
 
 
 
;******************************************
;编码表
;******************************************
Q1:   DW     00C0H        ;0
      DW     00F9H        ;1
      DW     00A4H        ;2
      DW     00B0H        ;3
      DW     0099H        ;4
      DW     0092H        ;5
      DW     0082H        ;6
      DW     00F8H        ;7
      DW     0080H        ;8
      DW     0090H        ;9
      DW     0088H        ;A
      DW     0083H        ;B
      DW     00C6H        ;C
      DW     00A1H        ;D
      DW     0086H        ;E
      DW     008EH        ;F
      endp

关键字:松翰单片机  8位分辨率  ADC 引用地址:松翰单片机内部8位分辨率ADC

上一篇:松翰单片机外部中断程序
下一篇:芯海单片机除法运算

推荐阅读最新更新时间:2024-03-16 13:21

16位ADC提供19位分辨率的电路设计
许多数据采集系统都要求高精度和快速采集数据,以便允许该系统能够检测小信号并且能将更多的传感器通道*在同一系统。传感器通道越多,系统的外形就能够越小,成本和功耗也越低。远程光通信和医用设备(例如,CT扫描仪)即得益于快速和高精度的数据采集系统。在光功率系统(例如,激光泵)中,需要不断监视其功率水平。在这种数据采集系统中,对于需要≥90dB动态范围的输入激光功率,其激光控制环路响应时间要求具有1MSPS的采样率。在CT扫描仪中,数据采集系统必须具有16 b到22 b的分辨率,以便处理通过各种人体组织的宽动态范围的X射线信号。该系统需要大量的光检测器(较多的数据采集通道)和高精度数据采集以提高图像分辨率。 以上两个例子说明了系
[模拟电子]
STM32G0开发笔记:多通道ADC与DMA的使用
使用Platformio平台的libopencm3开发框架来开发STM32G0,以下为多通道ADC与DMA的使用。 1 新建项目 建立adc_dma项目 在PIO的Home页面新建项目,项目名称adc_dma,选择开发板为 MonkeyPi_STM32_G070RB,开发框架选择libopencm3; 项目建立完成后在src目录下新建main.c主程序文件; 修改下载和调试方式,这里开发板使用的是DAPLink仿真器,因此修改platformio.ini文件如下: 1upload_protocol = cmsis-dap 2debug_tool = cmsis-dap 2 编写程序 2.1 ADC 设置 这里设置PA0、P
[单片机]
STM32G0开发笔记:多通道<font color='red'>ADC</font>与DMA的使用
C8051F020中的ADC应用要素
F020具有8路12位A/D转换(简称ADC)接口和8路8位在线可编程(ISP)的ADC电路,片上的特殊功能寄存器(简称SFR)有15个与ADC的控制相关,它们是: AMUX0SL——AMUX0通道选择寄存器,复位值为00000000; MAX0CF——AMUX0配置寄存器,复位值为00000000; ADC0CF——ADC0配置寄存器,复位值为11111000; ADC0CN——ADC0控制寄存器,复位值为00000000; ADC0H——ADC0数据字MSB寄存器,复位值为00000000; ADC0L——ADC0数据字LSB寄存器,复位值为00000000; ADC0GTH——ADC0下限数据高字
[单片机]
单片机实现adc0808程序
一: 系统图: 程序部分: #include AT89X52.H unsigned char code dispbitcode ={0x01,0x02,0x04, 0x08,0x10,0x20,0x40,0x80}; unsigned char code dispcode ={0x3f,0x06,0x5b,0x4f,0x66, 0x6d,0x7d,0x07,0x7f,0x6f}; unsigned char dispbuf ={0,0,0}; unsigned char dispcount; sbit ST=P3^2; sbit OE=P3^0; sbit EOC=P3^1; unsigned char get
[单片机]
<font color='red'>单片机</font>实现<font color='red'>adc</font>0808程序
STM32通过io模拟SPI与ADC124S021通信
/***************************** U11 *********************************/ //extern unsigned int ad_val; unsigned char ch_temp; #define AD_FF 1 #define AD_ZF 2 #define AD_MF 3 #define AD_GM 4 #define ADC124S21_CS_PA4_OUT GPIO_Pin_4 //使用PA4作为输出,控制ADC124S21芯片的片选 #define ADC124S21_CLK_PA5_SCK
[单片机]
如何在MCU内完成ADC
STM32的优点在哪里?除去宣传环节,细细分析,STM32时钟不算快,72MHZ,也不能扩展大容量的RAM FLASH,同样没有DSP那样强大的指令集。它的优势在哪里呢? ---就在快速采集数据,快速处理上。 ARM的特点就是方便。 这个快速采集,高性能的ADC就是一个很好的体现,12位精度,最快1uS的转换速度,通常具备2个以上独立的ADC控制器,这意味着,STM32可以同时对多个模拟量进行快速采集,这个特性不是一般的MCU具有的。以上高性能的ADC,配合相对比较块的指令集和一些特色的算法支持,就构成了STM32在电机控制上的强大特性。 好了,正题,怎么做一个简单的ADC? 注意是简单的,ADC是个复杂的问题,涉及硬件设
[单片机]
如何在<font color='red'>MCU</font>内完成<font color='red'>ADC</font>?
如何利用万用表测试ADC的精度
开始 申请开发板的时候我的开发目标是基于GD32F310设计一个全双工串口转单线半双工串口的串行舵机控制器,但是这个项目和我本职工作的一个项目比较类似,不方便开源通信部分的代码,所以临时改变文章的主题为测试ADC的精度,项目的所有代码已在github开源,希望文章的内容对朋友们的工作和学习有所帮助; 移植固件库 到GD32的官网下载文档三份:GD32F310数据手册/GD32F3x0用户手册/GD32F3x0固件库使用手册,最新版本固件库压缩包一份;固件库经过我的整理,提取了项目开发的基础文件并归类到三个文件夹中,作为基础空白的工程项目: bsp:板级支持相关的代码文件,包含了各个外设模块的初始化函数/基本的驱动函
[测试测量]
如何利用万用表测试<font color='red'>ADC</font>的精度
高速ADC时钟抖动及其影响的研究
随着信息产业的快速发展,对A/D、D/A的性能要求越来越高。目前,针对高速、高精度ADC 的研究很活跃。采样时钟是ADC变换电路的基本要素,对电路设计者来讲,ADC时钟电路采用的时钟方案、时钟类型、时钟电压等级、时钟抖动都是在实际电路设计时必须予以考虑的问题。采样时钟的抖动是一个短期的、非积累性变量,表示数字信号的实际定时位置与其理想位置的时间偏差。时钟抖动会使ADC的内部电路错误地触发采样时间,结果造成模拟输入信号在幅度上的误采样,从而恶化ADC的信噪比,采样时钟的抖动对高速、高精度ADC性能的影响也不可忽视 。 图1所示是一种典型的ADC时钟电路,高速ADC,例如 ADS5500 ,经常采用这种时钟结构。本文针对图1所示时
[工业控制]
高速<font color='red'>ADC</font>时钟抖动及其影响的研究
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

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