C8051F020学习笔记-ADC0

C8051F020学习笔记-ADC0
C8051F020学习笔记-ADC0

三, 关于ADC0

(ADC在PIC里面总算是完整的弄过一次了,但是基础还是很薄弱,尤其是转换时间的控制,而面对F020的ADC0,相关寄存器较多,所以做一个专题)

C8051F020/1 的ADC0 子系统包括一个9 通道的可编程模拟多路选择器(AMUX0),一个可编程增益放大器(PGA0)和一个100ksps、12 位分辨率的逐次逼近寄存器型ADC,(F020的ADC0只有一个逐次逼近的ADC,它能实现9路输入是因为它有一个9通道的多路选择器(AMUX0)))。片上的特殊功能寄存器(简称SFR)有11个与ADC0的控制相关,它们是:AMUX0SL-AMUX0通道选择寄存器;AMX0CF-AMUX0配置寄存器;

ADC0CF-ADC0配置寄存器;ADC0CN-ADC0控制寄存器;

ADC0H-ADC0数据字MSB寄存器;ADC0L-ADC0数据字LSB寄存器;

ADC0GTH-ADC0下限数据高字节寄存器;ADC0GTL-ADC0下限数据低字节寄存器;

ADC0LTH-ADC0上限数据高字节寄存器;ADC0LTL-ADC0上限数据低字节寄存器;

REF0CN-基准电压控制寄存器。

3.1 ADC0工作方式

ADC0 的最高转换速度为100ksps,其转换时钟来源于系统时钟分频,分频值保存在寄存器ADC0CF 的ADCSC 位。

3.1.1 启动转换

有4 种转换启动方式,由ADC0CN 中的ADC0 启动转换方式位(AD0CM1,

AD0CM0)的状态决定。转换触发源有:

1.向ADC0CN 的AD0BUSY 位写1;

2.定时器3 溢出(即定时的连续转换);

3.外部ADC 转换启动信号的上升沿,CNVSTR;

4.定时器2 溢出(即定时的连续转换)。

备注:(关于ADC0的开始转换,1,可以在软件里面设置,直接给AD0BUSY写1,然后直接输出转换结果。这种方式需要不断的扫描,不断的输出结果,似乎有点费劲。如果采用第三种方式,即用一个开关来控制ADC的启动,那样,在没有按键的情况下,ADC不需要扫描,或许可以用第二种或者第四种方式,我用一个按键来启动定时器的开始计数,技术满之后再启动ADC的转换。总之,除非处理芯片的主要目的就是为了AD转换,要不采用第一种方法只会显得有点笨。)

(转换数据被保存在ADC数据字的MSB 和LSB 寄存器:ADC0H 和ADC0L。至于转换后的数据是选择左对齐还是右对齐,则由ADC0CN里面的AD0LJST决定。在前面已经选择了右对齐)

当通过向AD0BUSY 写‘1’启动数据转换时,应查询AD0INT 位以确定转换何时结束(也可以使用ADC0 中断)。建议的查询步骤如下:

1.写‘0’到AD0INT;

2.向AD0BUSY 写‘1’;

3.查询并等待AD0INT 变‘1’;

4.处理ADC0 数据

3.1.2 关于AMX0CF

3.2 关于电压基准(C8051F020/2)

电压基准电路为控制ADC 和DAC 模块工作提供了灵活性。有三个电压基准输入引脚,允许每个ADC 和两个DAC 使用外部电压基准或片内电压基准输出。通过配置VREF 模拟开关,ADC0 还可以使用DAC0 的输出作为内部基准,ADC1 可以使用模拟电源电压作为基准.

c8051f020端口配置说明

