c8051f020程序片内AD程序怎么写,急急急

查看: 190|回复: 0
帮我看看这段C串口程序代码,想设置115200波特率
高手帮我看看下面的“??????”应该怎么填,希望的波特率是115200,感谢~
#include &ZLG7289.h&
unsigned char data1;
void SYSCLK_Init();
void PORT_Init();
void UART0_Init();
void&&DelayMs(unsigned int i)
& & & & for(;i&0;i--)
& & & & & & & & for(j=1000;j&0;j--)& & & & ;& & & & & & & & & & & & & & & &
void SYSCLK_Init()
& & & && &
& & & & OSCXCN=0X67;& && && &//0X67=
& & & & for(i=0;i&256;i++);& && && &//等待&1ms
& & & & while(!(OSCXCN&0X80));& && &//等待XTLVLD变为1
& & & & OSCICN=0X88;& && && &//时钟失效检测器,选择外部时钟源作为系统时钟
void PORT_Init()
& & & & XBR0 = 0x27;& && && & /*交叉开关配置,URAT总线TX0置到P0.0口,
& & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & RX0置到P0.1口, SPI总线SCK配置到P0.2口,
& & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & MOSI为P0.4口, NSS为P0.5,MISO配置到P0.3口,
& & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & IIC总线SDA置到P0.6口,SCK置到P0.7,
& & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & TX1,RX1配置到P1.0,P1.1,
& & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & CEX0,CEX1配置到P1.2,P1.3,
& & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & 外部中断int0配置到P1.4 */& &
& & & & XBR1 = 0x04;&&
& & & & XBR2 = 0x44;& && && & /*允许功能选择开关有效*/& &
& & & & P0MDOUT = 0x1A;& && &
& & & & P74OUT& &=0
void UART0_Init()
& & & & SCON0=0x50;& && && &//串口方式1& &
& & & & TMOD=0X20;& && && & //选用定时器1作为波特率发生器
& & & & TH1=?????;& && && &&&//波特率为????????
& & & & TL1=?????;
& & & & ES0=1;& && && && & //开启串口中断0
& & & & TF1=0;
& & & & TR1=1;& && && && && &//定时器开启& &
& & & & PCON=0X80;& && && &&&//波特率加倍 波特率为?????& &
& & & & TI0=1;
void UART0_ISR() interrupt 4 using 1
& & & & if(RI0)
& & & & {& &
& & & & & & & & RI0=0;& && && &&&//中断接受标志清零& && &
& & & & & & & & data1=SBUF0;& && &//接受数据
& & & & & & & & ZLG7289_Download(1,0,0,0x03);
& & & & & & & & DelayMs(1000);
& & & & & & & & SBUF0=data1;& && & //发送数据&&
& & & & & & & & while(TI0==0);& && &
& & & & & & & & TI0=0;& && && &&&//发送标志清零
void main()
& & & & WDTCN=0XDE;
& & & & WDTCN=0XAD;
& & & & SYSCLK_Init();
& & & & ZLG7289_Init();
& & & & PORT_Init();
& & & & UART0_Init();& &
& & & & EA=1;
& & & & while(1);
Powered by您好,欢迎来到捷配电子市场网
您现在的位置: &
型号/规格:c品牌/商标:c8051f网络
3000多家会员为您找货报价,SO EASY!
类型:经销商
联系人:刘先生
地址:陕西西安西安市科技路付28号
(24)N (9)N (12)N (1)N (1)N (1)
是为在校学生和爱好者开发的一款单片机开发板,也可作为工程人员开发参考之用。本学习板采用美国Silabs公司的作为核心控制器,指令集与MCS51兼容,是学习C8051F系列单片机入门级MCU。我们针对单片机片上的全部资源,编写了所有功能的测试程序,对该单片机的性能做了全面的测试评估,使用方便。
2. C8051F020单片机主要特性
􀁹 &
􀁹 &
􀁹 &
􀁹 &
􀁹 &
􀁹 &
􀁹 &
􀁹 &
􀁹 &
􀁹 &
􀁹 &
3.本学习板主要资源
)MCU 为美国Silabs 公司C8051F020,64KB FLASH、()B RAM、最高25MIPS 执行速度;
)外扩32KB SRAM(选用,速度45ns),外扩SPI 方式512KB FLASH();;
)8 路12 位AD 输入,AIN1 到AIN8 输入信号量程0~+25V,其他量程输入电压可通过更改分压电阻实现;
)2 路12 位DA 输出,输出信号量程0~+2.5V;
)8个轻触键盘,,8个LED 功能指示灯指示;
)2 路标准RS232 通讯接口;
)1 路RS485/422 通讯接口;
)IIC 接口的EEPROM AT24C02(可选更大容量的EEPROM);
)IIC接口的RTC时钟,选用PCF8563, 带停电保护功能;
)CH372 USB 从机通信;
)电位器调节实现2 路比较器接口使用实验;
)外扩总线接口;
)C8051F020 上的所有资源对用户开放;
)+5V 供电;
4.学习板软件例程
(1). Delay: 软件延时程序,利用软件进行延时操作。
(2). IO: IO信号输出控制程序。
(3). Keyled: 键盘读取及LCD液晶显示程序。
(4). IIC_EEPROM: IIC接口EEPROM(AT24C02A, 容量256字节)读写程序。
(5). IIC_RTC: IIC接口实时时钟(PCF8563)读写程序。
(6). PWM: PWM信号输出控制程序。
(7). RS232: RS232串行数据通信程序。
(8). RS485: RS485串行数据通信程序。
(9). ADC_Display: ADC采样转换及数据处理数码管显示。
(10). DAC:& DAC转换及计算程序。
(11). Timer: Timer2、Timer3计时程序。
(12). SPIFLASH: SPI接口FLASH(AT25F512, 容量512K)读写程序。
(13). Compararator: CP0,CP1应用程序。
(14). USB: CH372 芯片应用程序。
5.学习板配置:
&&& (1) C8051F020DK开发板1块;
&&(2) 交叉串口线1条;(3) USB1条;
(4) 资料光盘1张;
光盘内容:
1) C8051F020DK使用手册;
2)C8051F020DK原理图(PDF文件);
3)实验程序源码(C语言);
4)C8051F020DK主要资料;
5)KEIL C51 V8.02开发软件(2K代码限制);
6)其它相关资料;
类型:经销商
联系人:刘先生
地址:陕西西安西安市科技路付28号
店内其他产品
你可能感兴趣的产品
电子元器件产品索引: &B&&&&F&&&&J&&&&N&&&&R&&&&V&&&&Z&&&&3&&&&7&&基于 C 的示波器监控程序设计_电位器_中国百科网
基于 C 的示波器监控程序设计
    设计采用高性能单片机C为控制芯片,监控示波器面板上40个按键、3个编码开关及4个电位器的状态。分别介绍了键盘、编码开关和电位器的工作原理,以及其与单片机连接的硬件电路及软件编程的实现。按键部分采用一键多义的键盘程序设计方法,给出了键码匹配子程序流程图。
