单片机p2 0x1fadc使用教程里,main程序里p2没有定义,为什么可以使用啊?

豆丁微信公众号
君,已阅读到文档的结尾了呢~~
第12章stc单片机adc原理及实现
扫扫二维码,随身浏览文档
手机或平板扫扫即可继续访问
第12章stc单片机adc原理及实现
举报该文档为侵权文档。
举报该文档含有违规或不良信息。
反馈该文档无法正常浏览。
举报该文档为重复文档。
推荐理由:
将文档分享至:
分享完整地址
文档地址:
粘贴到BBS或博客
flash地址:
支持嵌入FLASH地址的网站使用
html代码:
&embed src='http://www.docin.com/DocinViewer--144.swf' width='100%' height='600' type=application/x-shockwave-flash ALLOWFULLSCREEN='true' ALLOWSCRIPTACCESS='always'&&/embed&
450px*300px480px*400px650px*490px
支持嵌入HTML代码的网站使用
您的内容已经提交成功
您所提交的内容需要审核后才能发布,请您等待!
3秒自动关闭窗口STC单片机内置ADC的使用方法_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
STC单片机内置ADC的使用方法
&&STC的AD使用
阅读已结束,下载本文需要
想免费下载本文?
定制HR最喜欢的简历
下载文档到电脑,同时保存到云知识,更方便管理
还剩1页未读,继续阅读
定制HR最喜欢的简历
你可能喜欢ADC/DAC概述
ADC/DAC应用
ADC/DAC程序模块
ADC/DAC典型应用
ADC和DAC原理及特点
&&& 数模(DAC)的基本原理
&&& DAC的内部构成无太大差异,一般按输出是电流还是电压、能否作乘法运算等进行分类.大多数DAC由阵列和n个电流(或电压开关)构成.按数字输入值,产生比例于输入的电流(或电压) .此外,也有为了改善精度而把放入器件内部的.DAC分为电压型和电流型两大类,电压型DAC有权电阻网络、T型电阻网络和树形开关网络等;电流型DAC有权电流型电阻网络和倒T型电阻网络等.
&&& 1 电压输出型(如TLC5620) .电压输出型DAC虽有直接从电阻阵列输出电压的,但一般采用内置输出以低阻抗输出.直接输出电压的器件仅用于高阻抗负载,由于无输出放大器部分的延迟,故常作为高速DAC使用.
&&& 2 电流输出型(如 ) .电流输出型DAC很少直接利用电流输出,大多外接电流- 电压转换电路得到电压输出,后者有两种方法:一是只在输出引脚上接而进行电流- 电压转换,二是外接.
&&& 3 乘算型(如AD7533) .DAC中有使用恒定基准电压的,也有在基准电压输入上加交流信号的,后者由于能得到数字输入和基准电压输入相乘的结果而输出,因而称为乘算型DAC.乘算型DAC一般不仅可以进行乘法运算,而且可以作为使输入信号数字化地衰减的衰减器及对输入信号进行调制的使用.
&&& 4 一位DAC.一位DAC与前述转换方式全然不同,它将数字值转换为脉冲宽度调制或频率调制的输出,然后用数字作平均化而得到一般的电压输出,用于音频等场合.
&&& (ADC)的基本原理
&&& 模拟信号转换为数字信号,一般分为四个步骤进行,即取样、保持、量化和编码.前两个步骤在取样-保持电路中完成,后两步骤则在ADC中完成.
&&& 常用的ADC有积分型、逐次逼近型、并行比较型/串并行型、Σ -Δ调制型、电容阵列逐次比较型及压频变换型.下面简要介绍常用的几种类型的基本原理及特点:
&&& 1 积分型(如TLC7135) .积分型ADC工作原理是将输入电压转换成时间或频率,然后由/获得数字值.其优点是用简单电路就能获得高分辨率,但缺点是由于转换精度依赖于积分时间,因此转换速率极低.初期的单片ADC大多采用积分型,现在逐次比较型已逐步成为主流.双积分是一种常用的AD 转换技术,具有精度高,抗干扰能力强等优点.但高精度的双积分AD,价格较贵,增加了系统的成本.
&&& 2 逐次逼近型(如TLC0831) .逐次逼近型AD由一个和DA转换器通过逐次比较逻辑构成,从MSB开始,顺序地对每一位将输入电压与内置DA转换器输出进行比较,经n次比较而输出数字值.其电路规模属于中等.其优点是速度较高、功耗低,在低分辨率( & 12位)时价格便宜,但高精度( & 12位)时价格很高.
&&& 3 并行比较型/串并行比较型(如TLC5510) .并行比较型AD采用多个比较器,仅作一次比较而实行转换,又称型.由于转换速率极高, n位的转换需要2n - 1个比较器,因此电路规模也极大,价格也高,只适用于视频AD 转换器等速度特别高的领域.串并行比较型AD结构上介于并行型和逐次比较型之间,最典型的是由2个n /2位的并行型AD转换器配合DA转换器组成,用两次比较实行转换,所以称为Half型.
&&& 4 Σ-Δ调制型(如AD7701) .Σ- Δ型ADC以很低的采样分辨率( 1位)和很高的采样速率将模拟信号数字化,通过使用过采样、噪声整形和数字滤波等方法增加有效分辨率,然后对ADC输出进行采样抽取处理以降低有效采样速率.Σ-Δ型ADC的电路结构是由非常简单的模拟电路和十分复杂的数字信号处理电路构成.
&&& 5 电容阵列逐次比较型.电容阵列逐次比较型AD在内置DA转换器中采用电容矩阵方式,也可称为电荷再分配型.一般的电阻阵列DA转换器中多数电阻的值必须一致,在单芯片上生成高精度的电阻并不容易.如果用电容阵列取代电阻阵列,可以用低廉成本制成高精度单片AD转换器.最近的逐次比较型AD转换器大多为电容阵列式的.
&&& 6 压频变换型(如AD650) .压频变换型是通过间接转换方式实现模数转换的.其原理是首先将输入的模拟信号转换成频率,然后用计数器将频率转换成数字量.从理论上讲这种AD的分辨率几乎可以无限增加,只要采样的时间能够满足输出频率分辨率要求的累积脉冲个数的宽度.其优点是分辨率高、功耗低、价格低,但是需要外部计数电路共同完成AD转换.
ADC和DAC的主要技术指标
&&& ADC主要技术指标
&&& 1 ADC分辨率指输出数字量变化一个最低有效位(LSB)所需的输入模拟电压的变化量.
&&& 2 转换速率是指完成一次从模拟转换到数字的AD转换所需的时间的倒数.积分型AD的转换时间是毫秒级属低速AD,逐次比较型AD是微秒级属中速AD,全并行/串并行型AD可达到纳秒级.
&&& 3 ADC的精度决定于量化误差及系统内其他误差之总和.一般精度指标为满量程的±0. 02% ,高精度指标为满量程的0. 001%.
&&& 4 量化误差由于AD 的有限分辨率而引起的误差,即有限分辨率AD的阶梯状转移特性曲线与无限分辨率AD (理想AD)的转移特性曲线(直线)之间的最大偏差.通常是1个或半个最小数字量的模拟变化量,表示为1LSB、1 /2LSB.
&&& DAC的主要技术指标
&&& 1 分辩率指输出模拟电压的最小增量,即表明DAC输入一个最低有效位(LSB)而在输出端上模拟电压的变化量.
&&& 2 建立时间是将一个数字量转换为稳定模拟信号所需的时间,也可以认为是转换时间.DA中常用建立时间来描述其速度,而不是AD中常用的转换速率.一般地,电流输出DA建立时间较短,电压输出DA则较长.
&&& 3 线性度在理想情况下,DAC的数字输入量作等量增加时,其模拟输出电压也应作等量增加,但是实际输出往往有偏离.
&&& 4 精度是指输入端加有最大数值量时,DAC的实际输出值和理论计算值之差,它主要包括非线性误差、比例系统误差、失调误差.
ADC和DAC的发展趋势和应用前景
&&& 对高速ADC和DAC的发展策略是在性能不受影响的前提下尽量提高集成度,为最终用户提供产品的.对ADC和DAC的需求大量增加,而且要求性能指标有较宽覆盖面,以便适应不同场合应用的要求.ADC主要的应用领域不断拓宽,广泛应用于多媒体、通讯、自动化、仪表等领域.对不同的领域的不同要求,例如、、通道、内部配置的要求,每一类ADC都有相应的优化设计方法;同时,用户不仅要考虑到ADC本身的工艺和结构,而且还应考虑到ADC的外围电路,如相应的信号调理电路等模拟电路的设计.
&&& 自管ADC面世以来,经历了分立半导体、数据的发展历程.ADC和DAC的生产已进入全集成化阶段,同时在转换速度和转换精度等主要指标上有了重大突破,还开发了一些具有与计算机直接接口功能的.在集成技术中,又发展了模块、混合和集成数据转换器技术.
&&& 随着通信事业、多媒体技术和数字化设备的飞速发展,信号处理越来越趋向数字化,促进了高速DAC有了长足进步,牵动着DAC制造商研制出许多新结构、新工艺及各种特殊用途的高速DAC.高速DAC的应用领域主要有三个方面:数字化仪器,包括波形重建和任意波形;直接数合成(DDS) ,包括本机、跳频无线电设备、通信系统、正交调制(QAM)系统和雷达系统;图形显示系统,包括失量扫描和扫描.
&&& 数据转换器技术是模拟信号和数字信号之间的重要桥梁,低电压、大电流、高效率、小尺寸、低成本是ADC /DAC转换器发展的趋势.同时, ADC /DAC转换器的效率和密度也在不断增加.除此以外,通信与网络设备的集成化趋势需要ADC /DAC转换器集成更多的功能,同时具有更宽的输出电压或多路输出.近年来转换器产品已达到数千种,ADC和DAC的市场呈稳步增长的发展趋势,它们在现代军用和民用电子系统中均显示出其重要性.
&&& 10位串行模数转换芯片的原理及应用
10位串行模数转换芯片AD7810的原理及应用
是美国模拟器件公司( Devices)生产的一种低功耗10位高速串行A/D。该产品有8脚和SOIC两种封装形式,并带有内部时钟。它的外围接线极其简单,的转换时间为2μs,采用标准SPI同步串行输出和单一(2.7V~5.5V)供电。在自动低功耗模式下,该器件在转换吞吐率为1kSPS时的功耗仅为27μW,因此特点适合于便携式及各种供电的应用场合使用。
&&&&&& 1 引脚功能
引脚排列如图1所示,各引脚的功能如下:
1脚CV:转换启动输入信号。
2脚VIN+:模拟信号同相输入端。
3脚VIN-:模拟信号反相输入端。
4脚GND:接地端口。
5脚VREF:转换参考电压输入端。
6脚DOUT:串行数据输出端。
7脚SCLK:时钟输入端。
8脚VDD:电源端。
& 2 主要参数
的主要参数如下:
分辨率:10位二进制;
转换时间:2μs;
非线性误差:±1LSB;
电源电压范围:2.7~5.5V;
电源功耗:高速方式时为17.5mW,低功耗方式时为5μW;
参考电压VEFR范围:1.2V~VDD;
模拟电压输入范围:0V~VREF;
输出形式:SPI同步串行输出,与TTL电平兼容。
&&&&&& 3.1 高速模式工
&&&&&&&图2是工作在高速模式时的时序图。在此模式下,启动信号CONVST一般处于高电平。在CONVST端输入一个负脉冲,其下降沿将启动一次转换。若采用内部时钟,那么,转换需要2μs的时间(图中t1)。当转换结束时(图中A点),会自动将转换结果锁存到输出移位寄存器中。此后,在每一个SCLK脉冲的上升沿,数据按由高到低的原则(首先发送DB9,最后发送DB0)依次出现在DOUT上。如果在转换还未结束之前就发出SCLK信号来启动数据输出,那么,在DOUT上出现的将是上一次转换的结果。
&&&&&& 启动信号CONVST应在转换结束前变为高电平,即t3应小于t1,否则器件将自动进入低功耗模式。另外,串行时钟SCLK的最高频率不能超过20MHz。
&&&&&&& 3.2 自动低功耗模式
&&&&&& 图3是工作在自动低功耗模式时的时序图。在此模式下,启动信号CONVST为低电平时,器件处于低功耗休眠状态。当在CONVST端输入一个正脉冲时,可在其上升沿将器件从休眠状态唤醒,唤醒过程需要1μs的时间(图中t2)。当器件被唤醒后,系统将自动启动一次转换,转换时间也是2μs(图中t1)。转换结束时,将转换结果锁存到输出移位寄存器中,同时自动将器件再一次置于低拉耗状态。
&&&&&&& 启动信号CONVST正脉冲的宽度(图2中t3)应小于1μs,否则器件被唤醒后将不会自动启动转换,而是将A/D转换的启动时间顺延至CONVST的睛降沿处。自动低功耗模式是是一大特铎,一般当数据吞吐率小于100kSPS时,应使器件工作在此模式下。在5V电源电压下,当数据吞吐率为100kSPS时,器件的功耗2.7mW;而当数据吞吐率为 10kSPS时,功耗为270μW;若数据吞吐率为1kSPS,则其功耗仅27μW。
&&&&&&& 4 的典型应用
&&&&&&& 应用时几乎不需外围元件。图4所示是其典型应用,其参考电压VREF接至VDD,模拟输入VIN-接至GND,而待转换电压则从VIN+输入。
几乎可与各种进行接口,图4中的MCU可以是8051
或PIC16C6X/7X。当与PIC16C6X/7X系列进行接口时,可将SCLK接至单片机的SCK(RC3),将DOUT接至SDI(RC4),而其启动信号CONVST则可接至单片机的任意输出口上(如RC0)。由于PIC单片机的 SPI方式每次只能接收8位数据,因此10位数据应分两次读取。当与8051接口时,电路采用的是一种模拟方式,的 SCLK、DOUT和CONVST分别接至8051的P1.0、P1.1和P1.2,只要严格按照的时序要求操作,一般接口都不会有问题。这种方式实际上可扩展到所有的MCU种类。另外,8051也可利用其串行口工作方式0与进行通讯(图中未画出),但这时应解决好两个问题:一是由于8051在TXD的上升沿进行采样,这样,TXD应经过一个反相器再接到SCLK,而将RXD接至DOUT,然后将CONVST接至任意一个输出端口。二是8051串行口首先接收低位数据,这一点与刚好相反,因此,编程时应当注意。
&&&&&&& 下面给出PIC16C6X/7X和8051分别与AD
7810进行通讯的两段程序,作者只对与A/D转换有关的部分进行了编写(常用资源定义、定义等均未列出),两段程序均可钭的工作控制在自动低功耗方式。8051与通讯程序如下:
START:CLR P1.0 ;初始化
LOOP:CALL CON0
... ;主程序省略
;A/D转换子程序,返回时数据低8位在R2中,高2位在R3中
CON0:MOV R1,#`10 ;10位数据
MOV R2,#0
SETB P1.2 ;唤醒启动
CON1:SETB P1.0 ;发送SCLK信号
MOV C,P1.1 ;读一位数据
MOV A,R2 ;数据移位
DJNZ R1,CON1
PIC16C6X/7X与的通讯程序如下:
REG1 EQU 0X20 ;寄存器定义
REG2 EQU 0X21
CLRF PORTC ;端口初始化
BSF STATUS,RP0
MOVLW 0X30
MOVWF TRISC
BCF STATUS,PR0
BCF SSPCON,SSPEN
MOVLW 0X00 ;SPI初始化
MOVWF SSPCON
BSF SSPCON,SSPEN SPI开放
LOOP CALL ADCON
... ;主程序省略
;A/D转换子程序,返回时数据低8位在REFG1中,高2位在REG2中
ADCON BSF PORTC,0 ;唤醒启动
BCF PORTC,0
MOVWF SSPBUF ;启动接收高8位
BSF STATUS,RP0
CON1 BTFSS SSPSTAT,BF ;数据已接收?
GOTO CON1 ;没有收到
BCF STATUS,RP0
MOVF SSPBUF,W
MOVWF REG1 ;高8位送REG1
MOVWF SSPBUF ;启动接收低2位
BSF STATUS,PR0
CON1 BTFSS SSPSTAT,BF ;数据已接收?
GOTO CON1 ;没有收到
BCF STATUS,RP0
MOVF SSPBUF,W
ANDLW B ;保留有效位
MOVWF REG2 ;低2位送REG2
BCF STATUS,C ;进位位清零
RLCF REG2,1 ;数据调整
RLCF REG1,1
RLCF REG2,1
RLCF REG1,1 ;低8位
RLCF REG2,1 ;高2位
具有6个十倍程动态范围的对数比率放大器
在通信系统中,为了保证系统总性能,需要进行光功率监视。对数信号处理技术可以在很宽的动态范围内保持精确的测量。宽动态范围信号经过压缩之后,使用较低分辨率的测量系统便可节省成本。作为这种技术的一个实例,考虑用一只响应
度为 0.5A/W 的光电来将光能量转换为 100 nA~1mA 的电流。如果动态范围为40倍,误差为1%,则所要求的测量分辨率是 0.01×10-4 ,即 1 ppm。这种测量需要一个 20 位 ADC。作为一种替代方法,你可以采用对数比率将这种输入压缩到 0~4V 的范围内,然后使用一个 10 位 ADC,从而可大大降低系统成本。对基准电流编程可以使输出电压改变至所需的电平。在涉及到将动态范围、输入信号(如电压或电流)、极性、比例或对数积和对数比率之类的运算等不寻常地组合在一起的应用场合,你可以定制和使用图 1 所示的。对数比率放大器应用于宽动态范围辐射测量领域,辐射测量方法是比照一个可变电流基准来测量未知信号的。图 1 所示电路的传递函数为:&  式中,K为输出比例因子,IIN为产生的电流,VT 为一个与温度有关的电压项(在 25 °C 下典型值为 26 mV,并与绝对温度成正比),IREF 则为基准电流。当 IIN=IREF 时,VOUT=0。工作正常时,IIN/IREF 应该始终大于 0。这一对数比率电路的输出可以为正,可以为负,也可以是双极性的,视IIN/IREF比值而定。ADC 的 4V 满刻度输入范围可设定 4mA 的满刻度输入电流范围。对 IREF 可按 40~600 μA 之间的某一值编程,使输出位于测量范围的中间。
  图1中的元件给出的输出比例因子为-1。该电路的输出定义覆盖的范围是,信号电流IIN 为4.5个十倍程,而基准电流IREF为1.5个十倍程(由于基准负载驱动能力的限制,只有 6 个十倍程的范围)。大多数应用系统只需要使用全部 6 个十倍程范围的一部分。只要确定预期的输入信号范围并计算其比率,你就可以利用上述公式来预测预期的输出电压范围。为了使器件性能与电流范围匹配,你可以指定IREF和IIN,但应该注意极性。
  对数放大器通常取决于一只的非线性传递函数。对数放大器的普通传递函数与IS 和VT有关,而IS和VT则与温度有关。IS 是晶体管的集电极饱和电流,而 VT 是晶体管的“热电压”。为了克服这种与温度的相关性,本设计采用了两只匹配的