C8051F的每个I/O口引脚都可以被配置为推挽或漏极开路输出。同时引入了数字交叉开关,允许将内部数字系统资源映射到P0、P1、P2和P3 的端口引脚。通过设置交叉开关寄存器可将片内的计数器/定时器、串行总线、硬件中断、ADC转换启动输入、比较器输出以及微控制器内部的其他数字信号配置为出现在端口I/O引脚。必须在访问这些外设的I/O之前配置和允许交叉开关。 注意的问题: 1.低端口既能按位寻址,也可以按字节寻址;高端口只能按字节寻址。 2.没有被分配到的引脚作为一般的数字通用I/O口。 口还可以用作ADC1的模拟输入。 ~P3MDOUT用于控制I/O端口每一位的输出状态。 (外部存储器接口)是用于CPU与片外XRAM之间的数据传输通道,通过寄存器EMI0CF和EMI0CN 选择和管理端口实现数据的传输。 6.为了能访问片外存储器空间,必须设置EMI0CN寄存器的内容为片外存储器的空间页地址。 7.如果把外部存储器接口(EMIF)设置在高端口则首先要把EMI0CF的PRTSEL位设置为1,选择高端口,同时选择地址的复用或非复用方式,在把XBR的外部寄存器的EMIFLE位设置为0。 8.复用方式配置:在复用方式下,数据总线和地址总线的第8位共用相同的引脚(AD0~AD7)。在该方式下,要用一个外部锁存器(如74HC373或相同功能的锁存器)保持RAM地址的低8位。外部锁存器由ALE(地址锁存使能)信号控制,ALE信号由外部存储器接口逻辑驱动。 9.在总线复用时,需要把地址数据复用端口配置为漏极开路。 高/低脉宽占1个SYSCLK周期,地址建立/保持时间占0个SYSCLK周期,/WR和/RD占12个SYSCLK 周期,EMIF工作在地址/数据复用方式,即:EMI0CF |= 0x2c;EMI0TC |= 0x2c;配置EMIF的步骤是:先将EMIF选到低端口或高端口;然后选择复用方式或非复用方式;再选择存储器的模式(只用片内存储器、不带块选择的分片方式、带块选择的分片方式或只用片外存储器);然后设置EMI0TC;最后通过寄存器PnMDOUT和P74OUT选择所期望的相关端口的输出方式。如: void PORT_Init (void) { XBR2 = 0x40; /*使能交叉开关和弱上拉*/ P74OUT |= 0xff; /*使能P4~P7推挽输出*/

51单片机控制ADC0809的电路图和源程序

ADC0809数模转换与显示 /* 名称:ADC0809数模转换与显示 说明:ADC0809采样通道3输入的模拟量,转换后的结果显示在数码管上。*/ #include #define uchar unsigned char #define uint unsigned int //各数字的数码管段码(共阴) uchar code DSY_CODE[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; sbit CLK=P1^3; //时钟信号 sbit ST=P1^2; //启动信号 sbit EOC=P1^1; //转换结束信号 sbit OE=P1^0; //输出使能 //延时 void DelayMS(uint ms) { uchar i; while(ms--) for(i=0;i<120;i++); } //显示转换结果 void Display_Result(uchar d) { P2=0xf7; //第4个数码管显示个位数 P0=DSY_CODE[d%10]; DelayMS(5); P2=0xfb; //第3个数码管显示十位数 P0=DSY_CODE[d%100/10]; DelayMS(5); P2=0xfd; //第2个数码管显示百位数 P0=DSY_CODE[d/100]; DelayMS(5); } //主程序 void main() { TMOD=0x02; //T1工作模式2 TH0=0x14; TL0=0x00; IE=0x82; TR0=1; P1=0x3f; //选择ADC0809的通道3(0111)(P1.4~P1.6) while(1) {

ADC0809模数转换与显示

ADC0809模数转换与显示 ADC0809模数转换与显示(第四次实验) 华侨大学08自动化 实验目的: 1. 掌握ADC的使用控制方法。实验内容:基本要求:设计一程序采集ADC0809第3通道的电压值,将其转换为数字量,并在数码管上显示;5V显示为255, 0V显示为000。扩展要求:将转换结果以两位小数精确显示,5V显示5.00, 2.3V显示2.30,依次推广之。 一、实验原理图: 二、程序流程图:

1 开始定时器初始化,对ADC0809初始化,选择通道3 给START一个脉冲,启动信号输入端判断EOC是否为0 N Y 将OE置1 读P3口数字数字处理,调用显示OE置0 返回三、源程序 1、基本要求: OE EQU P1.0 MOV SP,#60H EOC EQU P1.1 MOV TMOD,#02H ST EQU P1.2 MOV TH0,#14H CLK EQU P1.3 MOV TL0,#00H SHU EQU 30H MOV IE,#82H TEMP EQU 31H SETB TR0 ORG 0000H MOV A,#3FH AJMP MAIN MOV P1,A ORG 000BH MOV SHU,#0 CPL CLK SCAN: RETI CLR ST ORG 0100H SETB ST MAIN: CLR ST 2 M0: JNB EOC,M0 SETB OE

MOV A,#0FFH MOV P3,A M1: MOV A,P3 MOV SHU,A LCALL CHANGE LCALL DISP CLR OE AJMP SCAN DISP: MOV R0,#TEMP MOV R2,#00H DISP1:MOV A,R2 MOV DPTR,#TAB1 MOVC A,@A+DPTR MOV P2,A MOV A,@R0 MOV DPTR,#TAB MOVC A,@A+DPTR MOV P0,A MOV R5,#5 ACALL DELAY INC R0 INC R2 2、扩展部分: OE EQU P1.0 EOC EQU P1.1 ST EQU P1.2 CLK EQU P1.3 SHU EQU 30H TEMP EQU 20H ORG 0000H AJMP MAIN ORG 000BH CPL CLK RETI ORG 0100H MAIN: MOV SP,#60H CJNE R2,#3,DISP1 MOV P0,#00H RET

ADC0809数模转换程序

/******************** //版权和版本声明 * 文件标识: * 摘要: * 当前版本:1.0 * 作者:输入作者(或修改者)名字 * 完成日期:2013年3月25日 **********************************/ #include //头文件 unsigned char code Tab[11]={0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07,0x7f,0x6f,}; unsigned char dat[]={0,0,0,0}; unsigned char adc; unsigned int i,j,k; /***********ADC0808************************/ sbit LED = P2^3; sbit ST=P2^4; //定义ADC0809 位 sbit EOC=P2^5; sbit OE=P2^6; sbit CLK =P2^7; /************ 数码管位码****************/ sbit wei1=P3^7; //定义数码管为码位 sbit wei2=P3^6; sbit wei3=P3^5; sbit wei4=P3^4; /**************************** * 函数名称:延时函数

* 函数功能:延时函数 * 输入/输出参数: * 返回值: ***************************************/ void delay(unsigned int xms) //延时及clk 0809时钟{ for(i=0;i

ADC0809进行AD转换

ADC0809进行A/D转换(C描述) 2008-06-24 16:53 指针:可对内存地址直接操作 基于存贮器的指以贮器类为参量,它在编译时才被确定。因此为指针选择存贮器的方法可以省掉,以这些指针的长度可为1个字节(idata *,data *,pdata *)或2个这节(code *,xdata *)。 char xdata *address; ADC0809具有8个模拟量输入通道,采用中断方式,在中断函数中读取8个通道的A/D 转换值,分别存储在外部RAM的1000H~1007H单元。ADC0809端口地址为00F0H。 程序定义了两个指针变量* ADC和* ADCdata,分别指向ADC0809端口地址(00F0H)和外部RAM单元地址(1000H~1007H) 由*ADC=I送入通道数,启动ADC0809进行A/D转换,转换结束时产生INT1中断。在中断服务函数int1()中通过temp=*ADC和*ADCdata=temp;读取A/D转换结果并存到外部RAM中。 #include unsigned int xdata *ADC; /*定义ADC0809端口指针*/ unsigned int xdata *ADCdata; /*定义ADC0809数据缓冲器指针*/ unsigned char I; void main( ) { ADC=0x00f0; /*定义端口地址和数据缓冲器地址*/ ADCdata=0x1000; I=8; /* ADC0809有8个模拟输入通道*/ EA=1; EX1=1;IT1=1; /*开中断*/ *ADC=I; /*启动ADC0809*/ WHILE(I); /*等待8个通道A/D转换完*/ } void int1() interrupt 2 { unsigned char tmp; temp=*ADC; /*读取A/D转换结果*/ *ADCdata=temp; /*结果值存到数据缓冲区*/ ADCdata++; /*数据缓冲区地址加1*/ i—; *ADC=I; /*启动下一个模拟输入通道A/D转换*/ } 除了用指针变量来实现对内存地址的直接操作外,c51编译器还提供一组宏,该宏定义文件为:“absacc.h”,利用它可十分方便地实现对任何内存空间的直接操作,改写上面的程序: #include #include /*包含绝对地址操作预定义头文件*/ #define ADC 0x00f0; /*定义ADC0809端口地址*/

FPGA与ADC0809接口电路详解

FPGA与ADC0809接口电路详解 注:(1)本程序基于FPGA和vhdl编写 有详尽的程序解释和原理分析 以及原理图,状态图 (2)对于adc0809具体资料可上网查在此不累述 一.FPGA与ADC0809的接口电路图原理 二.关于ADC0809的说明(重点) (1)ale信号(引脚):高电平时把三个地址信号送入地址锁存器,并经译码器得到地址数据,以选择相应的模拟输入通道。 (2)oe信号(引脚)en使能信号:电平由低变高时,打开数据输出锁存器,将转换数据送到数据总线上 (3)eoc信号(引脚):eoc为高电平时完成转换,为低电平时正在转换。 (4)start信号(引脚):要给start线送一个100ns宽的启动正脉冲,start下跳沿时,开始进行A/D转换,在转换期间start以保持低电平。

三.转换状态图 对于状态图的真值表未列出 注意对应的注释为vhdl 语句 ale<='1';start<='0';en<='0'; ----eoc='1' ale<='0';start<='0';en<='0';--再次检测数据是否转换完 if eoc='0' then next_state<=st4; else next_state<=st5; 器,将数据送入数据总线 存器 四.ADC0809采样接口电路程序 --*********ADC0809采样控制************* --******因为FPGA 的时钟频率为50MHz ,则256分频后,即ADC0809输入时钟为195KHz****** --******对ADC0809进行简单的采样控制,得到的数据进FPGA 送到8个并排的数码管显示***** library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; use ieee.std_logic_arith.all; entity PL_AD is port ( d : in std_logic_vector(7 downto 0); --ADC0809输出的采样数据输入FPGA clk,eoc: in std_logic; --clk 为系统时钟,eoc 为ADC0809转换结束信号输入FPGA lock1,start, ale,en: out std_logic; --ADC0809控制信号FPGA 输出信号 abc_in :in std_logic_vector(2 downto 0); --模拟选通信号 abc_out :std_logic_vector(2 downto 0);--ADC0809模拟信号选通信号 q : out std_logic_vector(7 downto 0));送至8个并排数码管信号FPGA 输出数字信号 end pl_AD; architecture behav of PL_AD is type states is ( st0,st1, st2, st3, st4,st5,st6);--定义状态类型枚举类型

C8051F020与80C51单片机的异同点

C8051F020与80C51单片机的异同点 1 引言 80C51系列单片机及其衍生产品在我国乃至全世界范围获得了非常广泛的应用。单片机领域的大部分工作人员都熟悉80C51单片机,各大专院校都采用80C51系列单片机作为教学模型。随着单片机的不断发展,市场上出现了很多高速、高性能的新型单片机,基于标准8051内核的单片机正面临着退出市场的境地。为此,一些半导体公司开始对传统8051内核进行大的构造,主要就是提高速度与增加片内模拟与数字外设,以期大幅度提高单片机的整体性能。其中美国Cygnal公司推出的C8051F系列单片机把80C51系列单片机从MCU时代推向SoC时代,使得以8051为内核的单片机上了一个新的台阶。 C8051F系列单片机就是完全集成的混合信号系统级芯片,具有与8051兼容的CIP-51微控制器内核,采用流水线结构,单周期指令运行速度就是8051的12倍,全指令集运行速度就是原来的9、5倍。熟悉NCS-51系列单片机的工程技术人员可以很容易地掌握C8051F的应用技术并能进行软件的移植。但就是不能将8051的程序完全照搬的应用于C8051F单片机中,这就是因为两者的内部资源存在较大的差异,必须经过加工才能予以使用。其中C8051F020以其功能较全面,应用较广泛的特点成为C8051F的代表性产品,其性能价格比在目前应用领域也极具竞争力。C8051F020的内部电路包括CIP-51微控制器内核及RAM、ROM、I/O口、定时/计数器、ADC、DAC、PCA、SPI与SMBus等部件,即把计算机的基本组成单元以及模拟与数字外设集成在一个芯片上,构成一个完整的片上系统(SoC)。本文将介绍C8051F020单片机与80C51的异同点(主要就是不同之处)及初学者编程时应该注意的问题,并给出经过Cygnal开发工具IDE调试环境软件验证的源程序。 2 相同点 C8051F020单片机与80C51系列单片机的指令系统完全一样。掌握80C51单片机的人员可以很容易地接受C8051F020的应用技术并能完成相应软件的移植。 3 主要硬件不同点 3、1 运行速度 C8051F020的指令运行速度就是一般80C51系列单片机的10倍以上。因为其CIP-51中采用了流水线处理结构,已经没有了机器周期时序,指令执行的最小时序单位为系统时钟,大部分指令只要1~2个系统周期即可完成。又由于其时钟系统比80C51的更加完善,有多个时钟源,且时钟源可编程,时钟频率范围为0~25 MHz,当CIP-5l工作在最大系统时钟频率25 MHz时,它的峰值速度可以达到25 MI/s,C8051F020已进入了8位高速单片机行列。 3、2 I/O端口的配置方式 C8051F020拥有8个8位的I/O端口,大量减少了外部连线与器件扩展,有利于提高可靠性与抗干扰能力。其中低4个I/O端口除可作为一般的通用I/O端口外,还可作为其她功能模块的输入或输出引脚,它就是通过交叉开关配置寄存器XBR0、XBR1、XBR2(各位名称及格式如表1所示)选择并控制的,它们控制优先权译码选择开关电路如图1所示,可将片内的计数器/定时器、串行总线、硬件中断、比较器输出及其它的数字信号配置为在端口I/O引脚出现,这样用户可以根据自己的特定需要选择所需的数字资源与通用I/O口。数字交叉开关就是一个比较大的数字开关网路,这在所有80C51系列单片机上就是一个空白。另外P1MDIN用于选择P1的输入方式就是模拟输入还就是数字输入,复位值为11111111B,即默认为数字输入方式。而80C51单片机的I/O引脚就是固定分配的,即占用引脚多,配置又不够灵活。

C8051F020实验指导书

单片机实验指导书 目录 第一章:实验设备简介 (1) 1.1 系统实验设备的组成 (1) 1.2 Silicon Labs C8051F 单片机开发工具简介 (1) 1.3 DICE-C8051F嵌入式实验/开发系统简介 (3) 第二章集成开发环境KEIL C软件使用指南 (7) 2.1 KEIL C软件具体使用说明 (7) 第三章实验指导 (19) 3.1 C8051F 单片机I/O 口交叉开关设置 (19) 3.2 数字I/O端口实验 (21) 3.3 定时器实验 (23) 3.4 外部中断实验 (25) 3.5 键盘显示实验 (27) 3.6 六位动态LED数码管显示实验 (29) 3.7 RS3232串口通讯实验 (31) 3.8 综合设计 (33)

使用特别说明: (1) 每次实验前,请仔细阅读实验指导,连线完毕,检查无误后,方可打 开电源。即连线时必须在断电状态下。 (2) 程序运行过程中,不要关闭电源,如果要断电,必须停止运行程序, 并且退出程序调试状态,否则会引起KEIL C软件非正常退出,甚至引起DICE-EC5仿真器工作异常。 (3) 如出现上述(2)的的误操作,引起DICE-EC5仿真器工作异常,可对 DICE-EC5仿真器进行复位。(在光盘中找到文件夹“USB Reset”中的“USB Debug Adapter Firmware Reset”文件,双击运行,在弹出的对话框中点击“Update firmware”按钮,在提示成功后,点击“OK” 按钮,退出复位程序。DICE-EC5仿真器即可正常工作。在下一次调试、下载程序时会提示“Do you want to update serial adapter now? ”,点击“确定”即可。 第一章:实验设备简介 1.1 系统实验设备的组成 DICE-C8051F嵌入式实验/开发系统由C8051F020 CPU 板、DICE-EC5仿真器和系统实验板三部分组成,应用该设备可进行片上系统单片机较典型应用的实验,请参见以下介绍。 1.2 Silicon Labs C8051F 单片机开发工具简介 1.2.1 开发工具概述 Silicon Labs 的开发工具实质上就是计算机IDE 调试环境软件及计算机USB 到C8051F 单片机JTAG 口的协议转换器(DICE-EC5)的组合。Silicon Labs C8051F 系列所有的单片机片内均设计有调试电路,该调试电路通过边界扫描方式获取单片机片内信息,通过4 线的JTAG接口与开发工具连接以便于进行对单片机在片编程调试。DICE-C8051F嵌入式实验/开发系统中的C8051F020 CPU 板上的单片机为C8051F 系列中的F020。 仿真器(DICE-EC5)一端与计算机相连,另一端与C8051F 单片机JTAG 口相连,应用Keil 的uVision2 调试环境就可以进行非侵入式、全速的在系统

ADC0809功能及程序介绍

ADC0809引脚图与接口电路 作者:来源:本站原创点击数:更新时间:2007年07月29日 A/D转换器芯片ADC0809简介 8路模拟信号的分时采集,片内有8路模拟选通开关,以及相应的通道抵制锁存用译码电路,其转换时间为100μs左右。 图9.8 《ADC0809引脚图》 1. ADC0809的内部结构 ADC0809的内部逻辑结构图如图9-7所示。

图9.7 《ADC0809内部逻辑结构》 图中多路开关可选通8个模拟通道,允许8路模拟量分时输入,共用一个A/D 转换器进行转换,这是一种经济的多路数据采集方法。地址锁存与译码电路完成对A、B、C 3个地址位进行锁存和译码,其译码输出用于通道选择,其转换结果通过三态输出锁存器存放、输出,因此可以直接与系统数据总线相连,表9-1为通道选择表。 表9-1 通道选择表 2.信号引脚 ADC0809芯片为28引脚为双列直插式封装,其引脚排列见图9.8。

对ADC0809主要信号引脚的功能说明如下: IN 7~IN ——模拟量输入通道 ALE——地址锁存允许信号。对应ALE上跳沿,A、B、C地址状态送入地址锁存器中。 START——转换启动信号。START上升沿时,复位ADC0809;START下降沿时启动芯片,开始进行A/D转换;在A/D转换期间,START应保持低电平。本信号有时简写为ST. A、B、C——地址线。通道端口选择线,A为低地址,C为高地址,引脚图中为ADDA,ADDB和ADDC。其地址状态与通道对应关系见表9-1。 CLK——时钟信号。ADC0809的内部没有时钟电路,所需时钟信号由外界提供,因此有时钟信号引脚。通常使用频率为500KHz的时钟信号 EOC——转换结束信号。EOC=0,正在进行转换;EOC=1,转换结束。使用中该状态信号即可作为查询的状态标志,又可作为中断请求信号使用。 D 7~D ——数据输出线。为三态缓冲输出形式,可以和单片机的数据线直接相连。 D 0为最低位,D 7 为最高 OE——输出允许信号。用于控制三态输出锁存器向单片机输出转换得到的数据。OE=0,输出数据线呈高阻;OE=1,输出转换得到的数据。 Vcc—— +5V电源。 Vref——参考电源参考电压用来与输入的模拟信号进行比较,作为逐次逼近的基 准。其典型值为+5V(Vref (+)=+5V, Vref (-) =-5V). 9.2.2 MCS-51单片机与ADC0809的接口ADC0809与MCS-51单片机的连接如图9.10所示。

C8051F020实验

目 录 说明 (3) MT020学习开发板/MT-UDA仿真器说明 (4) 一 C8051F020/120单片机学习开发板(MT020)简介 (5) 1.1 MT020单片机学习开发板特色 (5) 1.2 MT020与国内同类产品比较 (5) 1.3 MT020与同类产品实物图比较 (7) 二 电路原理图 (8) 2.1 MT020电路原理图 (8) 2.2 MT020学习开发板TopLayer图 (13) 三 快速运行第一个程序 (15) 3.1 Keil C51 的安装 (15) 3.1.1 系统要求 (15) 3.1.2 软件的安装 (15) 3.2 MT-UDA调试仿真器驱动程序的安装 (17) 3.3 μVision2 集成开发环境 (18) 3.3.1 μVision2 集成工具 (18) 3.3.2 菜单栏命令、工具栏和快捷方式 (18) 3.4 Keil C51使用及与仿真器连调 (23) 3.4.1 创建第一个Keil C51 应用程序 (23) 3.4.2 程序文件的编译、链接 (29) 3.4.3 程序调试 (32) 四 MT020学习开发板基础实验 (37) 4.1 I/O口控制实验(蜂鸣器驱动实验) (37) 4.2 精确延时程序实现 (38) 4.3 数码管显示实验 (39) 4.4 键盘扫描实验 (40) 4.5 中断按键实验 (41) 4.6 软件模拟I2C总线实验(EEPROM AT24C01) (42) 4.7 利用SMBUS实现基于I2C器件操作实验(读写EEPROM AT24C01) (43) 4.8 字符型液晶1602显示实验 (44) 4.9 图型液晶12864显示实验 (45) 4.10 串口通信实验 (46) 4.11 数字温度传感器DS18B20实验 (47) 4.12 ADC0片上温度采集实验 (48) 4.13 ADC0电压采集实验 (49) 4.14 DAC0输出正弦实验 (50) 4.15 DAC0输出DTMF信号实验 (51) 4.16 比较器(CP)实验 (52) 4.17 硬件SPI接口控制跑马灯实验 (53) 4.18 用PCA硬件单元实现PWM实验 (54)

ADC0809与51单片机接口电路及应用程序

ADC0809与51单片机接口电路及应用程序 最近研究了下ADC0809这个芯片,做了个电路,和大家分享 电路原理图如下: 500)this.width=500;" border=0> 说明:D0~D7接51单片机的P2口(P2.0~P2.7) ADIN1和ADIN2为通道IN0和IN1的电压模拟量输入(0~5V) 应用程序如下: #include"reg52.h" #define uchar unsigned char sbit ST=P1^0; sbit EOC=P1^1; sbit OE=P1^2; sbit CLK=P1^3; sbit ADDCS=P1^4; uchar AD_DATA[2]; //保存IN0和IN1经AD转换后的数据

/**********延时函数************/ void delay(uchar i) { uchar j; while(i--) { for(j=125;j>0;j--) ; } } /*********系统初始化***********/ void init() { EA = 1; //开总中断 TMOD = 0x02; //设定定时器T0工作方式 TH0=216; //利用T0中断产生CLK信号 TL0=216; TR0=1; //启动定时器T0 ET0=1; ST=0; OE=0; } /***********T0中断服务程序************/ void t0(void) interrupt 1 using 0 { CLK=~CLK; } /***********AD转换函数**********/ void AD() { ST=0; ADDCS=0; //选择通道IN0 delay(10); ST=1; //启动AD转换 delay(10); ST=0; while(0==EOC) ; OE=1; AD_DATA[0]=P2;

ADC0809驱动FPGA实现的verilog程序

/*FPGA实现的程序:(verilog) 贴子回复于:2008-4-27 15:26:01*/ module AD0809(clk500K, //脉宽(至少100ns) rst_n, EOC, //约100us后EOC变为高电平转换结束 START, //启动信号,上升沿有效(至少100ns) OE, //高电平打开三态缓冲器输出转换数据 ALE, //高电平有效,选择信道口 ADDA, //因为ADDB,ADDC都接地了,这里只有ADDA为变量 DATA, //转换数据 DATA_R); output START,OE,ALE,ADDA; input EOC,clk500K,rst_n; input[7:0] DATA; output[7:0] DATA_R; reg START,OE,ALE,ADDA; reg[7:0] DATA_R; reg[4:0] CS,NS; parameter IDLE=5'b00001,START_H=5'b00010,START_L=5'b00100,CHECK_END=5'b01000,GET_DATA=5'b100 00; always @(posedge clk500K) case(CS) IDLE: NS=START_H; START_H: NS=START_L; START_L: NS=CHECK_END; CHECK_END: if(EOC) NS=GET_DATA; else NS=CHECK_END; GET_DATA: NS=IDLE; default: NS=IDLE; endcase always @(posedge clk500K) if(!rst_n) CS<=IDLE;

c8051f020中文资料

关于C8051F020系统概述 C8051F020 器件是完全集成的混合信号系统级 MCU 芯片,具有 64 个数字I/O 引脚(C8051F020)。下面列出了一些主要特性;有关某一产品的具体特性参见表 1.1; 1. 高速、流水线结构的 8051 兼容的 CIP-51 内核(可达 25MIPS) 2. 全速、非侵入式的在系统调试接口(片内) 3. 真正 12 位(C8051F020)、 100 ksps 的8 通道 ADC,带 PGA和模拟多路开关 4. 真正 8 位 500 ksps的 ADC,带 PGA和 8 通道模拟多路开关 5. 两个 12 位 DAC,具有可编程数据更新方式 6. 64K字节可在系统编程的 FLASH存储器 7. 4352(4096+256)字节的片内 RAM 8. 可寻址 64K字节地址空间的外部数据存储器接口 9. 硬件实现的 SPI、SMBus/ I2C 和两个 UART 串行接口 10. 5 个通用的 16 位定时器 11. 具有 5 个捕捉/比较模块的可编程计数器/定时器阵列 12. 片内看门狗定时器、VDD监视器和温度传感器 具有片内 VDD 监视器、看门狗定时器和时钟振荡器的 C8051F020是真正能独立工作的片上系统。所有模拟和数字外设均可由用户固件使能/禁止和配置。FLASH 存储器还具有在系统重新编程能力,可用于非易失性数据存储,并允许现场更新 8051 固件。 片内 JTAG调试电路允许使用安装在最终应用系统上的产品 MCU进行非侵入式(不占用片内资源)、全速、在系统调试。该调试系统支持观察和修改存储器和寄存器,支持断点、观察点、单步及运行和停机命令。在使用 JTAG调试时,所有的模拟和数字外设都可全功能运行。 每个 MCU都可在工业温度范围(-45℃到+85℃)内用 2.7V-3.6V的电压工作。端口 I/O、/RST 和 JTAG 引脚都容许 5V 的输入信号电压。C8051F020 为100 脚 TQFP 封装见图 1.1)。

ADC0809做AD转换的C程序

ADC0809做AD转换的C程序 #include<> unsigned char code dispbitcode[]={ 0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07, 0x7f,0x6f}; unsigned char dispbuf[4]; unsigned int i; unsigned int j; unsigned char getdata; unsigned int temp; unsigned int temp1; unsigned char count; unsigned char d; sbit ST=P3^0; sbit OE=P3^1; sbit EOC=P3^2; sbit CLK=P3^3; sbit P34=P3^4; sbit P35=P3^5; sbit P36=P3^6; sbit P20=P2^0; sbit P21=P2^1; sbit P22=P2^2; sbit P23=P2^3; sbit P17=P1^7; void TimeInitial(); void Delay(unsigned int i);// void TimeInitial()

{ TMOD=0x10; TH1=(65536-200)/256;//定时时间为2us,亦即CLK周期为 TL1=(65536-200)%256; EA=1; ET1=1; TR1=1; } void Delay(unsigned int i)//延时函数 { unsigned int j; for(;i>0;i--) { for(j=0;j<125;j++) {;} } } void Display()// { P1=dispbitcode[dispbuf[3]];//十位 P20=0; P21=1; P22=1; P23=1; Delay(10); P1=0x00; P1=dispbitcode[dispbuf[2]];//个位

adc0809上机参考程序

1、A/D0809实验 地址(16进制)机器码(16进制)汇编语言ASM 1100 BAA004 MOV DX, 04A0H ; 1103 B83400 MOV AX, 34H ; 1106 EF OUT DX, AX ; 1107 BAB004 MOV DX, 04B0H ; 110A BD0010 MOV BP, 1000H ; 110D 4D LAY1: DEC BP ; 110E 83FD00 CMP BP, 0 ; 1111 75FA JNE LAY1 ; 1113 ED WAIT1: IN AX, DX ; 1114 250100 AND AX, 1 ; 1117 3D0100 CMP AX, 1 ; 111A 75F7 JNE WAIT1 ; 111C BAA004 MOV DX, 04A0H ; 111F ED IN AX, DX ; 1120 25FF00 AND AX, 0FFH ; 1123 8BC8 MOV CX, AX ; 1125 BAA204 MOV DX, 04A2H ; 1128 B83400 MOV AX, 34H ; 112B EF OUT DX, AX ; 112C BD0010 MOV BP, 1000H ; 112F 4D LAY2: DEC BP ; 1130 83FD00 CMP BP, 0 ; 1133 75FA JNE LAY2 ; 1135 BAB004 MOV DX, 04B0H ; 1138 ED WAIT2: IN AX, DX ; 1139 250100 AND AX, 1 ; 113C 3D0100 CMP AX, 1 ; 113F 75F7 JNE WAIT2 ; 1141 BAA204 MOV DX, 04A2H ; 地址(16进制)机器码(16进制)汇编语言ASM 1144 ED IN AX, DX ; 1145 25FF00 AND AX, 0FFH ; 1148 8BD8 MOV BX, AX ; 114A BAA404 MOV DX, 04A4H ; 114D B83400 MOV AX, 34H ; 1150 EF OUT DX, AX ; 1151 BD0010 MOV BP, 1000H ; 1154 4D LAY3: DEC BP ; 1155 83FD00 CMP BP, 0 ; 1158 75FA JNE LAY3 ; 115A BAB004 MOV DX, 04B0H ; 115D ED WAIT3: IN AX, DX ;

C8051F020端口配置

C8051F020的端口配置 C8051F系列单片机有4~8个输入输出端口,每个端口有8个引脚,这些端口有如下特点: 1、这些引脚都可以用作通用I/O端口 2、它的P0~P3口的每个管脚都通过独立编程还能作为特殊功能的输入或输出,即同一个引脚可以作为片上不同外围功能模块的信号输入输出端口。 3、端口可以通过软件设置改变引脚的输入输出状态配置。如:弱上拉输入、推拉输出、开漏输出等。 根据端口特点,端口配置过程分为以下几步: 1、配置交叉开关(功能选择开关) 交叉开关寄存器共有四个分别是XBAR0、XBAR1、XBAR2、XBAR3。通过对这四个寄存器进行配置,使IO引脚同单片机的数字和模拟片上外围设备进行连接。 2、配置外部存储器接口 外部存储器接口(External Memory Interface,EMIF)用于CPU与片上和片外XRAM之间的数据传输通道,通过寄存器EMIOCF和EMIOCN选择和管理端口P0~P3或端口P4~P7实现数据传播。 配置这两个寄存器用以选择端口是否为复用方式(数据与地址线复用)、寄存器工作模式选择及外部存储器页选择。 3、配置IO端口的输入输出模式 输入模式分为模拟量输入和数字量输入。用寄存器PnMDIN配置n=0、1、2、3。 输出模式分为推拉(推挽)式和漏极开路式。用寄存器PnMDOUT配置 4、禁止模拟输入引脚的输出驱动 配置模拟输入时P口并没有把输出驱动电路完全关闭,所以不管是哪种输入,推荐的做法是:将相应的输入口的输出模式配置成开漏,并将其输出寄存器置“1”,使其为高阻态,以减少串扰。 5、启动交叉开关 单片机刚上电时,因为XBAR2的复位值为0,因而端口P0~P3的输出驱动器被禁止,在XBARE(XBAR2.6)位被设置为逻辑“1”之前,可防止对交叉开关(功能选择)寄存器和其他寄存器写入时,在端口引脚上产生争用。 正确配置交叉开关后,通过将XBARE设置为逻辑“1”,使功能选择开关有效。 至此配置完成 C8051f020 I/O配置小结 020的每个I/O口引脚都可以被配置为推挽或漏极开路输出。同时引入了数字交叉开关,允许将内部数字系统资源映射到P0、P1、P2和P3的端口引脚。通过设置交叉开关寄存器可将片内的计数器/定时器、串行总线、硬件中断、ADC转换启动输入、比较器输出以及微控制器内部的其他数字信号配置为出现在端口I/O引脚。必须在访问这些外设的I/O之前配置和允许交叉开关。 注意的问题: 1.低端口既能按位寻址,也可以按字节寻址;高端口只能按字节寻址。 2.没有被分配到的引脚作为一般的数字通用I/O口。 3.P1口还可以用作ADC1的模拟输入。 4.P0MDOUT~P3MDOUT用于控制I/O端口每一位的输出状态。

C8051F020单片机说明

C8051F020开发板 说明书 V1.0.0 2012年3月22日

目录 第一章 概述 (1) 第二章 开发板简介 (2) 2.1 开发板原理框图 (2) 2.2 开发板实物图 (2) 2.2.1 本开发板的外扩展资源和扩展接口 (2) 2.2.2 本开发板的平面图 (3) 第三章 开发板硬件电路说明 (4) 3.1 硬件电路简介 (4) 3.2 电源电路 (4) 3.3单片机复位电路 (4) 3.4 ZLG7289电路原理图 (5) 3.5 LED电路原理图 (6) 3.6 LCD接口电路 (7) 第四章 开发板注意事项 (8) 4.1注意事项 (8) 4.2开发板跳线使用方法 (8)

第一章 概述 本说明书是C8051F020开发板的硬件使用说明书,详细描述了020开发板的硬件构成、原理,以及它的使用方法。 开发板用USB JTAG对C8051F020芯片进行编程,C8051F020有64个I/O而我们开发板通过排针引出了其中的44个I/O口,板上有标识(也可查看原理图或PCB图)。引出来的I/O口可以供用户配置。

第二章 开发板简介 2.1 开发板原理框图 本开发板主要用到了C8051F020芯片(内置A/D D/A和比较器等)和周立功的ZLG7289芯片,020芯片通过SPI方式和ZLG7289完成数据传递,ZLG7289控制按键和数码管显示。原理框图如下: 图2-1 开发板原理框图 2.2 开发板实物图 2.2.1 本开发板的外扩展资源和扩展接口 部分接口说明: JTAG接口:本板卡和USB Debug Adaptor仿真器连接,通过本 接口用户可实现在线仿真。 LCD接口: 本板液晶用MzL05-12864 AD/DA接口:本板的AD/DA接口都来自020内置的AD/DA 另外的外扩资源和接口如下图所示:

基于51单片机的ADC0809c程序代码

基于51单片机的ADC0809c程序代码

#include #define uchar unsigned char #define uint unsigned int sbit st=P3^2; //ST 为转换启动信号。当ST 上跳沿时,所有内部寄存器清零; //下跳沿时,开始进行 A/D 转换;在转换期间,ST 应保持低电平 sbit oe=P3^1; // OE 为输出允许信号,用于控制三条输出锁存器向 //单片机输出转换得到的数据,OE=1,输出转换得到的数据;OE=0,输出数据线呈高阻状态 sbit eoc=P3^0; //EOC 为转换结束信号。当EOC 为高电平时,表明转 //换结束;否则,表明正在进行 A/D 转换 uchar code tab[]={0x03,0x9f,0x25,0x0d,0x99,0x49,0x41 ,0x1f,0x01,0x09};// 数码管显示段码 uchar code td[]={0x00,0x10,0x20,0x30,0x40,0x50,0x60, 0x70};// 通道先择数组

uint ad_0809,ad_data1,ad_data2,ad_data3,ad_dat a0; uchar m,number; uchar x[8];//八通道数据待存数组 void delaynms(uint x);//nms 延时程序void display();//显示程序 void ad0809();//芯片启动程序 void key();//键扫描程序 void main() { number=1; P1=0x00; while(1) { ad0809();//调 AD0809 启动子程序 key();//调按键子程序 ad_0809=x[number];//把相关通道数据给ad_0809 display();//调显示 }} //nms 延时程序

相关文档
最新文档