监控程序负责系统中全部硬件和软件资源的分配、调度工作,它提供用户接口,使用户获得友好的工作环境,是系统设计中一个重要组成部分。
1 C单片机概述
伴随着电子技术快速的发展,越来越多的人加入电子开发的大军。在学习电子技术和研发项目的过程中,避免不了要使用一些仪器,例如万用表、示波器等等,然而对于一些非专业的爱好者,拥有一台数字示波器是比较&奢侈&的。本设计C单片机,因其具有成本低、制作简单、测量精度高等优势,恰恰满足了这一部分人的需求。
C单片机是高度集成的片上系统。在芯片内集成了2个多通道ADC子系统(每个子系统包括1个可编程增益放大器和1个模拟多路选择器)、2 个电压输出DAC、2个电压比较器、电压基准、SMBus/I2C总线接口、UART、SPI总线接口、5个通用的16位定时器、1个具有5个捕捉/比较模块的可编程计数器/定时器阵列(PCA)、内部振荡器、8个8位通用数字I/0端口和64 KBFLASH程序存储器,以及8051兼容的高速微内核。
C单片机是所有模拟和数字外设均可由用户固件使能/禁止和配置。Flash 存储器还具有在系统重新编程能力,可用于非易失性数据存储,并允许现场更新8051 固件。片内JTAG 调试电路允许使用安装在最终应用系统上的产品MCU 进行非侵入式(不占用片内资源)、全速、在系统调试。该调试系统支持观察和修改存储器和寄存器,支持断点、观察点、单步及运行和停机命令。在使用JTAG 调试时,所有的模拟和数字外设都可全功能运行。
Cygnal出的一种混合信号系统级单片机。片内含CIP-51的CPU内核,它的指令系统与MCS-51完全兼容。其中的C单片机含有64kB片内Flash程序存储器,4352B的RAM、8个I/O端口共64根I/O口线、一个12位A/D转换器和一个8位A/D转换器以及一个双12位D/A转换器、2个比较器、5个16位通用定时器、5个捕捉/比较模块的可编程计数/定时器阵列、看门狗定时器、VDD监视器和温度传感器等部分。C单片机支持双时钟,其工作电压范围为2.7~3.6V(端口I/O,RST和JTAG引脚的耐压为5V)。与以前的51系列单片机相比,C增添了许多功能,同时其可靠性和速度也有了很大提高。
2 一键多义键盘工作原理
一台完善的智能仪表功能往往很多,设定的量程、参数也很多。如果还是用一键一个功能,势必要有一个很大的键盘,面板相应扩大,不美观,而且成本增加。因此在这类仪表中,键盘设计成一键多义,一个键有多种功能。
在一键多义的情况下,一个命令不是由一次按键组成,而是由一个按键序列组成。也就是说,对一个按键含义的解释,不仅取决于本次按键,还取决于以前按了些什么键。因此,对于一键多义的监控程序,首先要判断一个按键序列(而不是一次按键)是否已构成一个合法命令。若已构成合法命令,则执行命令,否则等待新按键输入。一键多义键盘管理程序,主要解决键盘按键序列的识别和如何根据键盘的按键序列去找相应的操作程序这两个问题。
上述问题可用&一图三表&的方法来解决。即,建立一张键图,依靠分析程序状态表,分析程序入口表和动作例行子程序表来完成。其中分析程序状态表总共分为4栏,分别为现状态PSTi、键码、下一状态、动作例行子程序编号。
3 编码开关工作原理
编码开关有3个引脚和5个引脚的,其中2个引脚是按下功能,另外3个引脚控制编码开关的左旋和右旋功能,与引脚1、2相连的是两个长短不一的金属静片,与引脚3相连的是一周有12或24个齿的金属动片。当脉冲电位器旋转时可出现4种状态:引脚3与引脚1相连,引脚3与引脚2及引脚1全相连,引脚3与引脚2 相连,引脚3与引脚2及引脚1全断开。
在实际使用中,一般将引脚3接地作为数据输入端。而引脚1、2作为数据输出端与单片机I/0口相连。本设计中用到3个编码开关,其中一个将引脚1与单片机的P4.0相连,引脚2与单片机的P4.1相连。当脉冲电位器左旋或右旋时,P4.0和P4.1就会周期性地产生图1所示的波形。如果是12点的脉冲电位器旋转一圈就会产生12组这样的波形,24点的脉冲电位器就会产生24组这样的波形。一组波形(或一个周期)包含了4个工作状态。因此只要检测出P4.O 和P4.1的波形,就能识别脉冲电位器是否旋转,是左旋还是右旋。
4 C单片机ADC0
C的ADC0子系统包括:一个9通道的可配置模拟多路开关(AMUX0)、一个可编程增益放大器(PGA0)和一个100 ksps的12位分辨率的逐次逼近寄存器型ADC。ADC中集成了跟踪保持电路和可编程窗口检测器。AMUX0、PGA0、数据转换方式及窗口检测器都可用软件通过特殊功能寄存器来配置。只有当ADC0控制寄存器(ADCOCN)中的ADOEN位被置1时,ADC子系统才被允许工作。当ADOEN位为0 时,ADC子系统处于低功耗关断方式。
ADC0端口的每一对均可用编程设置成为单端输入或差分输入。差分输入时的端口配对为(0,1)、(2,3)、(4,5)、(6,7),此设置由通道选择寄存器AMUXOSL的低4位和通道配置寄存器AMUXOCF的低4位确定。在AMXOCF中,位3~O各对应2个引脚通道。位值=0,表示是独立的单端输入(复位值均为单端输入);位值=1,表示是差分输入对。
C8051F系列单片机中ADC的速率都是可编程设置的,但最少要用16个系统时钟。一般在转换之前还自动加上3个系统时钟的跟踪/保持捕获时间 (&1.5&s)。设置F020内ADC速率的方法是通过配置寄存器ADCOCF的位7~3来进行的,其复位值为11111(位 7~3=SYSCLK/CLK(SAR)-1)。
一般在启动ADC之前都要处于跟踪方式,控制寄存器ADCOCN的位6如果为&O&,则一直处于跟踪方式(此时启动4种启动方式都可比跟踪启动快3个系统时钟);如为&1&,则有4种跟踪启动方式可选择,即对ADCOCN中的位3~2赋值:00为向ADBUSY写1时跟踪(软件命令),01为定时器3溢出跟踪,1O为CNVSTR上升沿跟踪(外部信号),11为定时器2溢出跟踪。
5 系统硬件电路设计
键盘部分采用6&6矩阵键盘,P7.O~P7.5为行线,P3.0~P3.5为列线。P3.0与P7.O交叉处为一键,P7口接10 k&O的上拉电阻至3.3 V。3个编码开关的1、2脚直接与单片机的I/0引脚相连,这里选择P4.O~P4.5,3脚接地,4、5脚用作按键使用。仅以接P4.O和P4.1引脚的编码开关为例,电路图如图2所示。模数转换部分使用内部电压基准,故将VREF引脚与VREF0引脚相连即可。采用电位器调节模拟量的输入,单端输入,电位器阻值为10 k&O,基准电压典型值为2.43 V,电源电压采用3.3 V供电。为使基准电压达到最大,需要一个阻值约为3.58 k&O的电阻与电位器串联接到模拟端口,硬件电路如图3所示,电位器的4、5脚也用作按键使用。
6 系统软件设计
6.1 一键多义键盘程序设计
在键盘分析中,运用一个工作状态寄存器保存键盘的现状态,当键盘扫描到一个按键时,根据现状态的值从分析程序入口表中找到分析程序状态表地址,从该地址处进入分析程序状态表,找到相匹配的值,把下一状态送到现状态单元里,取出动作号,根据动作号计算出动作子程序入口地址,再执行相应子程序。图4为键码匹配子程序的流程图。
6. 2 编码开关程序设计
由图1可以看出,引脚1和引脚2有同时为高电平的情况,之后如果引脚2比引脚1先到达高电平则表示左旋,如果引脚1比引脚2先到达高电平则表示右旋。编程的时候依据这个特点来判断引脚1、引脚2的状态即可。以1引脚接P4.0,2引脚接P4.1为例:
6.3 模数转换软件设计
通过设置ADCO控制寄存器ADCOCN位3~2(ADOCM1~O)A/D转换启动方式选择位,来启动A/D转换:位3~2为00时,向ADOBUSY(ADCOCN位4)写1启动A/D转换;位3~2为01时,定时器3溢出启动A/D转换;位3~2为10时,CNVSTR上升沿启动 A/D转换;位3~2为11时,定时器2溢出启动A/D转换。本设计采用第一种启动方式。
由于单片机的工作量并不大,所以软件设计时采用查询的方式。单片机不断地查询键盘、编码开关以及电位器的状态,如果有变化时,单片机将动作信息传递给 ARM主MCU,等待主MCU的处理。由于单片机模数转换的速度非常快,因此在程序中加延时,以便观察到模数转换的变化量。另外,硬件设计时没有考虑滤波,故用软件实现滤波。一般的滤波的方法有限幅滤波法、中位置滤波法、算术平均滤波法等,现在提出一种新的滤波方法。由于使用12位A/D,但只要8位就可以达到所要的精度,所以可以采用去掉低4位的方法来实现滤波的目的。由于篇幅有限,下面只给出程序的一部分,以AIN0为例:
本文介绍的一键多义的按键管理程序,对多按键的智能仪表可以通用。编码开关的编程方法简单易懂。在A/D转换部分,提出的去掉低4位的软件滤波方法可靠可行,对精度要求不高的场合非常适用。这3部分构成了一个完整的监控程序,当单片机监控到某一部分有变化时,就将其动作信息传递给ARM主CPU,主CPU 进行相应的处理。
推荐阅读:
Copyright by ;All rights reserved.浅谈CMCU-五星文库
免费文档下载
导读:浅谈CMCU1.概述美国Cygnal公司推出的C8051F系列单片机把80C51系列单片机从MCU时代推向SoC时代,使得以8051为内核的单片机上了一个新的台阶。CygnalC8051F系列是全集成混合信号在片系统单片机。在片系统随着半导体生产技术的不断发展,集成度越来越高,对嵌入式控制技术可靠性要求也越来越高而产生的新概念,即SOC(Sy
美国Cygnal公司推出的C8051F系列单片机把80C51系列单片机从MCU时代推向SoC时代,使得以8051为内核的单片机上了一个新的台阶。Cygnal C8051F系列是全集成混合信号在片系统单片机。在片系统随着半导体生产技术的不断发展,集成度越来越高,对嵌入式控制技术可靠性要求也越来越高而产生的新概念,即SOC(System on chip),意思是整个系统都高度集成在一个芯片上。本文通过使用Cygnal C制作一个电子琴,介绍基于8051内核MCU的发展情况,Cygnal CMCU的特点,及其使用C一些需要注意的问题。
电子琴的工作原理:声音的频率不同,决定着音乐音符的不同。通过定时器改变CIO口输出波形的频率,这样就可以发出不同的音符了。工作时当按下启动按钮时,C查表取得节拍,然后定时,时间到时产生中断,连接喇叭的IO输出反向,由此产生了音符,当它连续工作时,喇叭就可以放出了一段音乐。
2.基于8051内核MCU的发展情况
在嵌入式系统低端的单片机领域,从8位单片机诞生至今,已近30年,在百花齐放的单片机家族中,80C51系列一直扮演着一个独特的角色。Cygnal 推出C8051F更令业界人士刮目相看。回顾历史,在Intel公司推出了MCS-51不久便实施了最彻底的技术开放政策;在众多电器商、半导体商的积极参与下,将MCS-51发展成了众多型号系列的80C51 MCU家族。MCS-51经典的体系结构、极好的兼容性和Intel公司的开放政策不仅使众多厂家参与发展,也诱使半导体厂家对MCS-51实行为所欲为的改造。由于MCS-51提供的最佳兼容性,使MCS-51在被&肢解&式改造后,还能以不变的指令系统、基本单元的兼容性保持着8051内核的生命延续,并在未来SoC发展中,担任8位CPU内核的重任。回顾80C51系列从MCS-51、80C51到C8051F的过程,我们可以深刻领会到单片机发展的一些规律性东西。
2.1 嵌入式应用中的8位机现象
与从8位机迅速向16位、32位、64位过渡的通用计算机相比,8位单片机从20世纪70年代初期诞生至今,虽历经从单片微型计算机到微控制器、MCU和SoC的变迁,8位机始终是嵌入式低端应用的主要机型,而且在未来相当长的时间里,仍会保持这个势头。这是因为嵌入式系统和通用计算机系统有完全不同的应用特性,从而走向完全不同的技术发展道路。
嵌入式系统嵌入到对象体系中,并在对象环境下运行。与对象领域相关的操作主要是对外界物理参数进行采集、处理,对外界对象实现控制,并与操作者进行人机交互等。而对象领域中的物理参数的采集与处理、外部对象的控制以及人机交互所要求的响应速度有限,而且不会随时间变化。在8位单片机能基本满足其响应速度要求后,数据宽度不成为技术发展的主要矛盾。因此8位单片机会稳定下来,其技术发展方向转为最大限度地满足对象的采集、控制、可靠性和低功耗等品质要求。
随着现代通信技术的发展,智能化系统对DSP需求的增长要求单片机相应提高运算速度。当前8位单片机在不扩展数据总线的情况下,提高运行速度仍有潜力可挖。例如,采用RISC结构实现并行流水线作业,CISC结构的C8051F采用CIP-8051结构,使单周期指令速度提高到原8051的12倍。
鉴于嵌入式低端应用对象的有限响应要求、嵌入式系统低端应用的巨大市场以及8位机具有的速度潜力,可以预期在未来相当长的时间内,8位机仍然是嵌入式应用中的主流机型。
随着半导体技术的发展,8位单片机在CPU结构、CPU外围、功能外围、外围接口和集成开发环境方面都会迅速地发展;因此,可以说8位单片机虽然&古老&,但又会是一个十分活跃而新兴的嵌入式领域。80C51系列从Intel公司的MCS-51发展到Cygnel公司的C8051F的过程充分地说明了这一点。
8位单片机中的80C51现象
在8位单片机中,80C51系列形成了一道独特的风景线。历史最长,长盛不衰,众星捧月,不断更新,形成了既具有经典性,又不乏生命力的一个单片机系列。当前,Cygnal公司推出的C8051F又将8051兼容单片机推上了8位机的先进行列。总结80C51系列的发展历史,可以看出单片机的3次技术飞跃。
2.2.1 从MCS-51到MCU的第1次飞跃
Intel公司于1980年推出的MCS-51奠定了嵌入式应用的单片微型计算机的经典体系结构,但不久就放弃了进一步发展计划,并实施了8051的技术开放政策。无论从主观因素还是客观因素,都是明智之举。因为在创建一个完善的嵌入式计算机体系结构后,面临的是不断满足嵌入式对象要求的各种控制功能。在8051实现开放后,PHILIPS公司作为全球著名的电器商以其在电子应用系统的优势,着力发展80C51的控制功能及外围单元。将MCS-51的单片微型计算机迅速地推进到80C51的MCU时代,形成了可满足大量嵌入式应用的单片机系列产品。
2.2 引领Flash ROM潮流的第2次飞跃
当前,嵌入式系统普遍采用Flash ROM技术。Flash ROM的使用加速了单片机技术的发展。基于Flash ROM的ISP/IAP技术,极大地改变了单片机应用系统的结构模式以及开发和运行条件;而在单片机中最早实现Flash ROM技术的是ATMEL公司的AT89Cxx系列。
2.3 内核化SoC的第3次飞跃
MCS-51典型的体系结构以及极好的兼容性,对于MCU不断扩展的外围来说,形成了一个良好的嵌入式处理器内核的结构模式。当前嵌入式系统应用进入SoC模式,从各个角度,以不同方式向SoC进军,形成了嵌入式系统应用热潮。在这个技术潮流中,8051又扮演了嵌入式系统内核的重要角色。在MCU向SoC过渡的数、模混合集成的过程中,ADI公司推出了ADμC8xx系列,而Cygnal公司则实现了向SoC的C8051F过渡;在PLD向SoC发展过程中,Triscend公司在可配置系统芯片CSoC的E5系列中便以8052作为处理器内核。
3.CMCU的特点和功能
3.1CMCU概述
Cygnal出的一种混合信号系统级单片机。片内含CIP-51的CPU内核,它的指令系统与MCS-51完全兼容。其中的C单片机含有64kB片内Flash程序存储器,4352B的RAM、8个I/O端口共64根I/O口线、一个12
位A/D转换器和一个8位A/D转换器以及一个双12位D/A转换器、2个比较器、5个16位通用定时器、5个捕捉/比较模块的可编程计数/定时器阵列、看门狗定时器、VDD监视器和温度传感器等部分。C单片机支持双时钟,其工作电压范围为2.7~3.6V(端口I/O,RST和JTAG引脚的耐压为5V)。C电路原理图如图1所示。
图1. C电路原理图
3.2CMCU内部功能部件的特点和功能
3.2.1CCPU的主要特点如下:
(1)与标准8051机完全兼容,支持标准的ASM51、KeilC高级语言;
(2)具有高速指令处理能力,机器周期由MCS51标准的12个系统时钟周期降为1个系统时钟周期,且70%的指令时间为1-2个机器周期,指令处理能力大大提高;
(3)增加了中断源,由MCS-51标准7个中断源增加至22个中断源;
包含总结汇报、办公文档、资格考试、文档下载、旅游景点、word文档、出国留学、外语学习、党团工作以及浅谈CMCU等内容。本文共3页
相关内容搜索c I/O配置小结 - 电子技术基础知识 - 21IC中国电子网
您当前的位置:&>&&>&&>&
c I/O配置小结
的每个I/O口引脚都可以被配置为推挽或漏极开路输出。同时引入了数字交叉开关,允许将内部数字系统资源映射到P0、P1、P2和P3 的端口引脚。通过设置交叉开关寄存器可将片内的计数器/定时器、串行总线、硬件中断、ADC转换启动输入、比较器输出以及微控制器内部的其他数字信号配置 为出现在端口I/O引脚。必须在访问这些外设的I/O之前配置和允许交叉开关。
注意的问题:
1.低端口既能按位寻址,也可以按字节寻址;高端口只能按字节寻址。
2.没有被分配到的引脚作为一般的数字通用I/O口。
3.P1口还可以用作ADC1的模拟输入。
4.P0MDOUT~P3MDOUT用于控制I/O端口每一位的输出状态。
5.EMIF(外部存储器接口)是用于CPU与片外XRAM之间的数据传输通道,通过寄存器EMI0CF和EMI0CN选择和管理端口实现数据的传输。
6.为了能访问片外存储器空间,必须设置EMI0CN寄存器的内容为片外存储器的空间页地址。
7.如果把外部存储器接口(EMIF)设置在高端口则首先要把EMI0CF的PRTSEL位设置为1,选择高端口,同时选择地址的复用或非复用方式,在把XBR的外部寄存器的EMIFLE位设置为0。
8.复用方式配置:在复用方式下,数据总线和地址总线的第8位共用相同的引脚(AD0~AD7)。在该方式下,要用一个外部锁存器(如 74HC373或相同功能的锁存器)保持RAM地址的低8位。外部锁存器由ALE(地址锁存使能)信号控制,ALE信号由外部存储器接口逻辑驱动。
9.在总线复用时,需要把地址数据复用端口配置为漏极开路。
10.ALE高/低脉宽占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 |= 0 /*使能P4~P7推挽输出*/
EMI0CF |= 0x2c; /*EMIF工作在地址/数据复用方式,只用外部存储器,ALE高/低脉宽占1个SYSCLK周期*/
EMI0TC |= 0x6c; /*地址建立/保持时间占0个SYSCLK周期,/WR和/RD占12个SYSCLK周期*/
P3MDOUT |= 0 /*使能P3.5推挽输出*/
11.避免高端口处于&浮空&状态,以避免因输入浮空为无效逻辑电平而导致不必要的功率消耗,为此应采取如下措施的任何一种:a.将XBR2.7位设置为逻辑0选择弱上拉状态
R/W R/W R/W R/W R/W R/W R/W R/W 复位值
WEAKPUD XBARE - T4EXE T4E UART1E EMIFLE CNVSTE
位7 位6 位5 位4 位3 位2 位1 位0 SFR地址
位7 WEAKPUD 弱上拉禁止位
0 弱上拉全局允许
1 弱上拉全局禁止
位6 XBARE 交叉开关允许位
0 交叉开关禁止端口0 1 2 和3 的所有引脚被强制为输入方式
1 交叉开关允许
位5 未用读0 写=忽略
位4 T4EXE T4EX 输入允许位
0 T4EX 不连到端口引脚
1 T4EX 连到端口引脚
位3 T4E T4 输入允许位
0 T4 不连到端口引脚
1 T4 连到端口引脚
位2 UART1E UART1 I/O 允许位
0 UART1 I/O 不连到端口引脚
1 UART1 TX 和RX 连到两个端口引脚
位1 EMIFLE 外部存储器接口低端口允许位
0 P0.7 P0.6 和P0.5 的功能由交叉开关或端口锁存器决定
1 如果EMI0CF.4 = 0 外部存储器接口为复用方式
则P0.7 (/WR) P0.6 (/RD)和P0.5 (/ALE)被交叉开关跳过它们的输出
状态由端口锁存器和外部存储器接口决定
1 如果EMI0CF.4 = 1 外部存储器接口为非复用方式
则P0.7 (/WR)和P0.6 (/RD)被交叉开关跳过它们的输出状态由端口锁
存器和外部存储器接口决定
位0 CNVSTE 外部转换启动输入允许位
0 CNVSTR 不连到端口引脚
1 CNVSTR 连到端口引脚;
b.令P74OUT=0xFF,将高端口输出方式配置为推拉方式(P74OUT为高端口输出方式寄存器);
c.向高端口数据寄存器P4、P5、P6和P7写0。
12.配置端口引脚的输出方式
每个端口引脚的输出方式都可被配置为漏极开路或推挽方式。在推挽方式下向端口数据
寄存器中的相应位写逻辑0 将使端口引脚被驱动到GND 写逻辑1 将使端口引脚被驱动到VDD ,在漏极开路方式下向端口数据寄存器中的相应位写逻辑0 将使端口引脚被驱动
到GND 写逻辑1 将使端口引脚处于高阻状态,当系统中不同器件的端口引脚有共享连接
即多个输出连接到同一个物理线时(例如SMBus 连接中的SDA 信号),使用漏极开路方式可
以防止不同器件之间的冲突。(推挽方式在有些书中称为推拉方式)
关于开漏、推挽方式,漏级开路即高阻状态,适用于输入/输出,其可独立输入/输出低电平和高阻状态,若需要产生高电平,则需使用外部上拉电 阻或使用如LCX245等电平转换芯片。有些朋友,尤其是未学过此方面知识的朋友,在实际工作中将I/O口设置为漏开,并想输出高电平,但向口线上写1后 对方并未认出高电平,但用万用表测量引脚确有电压,这种认为是不对的,对于高阻状态来说,测量电压是无意义的,正确的方法应是外加上拉电阻,上拉电阻的阻 值=上拉电压/芯片引脚最大灌(拉)电流。
推挽方式可完全独立产生高低电平,推挽方式为低阻,这样,才能保证口线上不分走电压或分走极小的电压(可忽略),保证输出与电源相同的高电平,推挽适用于输出而不适用于输入,因为若对推挽(低阻)加高电平后,I=U/R,I会很大,将造成口的烧毁。
对与C8051F的很多型号片子,将I/O口设置为推挽方式的做法为:PnMDOUT=0xff,Pn=0x00,这样设置I/O口为推挽,并输出 低电平(可降低功耗) 将I/O口设置为漏开方式的做法为:PnMDOUT=0x00,Pn=0x11,这样设置I/O口为漏开。
如果学过三极管放大电路一定知道,前置单管放大器和功放末级放大电路的区别。单片机内部的逻辑经过内部的逻辑运算后需要输出到外面,外面的器件可能需要较大的电流才能推动,因此在单片机的输出端口必须有一个驱动电路。
这种驱动电路有两种形式:
其中的一种是采用一只N型三极管(npn或n沟道),以npn三极管为例,就是e接地,b接内部的逻辑运算,c引出,b受内部驱动可以控制三极管是否导通 但如果三极管的c极一直悬空,尽管b极上发生高低变化,c极上也不会有高低变化,因此在这种条件下必须在外部提供一个电阻,电阻的一端接c(引出脚)另一 端接电源,这样当三极管的b有高电压是三极管导通,c电压为低,当b为低电压时三极管不通,c极在电阻的拉动下为高电压,这种驱动电路有个特点:低电压是 三极管驱动的,高电压是电阻驱动的(上下不对称),三极管导通时的ec内阻很小,因此可以提供很大的电流,可以直接驱动led甚至继电器,但电阻的驱动是 有限的,最大高电平输出电流=(vcc-Vh)/r;
另一种是互补推挽输出,采用2只晶体管,一只在上一只在下,上面的一只是n型,下面为p型(以三极管为例),两只管子的连接为:npn(上)的c连 vcc,pnp(下)的c接地,两只管子的ee,bb相连,其中ee作为输出(引出脚),bb接内部逻辑,这个电路通常用于功率放大点路的末级(音响), 当bb接高电压时npn管导通输出高电压,由于三极管的ec电阻很小,因此输出的高电压有很强的驱动能力,当bb接低电压时npn截至,pnp导通,由于 三极管的ec电阻很小因此输出的低电压有很强的驱动能力,简单的例子,9013导通时ec电阻不到10欧,以Vh=2.5v,vcc=5v计算,高电平输 出电流最大=250MA,短路电流500ma,这个计算同时告诉我们采用推挽输出时一定要小心千万不要出现外部电路短路的可能,否则肯定烧毁芯片,特别是 外部驱动三极管时别忘了在三极管的基极加限流电阻。推挽输出电路的形式很多,有些单片机上下都采用n型管,但内部逻辑提供互补输出,以上的说明仅仅为了说 明推挽的原理,为了更深的理解可以参考功率放大电路。
问:内部时钟振荡器是否稳定?是否可以用于产生波特率的时基?
答: 不同器件的内部时钟振荡器的精度是不同的(&20%)。随电源电压变化,它也将发生变化(6.5%/V)。但基本不随温度变化(&1%温度变化范围 -40℃~+85℃)。由于不同器件内部振荡器的离散性较大,所以不能用于产生波特率,应该外接标准晶体 。而有些器件,如C8051F3xx/f12x/f04x/f06x内部振荡器精度为&2%,可用于产生波特率 。
问:片内/外振荡器如何配置?
答:正确步骤:
1、允许外部振荡器;
3、查询XTLVLD '0'-&'1'
4、切换到外部振荡器。
注意:振荡器频率的选择,即OSCXCN寄存器的配置(外部振荡器频率控制位的设置)。关于更多的信息以及源代码可以参看应用笔记AN002《配置内部和外部振荡器》。应用笔记可以从我公司网站下载:.cn
问:C8051F MCU的指令执行速度为多少?
答:C8051F MCU的CIP-51内核采用流水线结构,与标准的8051结构相比,指令执行速度有很大的提高。标准的8051单片机执行一个单周期指令需要12个系统 时钟周期,而C8051F MCU执行一个单周期指令只需要一个系统时钟周期。如果系统时钟频率为25MHz,执行一个单周期指令所需时间为40ns。
问:切换外部晶振时应注意哪些问题?
答:首先要允许外部振荡器,但此时的系统时钟源仍应是内部时钟,直到外部振荡器稳定后,才可将系统时钟源切换到外部振荡器上,否则会出现切换不过去,系统死机的情况。
问:使用外部晶振应注意哪些问题?
答:1、所有的模拟和数字电源引脚都应接电源(2.7~3.6V);
2、C8051F3xx系列器件的晶振引脚间应跨接一个10M电阻(在新华龙网站的&主页&&&原理图/PCB库&中有C8051F系列单片机的典型接线图);
3、晶振、电容等相关器件尽量靠近单片机的晶振引脚。
问:系统时钟切换到外部时钟后,内部的时钟是否应关闭?
答:可以选择关闭或不关闭,但是从降低功耗的角度来说,应该关闭。
问:系统时钟可不可以在程序中随时切换?
答:可以,但是由内部再一次切换到外部时应按照技术问答2所介绍的步骤进行切换。
问:使用外部晶振时如何配置芯片的引脚?
答答:对于芯片上有固定晶振引脚的设备(例如C8051F02X);相应时钟输入引脚按选择的晶振模式自动分配引脚;
对于晶振引脚与GPIO共用的芯片(例如C8051F30X);晶振引脚要按下述方式进行设置:
(1).外接晶体体时;XTAL1与XTAL2都要配置为模拟输入
(2).外接振荡电路为&RC&或&C&方式时,XTAL2引脚要配置为模拟输入
(3).外接CMOS时钟电路时,XTAL2引脚要配置为数字输入
(4).以上几种方式在引脚的配置中都要使用跳过功能将此引脚跳过
问:外接晶振的最高频率是多少?
答:外接晶振的最高频率是30MHz;
问:从上电(或退出掉电模式)到ADC稳定开始转换需要多长时间?
答:模拟建立时间也就是等待参考电平稳定的时间。它取决于接在VREF引脚的电容容量。此电容越大VREF的噪音就越小,ADC转换结果的噪音也就越小。如果用4.7&F电容,则稳定时间大约为2ms,如果无旁路电容(不推荐),稳定时间大约为10&S。
注意:在开始转化之前,需要一个1.5&S的跟踪时间,这也就决定了ADC多路转换开关(MUX)的切换速度。
问:ADC的最大输入电压及输入阻抗?
答:ADC的最大输入电压为VREF,它的输入电压范围是0V-AV+/VDD。
输入电容为10pF;输入阻抗等价于一个5k&O电阻和一个10pF电容的串联。
请参考应用笔记AN019&计算开关电容ADC的建立时间&。
问:ADC可编程窗口检测器有什么用途?
答:ADC可编程窗口检测器在很多应用中非常有用。它不停地将ADC输出与用户编程的限制量进行比较,并在检查到越限条件时通知系统控制器,这在中断驱动的系统中尤其有效,既可以节省代码空间和CPU带宽又能提供快速响应的时间。
问:为了使ADC或DAC具有更好的性能,是否应在VREF 引脚接电容?
答:推荐在VREF引脚接一个0.1&F的陶瓷电容器与一个大的电容(典型为4.7&F钽电容)。在VREF引脚加电容是为了降低VREF的噪声。因为VREF的噪声越小,ADC或DAC转换结果的噪声也就越小。且这两个电容在PCB板上应尽可能离VREF引脚近。
问:内部参考电平是否可以用于外部电路的参考?
答: 可以,你可以用VREF信号作为输出驱动其它电路(像放大器的偏置电压等)。注意,VREF引脚只能提供源电流,也就是说,要有负载接地使电流流出 C8051器件。例如,如果你将VREF连到OP运放的(+)节点,你要加一个下拉电阻对地(24K左右)将电流限制在100&A。
问:如果测试的模拟输入电压范围是0-5V怎么办?
答: 因为模拟输入(AINx)引脚不能承受5V电压,任何引脚在任何情况下(不管ADC或PGA的设置如何)必须使其输入 电压保持在AGND和AV+之间,这是为了避免沉(或源)电流通过ESD保护装置。为了测试0-5V范围的信号,必须使信号衰减(衰减到AV+以下)才能 进入到ADC输入。当使用外部VREF时,要求VREF的最大值比AV+小300mV。
问:F02x器件内部有PGA(可编程增益放大器)可以对输入模拟信号进行放大。其中的一个放大倍数为0.5 倍。是否意味着我可以外接+6V的模拟输入电压,经过0.5倍的放大变成3V输入到AINx呢?
答:请注意:任何模拟引脚(数据IO口和VDD引脚除外)的最大输入电压为-0.3V到 VDD+0.3V。如果超出此范围可能造成器件永久损坏。
在单端输入方式,有两个限制因素如下:
1、AIN输入电压必须在AGND和AV+之间以避免吸/源电流流过ESD保护器件。
2、AIN电压必须在AGND和(VREF / GAIN) 之间。假设一个12位的ADC,AINx 引脚的输入电压小于AGND,结果将是0x000;如果输入电压大于(VREF / GAIN) ,结果将是0xFFF。
例如,使用外部1.25V参考,PGA增益为0.5,允许的电压输入范围是0V到 (1.25V / 0.5 = 2.5V)。
问:如何提高系统的ADC的性能?
答:第一、将模拟电源和数字电源分开,可以使用比较简单的方法,如在模拟电源和数字电源之间加简单的滤波。
第二、将模拟地和数字地分开,并在电源附近通过磁珠连接。
第三、制板时,大面积覆铜。
第四、未使用到的模拟引脚要接地。
第五、为了确保参考电压的稳定,参考电压引脚一定要接去耦电容。
第六、模拟信号的输入电压范围是0-VDD,如果模拟输入的外围有可能侵入高电压(超过芯片的极限允许范围),就要采取保护措施(如加两个肖特级二极管)。如果模拟输入会有瞬间过电流,也要加限流保护。
问:如果使用内部参考源,C1的参考电压引脚如何连接?
答:C2 共有4个参考电压引脚,VREF,VREF0,VRFE1和VREFD。允许ADC和DAC使用一个外部电压基准或片内电压基准。通过配置VREF0CF 基准电压控制寄存器,ADC0还可以使用DAC0的输出作为内部基准,ADC1也可以使用模拟电源作为电压基准。内部基准电压必须通过VREF引脚连接到 芯片内部。所以当您的系统中使用到内部基准电压时,必须确保VREF与VREF0,VREF1,VREFD(全部或部分)引脚的连接。
C3共有两个参考电压引脚,VREFA和VREF。如果ADC0和ADC1使用内部参考源,必须将VREFA与VREF引脚连接。
注意:如果使用ADC或DAC,则不管电压基准取自片内还是片外,REF0CN寄存器中的BIASE位必须被置为逻辑1。
问:为什么在进行A/D转换时测得的数据跳变很大?
答:当输入信号有干扰脉冲、ADC的转换时间太短、在通道切换后通道还没有稳定就开始转换等原因都会导致转换后的数据跳变大,请仔细检查以上三点并做相应的处理就可以解决此类问题。
问:在进行A/D转换时所测得的数据与计算所得的数据相差很大,但跳变不大,为什么?
答:1、计算时所用的基准电压是多少,如果用的是内部基准,把内部基准电压通过交叉开关分配到芯片引脚上,再进行测量;
2、换别的通道转换看是否正常。
问:ADC的单端输入与差分输入的区别?
答答:在单端方式工作时;ADC转换的是单输入引脚对地的电压值;在增益为1时,测量的值就是输入的电压值;范围是0V到VREF;当增益增加时,输入的范围要相应的减小;
在差分方式工作时;ADC转换的是AIN+与AIN-两个引脚的差值;在增益为1时,测量的值等于(AIN+)-(AIN-),范围是-VREF到+VREF;当增益增加时,输入的范围要相应的减小。
注 意:在差分方式时所提的负压是指AIN-引脚的电压大于AIN+引脚的电压,实际输入到两个引脚的电压对地都必需是正的;例如:如果AIN+引脚输入的电 压为0V,AIN-引脚的输入电压为1/2VREF时,差分的输入电压为(0V-1/2VREF) = -1/2VREF。
问:器件IO口的吸收(sink)电流和源(source)电流是多少?
答:IO口的沉电流和拉电流的极限参数为100mA(但是此时已经不能保证端口的正常逻辑关系了)。具体的参数请参考datasheet的端口IO部分的&端口I/O直流电气特性&。
问:端口是否要加保护?
答:在端口电流瞬间跳变的情况下,建议加限流电阻进行保护。另外如果端口可能有超过极限电压范围的瞬变电平侵入,也要加瞬态保护。(瞬态保护的通常方式为接入TVS器件)
问:C8051F系列单片机的IO口与传统8051单片机相比有什么区别?
答:①C8051F系列单片机的IO口全部为三态双向口(而传统8051单片机P1、P2、P3口为准双向口),内部有弱上拉可禁止(传统8051单片机固有),可配置为开漏输出和推挽输出(传统8051单片机只有开漏输出)。
②片内数字资源要通过数据交叉开关(crossbar)按一定的优先级配置到IO引脚(C8051F2xx系列除外,而传统8051单片机不具备这一功能)。IO口的配置更加灵活。
问:C8051F系列单片机电源电压全部为2.7-3.6V,那么是否有与5V系统接口的比较简单的解决方案?
答:所有IO口允许5V(极限值为5.8V)输入,但是输出高电平为VDD。如果与5V系统接口,最简单的方法是开漏输出并在输出端加接5V上拉,关键是上拉电阻的选择。具体参考应用笔记AN011&在5V系统中使用 C8051Fxxx&。
建议:如果可能,请尽量选用供电电压兼容的芯片,这是一种最理想的选择。
问:模拟引脚能否简单地用于数字I/O?
答:如果模拟引脚是独立的是不可以的。但是如果模拟引脚和数字IO是复用的,是可以通过SFR的设置来完成配置。
问:C的p4-p7口和p0-p3口有什么不同?
答:P0-P3口复位时为通用口,可通过Crossbar(数据交叉开关)寄存器按优先级设置成第二功能。而P4-P7口是通用口,另外P4-P7寄存器不能位寻址。
问:如果通过Crossbar寄存器使能并分配为P0.0和P0.1引脚,那么,我还可以用这两个引脚为通用I/O吗?
答:①如果你通过Crossbar使能一个外设,如UART,那么这个外设将控制这些引脚的输出状态(逻辑高/逻辑低)。
②你可以在任何时刻读引脚的状态,与Crossbar控制与否无关。
③当被禁止时,大部分外设的输出引脚被置为高阻态(UART口是一个很好的例子)。因为UART收发器无明确的禁止态,你可将相应的引脚置成开漏输出模式,也可以达到相同的结果,因为UART收发器在空闲时引脚为逻辑1。
总的来说,Crossbar置配后在末使用时的外设引脚可以用于数据输入,但不能作为数据输出。其它器件,如F3xx系列,口引脚可通过Crossbar&重新声明&且用于GPIO引脚对器件管脚无影响,因为这些器件具有&引脚跳过&(PIN SKIP)特性。
问:IO口的开漏和推挽输出如何使用?
答:将端口引脚置成推挽输出方式,这将使能端口引脚驱动器。总体上来讲,数据输入端口引脚置成开漏方式、数据输出端口引脚置成推挽方式。当引脚用于输出连接上拉电阻(也就是说当与5V系统接口时)时配置成开漏输出。
问:引脚P1.4~P1.7中断如何使用?
答: 如果外部中断(EX4-EX7)使能且相应的引脚P1.4~P1.7变低(可以是外部输入信号、写输出端口锁存或是Crossbar定义的外设启动的事 件)。那么中断标志(PRT1IF.n)将置位,如果全局中断使能,将产生一个中断。中断逻辑检测本身的逻辑状态,与产生逻辑状态变化的原因无关。
问:是不是所有的C8051F系列单片机的I/O口都是5V兼容?
答:不是,例如C只有P0口是5V兼容,具体的要参照相关型号的数据手册。
问:P4口的某些引脚已用为外部存储器的控制信号,剩下的口线能否作为普通I/O使用?
答:可以,但不能直接给此端口送数,应通过&与&或者&或&的方式来对此端口进行操作。
问:为什么端口的数据寄存器置为0时,其引脚上的电平还是为高电平?
答:交叉开关使能位没有置位。
问:端口在停机(STOP)模式下是什么状态?
答:端口在停机模式下将保持进入停机模式前的状态。

我要回帖

更多关于 c8051f020程序 的文章

 

随机推荐