晶体管来消除 IS 的温度漂移,并使用一个对温度敏感的来补偿 VT 的温度系数。IREF 的核心部件是 。你可以用数字来调节的输出。这样的改进就能使你按 33 级对40~600μA的基准电流进行编程设定。   和
相组合而成为一个不随时间和温度变化的。为获得更高的分辨率,你可以使用 1024 个分度的 AD5231。AD8626 是一个双精密 JFET 输入放大器,由26V 单供电。它功耗低,具有满摆幅输出特性,因而具有很宽的动态范围。其输出不随大于500 pF 的容性负载变化而变化。图 2 和图 3 示出了 ADC 输入端的对数比率放大器的传递函数。对数放大器输出限制在 0~4V之内,以便与 AD7810 型ADC 的单极性输入电压范围匹配。
------------------------------------------------
单片机AT89S51与ADC0809设计一个数字电压表
1. 实验任务
利用与设计一个,能够测量0-5V之间的直流电压值,四位数码显示,但要求使用的数目最少。
2. 原理图
3. 系统板上硬件连线
a)&&&&&&&& 把“单片机系统”区域中的P1.0-P1.7与“动态数码显示”区域中的ABCDEFGH端口用8芯连接。
b)&&&&&&& 把“单片机系统”区域中的P2.0-P2.7与“动态数码显示”区域中的S1S2S3S4S5S6S7S8端口用8芯排线连接。
c)&&&&&&& 把“单片机系统”区域中的P3.0与“模数”区域中的用相连接。
d)&&&&&&& 把“单片机系统”区域中的P3.1与“模数转换模块”区域中的OE端子用导线相连接。
e)&&&&&&&& 把“单片机系统”区域中的P3.2与“模数转换模块”区域中的EOC端子用导线相连接。
f)&&&&&&&& 把“单片机系统”区域中的P3.3与“模数转换模块”区域中的CLK端子用导线相连接。
g)&&&&&&& 把“模数转换模块”区域中的A2A1A0端子用导线连接到“模块”区域中的GND端子上。
h)&&&&&&& 把“模数转换模块”区域中的IN0端子用导线连接到“三路可调电压模块”区域中的VR1端子上。
i)&&&&&&&&& 把“单片机系统”区域中的P0.0-P0.7用8芯排线连接到“模数转换模块”区域中的D0D1D2D3D4D5D6D7端子上。
4. 程序设计内容
由于ADC0809在进行A/D转换时需要有CLK信号,而此时的ADC0809的CLK是接在AT89S的P3.3端口上,也就是要求从P3.3输出CLK信号供ADC0809使用。因此产生CLK信号的方法就得用软件来产生了;由于ADC0809的参考电压VREF=VCC,所以转换之后的数据要经过数据处理,在上显示出电压值。实际显示的电压值 (D/256*VREF)
5. 汇编源程序
6. C语言源程序
#include &AT89X52.H&
unsigned char code dispbitcode[]={0xfe,0xfd,0xfb,0xf7,
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& 0xef,0xdf,0xbf,0x7f};
unsigned char code dispcode[]={0x3f,0x06,0x5b,0x4f,0x66,
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& 0x6d,0x7d,0x07,0x7f,0x6f,0x00};
unsigned char dispbuf[8]={10,10,10,10,0,0,0,0};
sbit ST=P3^0;
sbit OE=P3^1;
sbit EOC=P3^2;
sbit CLK=P3^3;
void main(void)
& TMOD=0x12;
& TH0=216;
& TL0=216;
& TH1=()/256;
& TL1=()%256;
& while(1)
&&&&& if(EOC==1)
&&&&&&&&& OE=1;
&&&&&&&&& getdata=P0;
&&&&&&&&& OE=0;
&&&&&&&&& temp=getdata*235;
&&&&&&&&& temp=temp/128;
&&&&&&&&& i=5;
&&&&&&&&& dispbuf[0]=10;
&&&&&&&&& dispbuf[1]=10;
&&&&&&&&& dispbuf[2]=10;
&&&&&&&&& dispbuf[3]=10;
&&&&&&&&& dispbuf[4]=10;
&&&&&&&&& dispbuf[5]=0;
&&&&&&&&& dispbuf[6]=0;
&&&&&&&&& dispbuf[7]=0;
&&&&&&&&& while(temp/10)
&&&&&&&&&&& {
&&&&&&&&&&&&& dispbuf[i]=temp%10;
&&&&&&&&&&&&& temp=temp/10;
&&&&&&&&&&&&& i++;
&&&&&&&&&&& }
&&&&&&&&& dispbuf[i]=&&&&&&&&&&
&&&&&&&&& ST=1;
&&&&&&&&& ST=0;
void t0(void) interrupt 1 using 0
& CLK=~CLK;
void t1(void) interrupt 3 using 0
& TH1=()/256;
& TL1=()%256;
& P1=dispcode[dispbuf[dispcount]];
& P2=dispbitcode[dispcount];
& if(dispcount==7)
&&&&& P1=P1 | 0x80;
& dispcount++;
& if(dispcount==8)
&&&&& dispcount=0;
14位数模转换器MAX7543驱动c51程序
/*****************************************************************File:MAX7543.cAuthor:xiaorunyiEditi:V1.0Email:www.ednchina.com/blog/xiaorunyi
*功能:MAX7543 14位DA驱动程序。******************************************************************/
#include "reg51.h"#include &intrins.h&
#define uchar unsigned char#define uint unsigned int
/*******************************************************************/sbit& KEY&& =P3^7;sbit& dacwr =P3^0;sbit& daccs =P3^1;sbit& daca0 =P3^2;sbit& daca1 =P3^3;#define dacdat P1
//延时/*******************************************************************/void delay_50us(uint t){ for(;t&0;t--) for(j=19;j&0;j--) ;}
// *******************************************************// 键盘去抖延时子函数
void Key_delay(void){&unsigned char i,j;&for (i=25; i&0; i--)&&for (j=50; j&0; j--);}
//数模转化/*******************************************************************/void dacdisplay(unsigned int msbdat,unsigned int lsbdat){& daca0 =1;& daca1 =0;& daccs =0;& dacwr =0;& dacdat =&_nop_();_nop_();_nop_();&&& _nop_();_nop_();_nop_();& _nop_();_nop_();_nop_();&&& _nop_();_nop_();_nop_();
& & daca0 =0;& daca1 =1;&& & dacdat =&& _nop_();_nop_();_nop_();& _nop_();_nop_();_nop_();&_nop_();_nop_();_nop_();&&& _nop_();_nop_();_nop_();
& daca0 =1;& daca1 =1;& _nop_();_nop_();_nop_();&&& _nop_();_nop_();_nop_();& _nop_();_nop_();_nop_();&&& _nop_();_nop_();_nop_();&
& /*daca0 =0;& daca1 =0;*/
& _nop_();_nop_();_nop_();&}
//MAX7543子函数/*******************************************************************/void MAX7543(unsigned int dat){ & uint count,msb,& count=& msb=count&&8;
& lsb=dat&0
& dacdisplay(msb,lsb);}
//主函数/*******************************************************************/void main(){&uint k=383;
&P3=0&P1=0
&while(1)& {&& if(KEY!=1) &&{&&&Key_delay ();&&&&& &if(KEY!=1)&&&&&&&& {&&&&&&& k+=16;&&&&&if(k==16384)&&&&&& k=0;&&&&& }&&}&&& MAX7543(k);&&& //delay_50us(1);& & }}
/*******************************************************************/
ADC0809和单片机接口的c51程序
#include &reg51.h&#include &absacc.h&#include &math.h&#define uchar unsigned char#define uint unsigned int#define ADC0809 XBYTE[0x0B000] //P2.6选通&&& float sum=0,uint i,j,*q,*p,sd=5;sbit p1_0=P1^0; void wait(uint n);void main(void)& ------adc0809程序开始{ j=0;&&& TMOD=0X01;//设置0&&& TH0=0XFC;//定时时间设为1ms &&& TL0=0X18;&&&&& EA=0;//先关中断&&&&& EA=1;//开总中断&&&&& ET0=1; &&&&& //TR0=1;&&& for(; ;)&&& {&&&&& if(j=20){do{}while(!TF0);q=0x30;for(i=0;i&20;i++) //转化后的数值求均方根{sum=sum+(*q)*(*q);q++;}&&& sum=sum/20;fjg=sqrt(sum);if(fjg&sd)&&&&&&&&& //判断是否跳闸p1_0=1;j=0;}}}void (void){for(;;)&&&&&&& {ADC;&&&&&&& wait(1000);&&&&&&& x=ADC0809;&&&&&&& P2=x;&&&&&&& }}
void wait(uint n){ uint i,j;&&& for(i=0;i&n;i++)&&& for(j=0;j&100;j++);}timer0()interrupt 1 using 1{*p=ADC0809;p++; TH0=0XFC;TL0=0X18;TR0=1;j++; }&&&&&&&&
用DAC0832产生梯形波 汇编程序
程序介绍:程序介绍:通过DAC0832转换在 LM358的7脚输出梯形波。实际应用如:函数波形。 程序实例(0832ti.asm): ORG 0000h MAIN: MOV DPTR,#0BFFFH EP: MOV R6,#19H MOV R4,#0AH MOV A,0 LOOP1: MOVX @DPTR,A ;选通地址 ACALL DELAY ;延时 ADD A,R6 ;每次以19H的梯度增加 DJNZ R4,LOOP1 ;梯度等待的时间 AJMP STEP ;循环 DELAY: D2: MOV 31H,#0FFH D1: DJNZ 31H,D1 RET END
DAC0832产生三角波--汇编程序
程序介绍:通过DAC0832转换在LM358的7脚输 出三角波。实际应用如:函数波形。 程序实例(0832shan.asm): ORG 0000H MAIN: MOV DPTR,#0BFFFH ;选通地址 R1: MOV R6,#00H ;通过上升和下降来产生三角波/////////////////// ;电压随时间上升/////////////////////////////// STR2: MOV A,R6 MOVX @DPTR,A INC R6 CJNE R6,#0FFH,STR2 ;///////////////////////////////////////////// ;电压随时间下降/////////////////////////////// STR3: DEC R6 MOV A,R6 MOVX @DPTR,A CJNE R6,#00H,STR3 ;///////////////////////////////////////////// AJMP STR1 END
DAC0832产生方波 汇编程序
程序介绍:程序介绍:通过DAC0832转换在 LM358的7脚输出方波。实际应用如:函数波形。 程序实例(0832fan.asm): ORG 0000h MAIN: MOV DPTR,#0BFFFH ;通过高低电平地的变化来输出方波///////////LOOP1: MOV A,0 MOVX @DPTR,A ;向选通地址送低电平地 ACALL DELAY MOV A,#0FFH MOVX @DPTR,A ;向选通地址送高电平 ACALL DELAY AJMP LOOP1 ;///////////////////////////////////////////// DELAY: MOV 30H,#0FFH ;延时,通过改变它的大小 可以改变占空比 D2: DJNZ 30H,D2 RET END
DAC0832产生正弦波
程序介绍:程序介绍:通过DAC0832转换在 LM358的7脚输出正弦波。实际应用如:函数波形。 程序实例(0832xuan.asm): ORG 000H MAIN: MOV R1,#00H ;取表格初值 LOOP1: ;在表格里取数送到指定地址///////////////////// MOV A,R1 MOV DPTR,#SETTAB MOVC A,@A+DPTR MOV DPTR,#0BFFFH MOVX @DPTR,A ;///////////////////////////////////////////// INC R1 ;表格加一 AJMP LOOP1 ;循环 SETTAB: ;正弦表格///////////////////////////////////// DB 80H,83H,86H,89H,8DH,90H,93H,96H DB 99H,9CH,9FH,0A2H,0A5H,0A8H,0ABH,0AEH DB 0B1H,0B4H,0B7H,0BAH,0BCH,0BFH,0C2H,0C5H DB 0C7H,0CAH,0CCH,0CFH,0D1H, 0D4H,0D6H,0D8H DB 0DAH,0DDH,0DFH,0E1H,0E3H, 0E5H,0E7H,0E9H DB 0EAH,0ECH,0EEH,0EFH,0F1H, 0F2H,0F4H,0F5H DB 0F6H,0F7H,0F8H,0F9H,0FAH, 0FBH,0FCH,0FDH DB 0FDH,0FEH,0FFH,0FFH,0FFH, 0FFH,0FFH,0FFH DB 0FFH,0FFH,0FFH,0FFH,0FFH, 0FFH,0FEH,0FDH DB 0FDH,0FCH,0FBH,0FAH,0F9H, 0F8H,0F7H,0F6H DB 0F5H,0F4H,0F2H,0F1H,0EFH, 0EEH,0ECH,0EAH DB 0E9H,0E7H,0E5H,0E3H,0E1H, 0DEH,0DDH,0DAH DB 0D8H,0D6H,0D4H,0D1H,0CFH, 0CCH,0CAH,0C7H DB 0C5H,0C2H,0BFH,0BCH,0BAH, 0B7H,0B4H,0B1H DB 0AEH,0ABH,0A8H,0A5H,0A2H, 9FH, 9CH, 99H DB 96H, 93H, 90H, 8DH, 89H, 86H, 83H, 80H DB 80H, 7CH, 79H, 78H, 72H, 6FH, 6CH, 69H DB 66H, 63H, 60H, 5DH, 5AH, 57H, 55H, 51H DB 4EH, 4CH, 48H, 45H, 43H, 40H, 3DH, 3AH DB 38H, 35H, 33H, 30H, 2EH, 2BH, 29H, 27H DB 25H, 22H, 20H, 1EH, 1CH, 1AH, 18H, 16H DB 15H, 13H, 11H, 10H, 0EH, 0DH, 0BH, 0AH DB 09H, 08H, 07H, 06H, 05H, 04H, 03H, 02H DB 02H, 01H, 00H, 00H, 00H, 00H, 00H, 00H DB 00H, 00H, 00H, 00H, 00H, 00H, 01H, 02H DB 02H, 03H, 04H, 05H, 06H, 07H, 08H, 09H DB 0AH, 0BH, 0DH, 0EH, 10H, 11H, 13H, 15H DB 16H, 18H, 1AH, 1CH, 1EH, 20H, 22H, 25H DB 27H, 29H, 2BH, 2EH, 30H, 33H, 35H, 38H DB 3AH, 3DH, 40H, 43H, 45H, 48H, 4CH, 4EH DB 51H, 55H, 57H, 5AH, 5DH, 60H, 63H, 66H DB 69H, 6CH, 6FH, 72H, 76H, 79H, 7CH, 80H END
DAC0832输出固定电压的C程序
#include "reg51.h"void DAC0832(unsigned
x){& P2=x;}void main(){& DAC);& while(1){& ;}}
DAC0832输出三角波与正弦波程序
#include&AT89X52.H&&& //波型输出标置变量&&&&&&&&&&&& unsigned
sin(unsigned
x){unsigned
code sin_tab[]={125,128,131,134,138,141,144,147,150,153,156,159,&&&&&&&& 162,165,168,171,174,177,180,182,185,188,191,193,196,198,201,203,&& 206,208,211,213,215,217,219,221,223,225,227,229,231,232,234,235,&& 237,238,239,241,242,243,244,245,246,246,247,248,248,249,249,250,&& 250,250,250,250,250,250,250,249,249,248,248,247,246,246,245,244,&& 243,242,241,239,238,237,235,234,232,231,229,227,225,223,221,219,&& 217,215,213,211,208,206,203,201,198,196,193,191,188,185,182,180,&& 177,174,171,168,165,162,159,156,153,150,147,144,141,138,134,131,&& 128,125,122,119,116,112,109,106,103,100,97,94,91,88,85,82,79,76,73,&& 70,68,65,62,59,57,54,52,49,47,44,42,39,37,35,33,31,29,27,25,27,29,27,25,23,21,&& 19,18,16,15,13,12,11,9,8,7,6,5,4,4,3,2,2,1,1,0,0,0,0,0,0,0,0,1,1,2,&& 2,3,4,4,5,6,7,8,9,11,12,13,15,16,18,19,21,23,25,27,29,31,33,35,37,&& 39,42,44,47,49,52,54,57,59,62,65,68,70,73,76,79,82,85,88,97,94,97,&& 100,103,106,109,112,116,119,122};&& return sin_tab[x];&& }void DAC0832(unsigned
x){& P2=x;}void main(){TMOD=0X02;&&&&&&& //0用于控制输出波的频率TH0=256-40;ET0=1;&&&& //按键接于外部中断0,与中断1IT0=1;IT1=1;EX0=1;EX1=1;EA=1;TR0=1;flag=0;&&&& //开始时无输出i=0;&while(1)&& { &&&&& if(time==1)&&&& {&&&&&& time="0";&&& if(i&249)&&&&&& i="0";&&& else &&&&&& i++;&&&switch(flag)&&&& //当按键1的为输出三角波,按键2时输出正弦波&&&& {&&&&&&& case 0:DAC0832(0);&&&& case 1:&&&&&&&&&&&& if(i&125)&&&&&&&& DAC-i);&&&&&& else&&&&&&&& DAC0832(i);&&&&&&&&&&&&case 2:&&&&&&&&&&&& DAC0832(sin(i));&&&&&&&&&&default:&&&&& }&&&&& }&&& }}void time0() interrupt 1{& time="1";}&&void int0() interrupt 0&{&&&&&&&&&//按键1接于外部中断0&&& flag="1";}& & void int1() interrupt 2&&&& //按键2接于外部中断1& {&&& flag="2";}
8051与AD7810通讯程序 汇编程序
ART:CLR P1.0 ;初始化
LOOP:CALL C0
... ;主程序省略
;A/D转换子程序,返回时数据低8位在R2中,高2位在R3中
CON0:MOV R1,#`10 ;10位数据
MOV R2,#0
SETB P1.2 ;唤醒启动
CON1:SETB P1.0 ;发送SCLK信号
MOV C,P1.1 ;读一位数据
MOV A,R2 ;数据移位
DJNZ R1,CON1
PIC16C6X/7X与的通讯程序如下:
REG1 EQU 0X20 ;寄存器定义
REG2 EQU 0X21
CLRF PORTC ;端口初始化
BSF STATUS,RP0
MOVLW 0X30
MOVWF TRISC
BCF STATUS,PR0
BCF SSPCON,SSPEN
MOVLW 0X00 ;SPI初始化
MOVWF SSPCON
BSF SSPCON,SSPEN SPI开放
LOOP CALL ON
... ;主程序省略
;A/D转换子程序,返回时数据低8位在REFG1中,高2位在REG2中
ADCON BSF PORTC,0 ;唤醒启动
BCF PORTC,0
MOVWF SSPBUF ;启动接收高8位
BSF STATUS,RP0
CON1 BTFSS SSPSTAT,BF ;数据已接收?
GOTO CON1 ;没有收到
BCF STATUS,RP0
MOVF SSPBUF,W
MOVWF REG1 ;高8位送REG1
MOVWF SSPBUF ;启动接收低2位
BSF STATUS,PR0
CON1 BTFSS SSPSTAT,BF ;数据已接收?
GOTO CON1 ;没有收到
BCF STATUS,RP0
MOVF SSPBUF,W
ANDLW B ;保留有效位
MOVWF REG2 ;低2位送REG2
BCF STATUS,C ;进位位清零
RLCF REG2,1 ;数据调整
RLCF REG1,1
RLCF REG2,1
RLCF REG1,1 ;低8位
RLCF REG2,1 ;高2位
12位并行模/数转换芯片AD1674典型应用电路
8位模数转换芯片AD570典型应用电路
AD835典型应用电路
ADC0809典型应用电路
DAC0832典型应用电路
DAC908典型应用电路
10位模数转换芯片ADC10065典型应用电路
10位串行模数转换芯片AD7810典型应用电路
数模转换芯片AD9772A典型应用电路
14位DAC数模转换器芯片AD5551典型应用电路
现在有1048人对本文发表评论
<form onsubmit="if(document.getElementById('content').value.length500){alert('评论不能少于三个字符,大于500个字符!');document.getElementById('content').focus();}" action="/common/comment_post.aspx" method="post">
Copyright &
WEEQOO.COM Corp.All Rights Reserved. 版权所有 经营许可证编号: 法律声明
维库电子旗下网站:维库电子市场网 | ChinaICMart | 维库电子开发网 | 维库电子人才网
总部:杭州市下城区朝晖路182号国都发展大厦1号楼80A
电话:9-8016 QQ: | MSN: |

我要回帖

更多关于 adc0832与单片机连接 的文章

 

随机推荐