C8051F单片机技术问答
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
问:IO口的开漏和推挽输出如何使用?
答:将端口引脚置成推挽输出方式,这将使能端口引脚驱动器。
总体上来讲,数据输入端口引脚置成开漏方式、数据输出端口引脚置成推挽方式。
当引脚用于输出连接上拉电阻(也就是说当与5V系统接口时)时配置成开漏输出。
问:P4口的某些引脚已用为外部存储器的控制信号,剩下的口线能否作为普通I/O使用?答:可以,但不能直接给此端口送数,应通过“与”或者“或”的方式来对此端口进行操作
问:是不是所有的C8051F系列单片机的I/O口都是5V兼容?
答:不是,例如C8051F060只有P0口是5V兼容,具体的要参照相关型号的数据手册。
问:引脚P1.4~P1.7中断如何使用?
答:如果外部中断(EX4-EX7)使能且相应的引脚P1.4~P1.7变低(可以是外部输入信号、写输出端口锁存或是Crossbar定义的外设启动的事件)。
那么中断标志(PRT1IF.n)将置位,如果全局中断使能,将产生一个中断。
中断逻辑检测本身的逻辑状态,与产生逻辑状态变化的原因无关。
问:如果通过Crossbar寄存器使能并分配为P0.0和P0.1引脚,那么,我还可以用这两个引脚为通用I/O吗?
答:①如果你通过Crossbar使能一个外设,如UART,那么这个外设将控制这些引脚的输出状态(逻辑高/逻辑低)。
②你可以在任何时刻读引脚的状态,与Crossbar控制与否无关。
③当被禁止时,大部分外设的输出引脚被置为高阻态(UART口是一个很好的例子)。
因为UART收发器无明确的禁止态,你可将相应的引脚置成开漏输出模式,也可以达到相同的结果,因为UART收发器在空闲时引脚为逻辑1。
总的来说,Crossbar置配后在末使用时的外设引脚可以用于数据输入,但不能作为数据输出。
其它器件,如F3xx系列,口引脚可通过C rossbar“重新声明”且用于GPIO引脚对器件管脚无影响,因为这些器件具有“引脚跳过”(PIN SKIP)特性。
问:模拟引脚能否简单地用于数字I/O?
答:如果模拟引脚是独立的是不可以的。
但是如果模拟引脚和数字IO是复用的,是可以通过SFR的设置来完成配置。
问:C8051F系列单片机电源电压全部为2.7-3.6V,那么是否有与5V系统接口的比较简单的解决方案?
答:所有IO口允许5V(极限值为5.8V)输入,但是输出高电平为VDD。
如果与5V系统接口,最简单的方法是开漏输出并在输出端加接5V上拉,关键是上拉电阻的选择。
具体参考应用笔记AN011“在5V系统中使用C8051Fxxx”。
建议:如果可能,请尽量选用供电电压兼容的芯片,这是一种最理想的选择。
问:端口是否要加保护?
答:在端口电流瞬间跳变的情况下,建议加限流电阻进行保护。
另外如果端口可能有超过极限电压范围的瞬变电平侵入,也要加瞬态保护。
(瞬态保护的通常方式为接入TVS器件)
问: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。
问:在进行A/D转换时所测得的数据与计算所得的数据相差很大,但跳变不大,为什么?
答:1、计算时所用的基准电压是多少,如果用的是内部基准,把内部基准电压通过交叉开关分配到芯片引脚上,再进行测量;
2、换别的通道转换看是否正常。
问:为什么在进行A/D转换时测得的数据跳变很大?
答:当输入信号有干扰脉冲、ADC的转换时间太短、在通道切换后通道还没有稳定就开始转换等原因都会导致转换后的数据跳变大,请仔细检查以上三点并做相应的处理就可以解决此类问题。
问:如果使用内部参考源,C8051F020/F021的参考电压引脚如何连接?
答:C8051F020/F022共有4个参考电压引脚,VREF,VREF0,VRFE1和VREFD。
允许ADC和DAC使用一个外部电压基准或片内电压基准。
通过配置VREF0CF基准电压控制寄存器,ADC0还可以使用DAC0的输出作为内部基准,ADC1也可以使用模拟电源作为电压基准。
内部基准电压必须通过VREF引脚连接到芯片内部。
所以当您的系统中使用到内部基准电压时,必须确保VREF与VREF0,VREF1,VREFD(全部或部分)引脚的连接。
C8051F021/F023共有两个参考电压引脚,VREFA和VREF。
如果ADC0和ADC1使用内部参考源,必须将VREFA 与VREF引脚连接。
注意:如果使用ADC或DAC,则不管电压基准取自片内还是片外,REF0CN寄存器中的BIASE位必须被置为逻辑1。
问:如何提高系统的ADC的性能?
答:第一、将模拟电源和数字电源分开,可以使用比较简单的方法,如在模拟电源和数字电源之间加简单的滤波。
第二、将模拟地和数字地分开,并在电源附近通过磁珠连接。
第三、制板时,大面积覆铜。
第四、未使用到的模拟引脚要接地。
第五、为了确保参考电压的稳定,参考电压引脚一定要接去耦电容。
第六、模拟信号的输入电压范围是0-VDD,如果模拟输入的外围有可能侵入高电压(超过芯片的极限允许范围),就要采取保护措施(如加两个肖特级二极管)。
如果模拟输入会有瞬间过电流,也要加限流保护。
问: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)。
问:如果测试的模拟输入电压范围是0-5V怎么办?
答:因为模拟输入(AINx)引脚不能承受5V电压,任何引脚在任何情况下(不管ADC或PGA的设置如何)必须使其输入电压保持在AGND和AV+之间,这是为了避免沉(或源)电流通过ESD保护装置。
为了测试0-5V范围的信号,必须使信号衰减(衰减到AV+以下)才能进入到ADC输入。
当使用外部VREF时,要求VREF的最大值比AV+小300mV。
问:内部参考电平是否可以用于外部电路的参考?
答:可以,你可以用VREF信号作为输出驱动其它电路(像放大器的偏置电压等)。
注意,VREF引脚只能提供源电流,也就是说,要有负载接地使电流流出C8051器件。
例如,如果你将VREF连到OP运放的(+)节点,你要加一个下拉电阻对地(24K左右)将电流限制在100μA。
问:为了使ADC或DAC具有更好的性能,是否应在VREF 引脚接电容?
答:推荐在VREF引脚接一个0.1μF的陶瓷电容器与一个大的电容(典型为4.7μF钽电容)。
在VREF
引脚加电容是为了降低VREF的噪声。
因为VREF的噪声越小,ADC或DAC转换结果的噪声也就越小。
且这两个电容在PCB板上应尽可能离VREF引脚近。
问:ADC可编程窗口检测器有什么用途?
答:ADC可编程窗口检测器在很多应用中非常有用。
它不停地将ADC输出与用户编程的限制量进行比较,并在检查到越限条件时通知系统控制器,这在中断驱动的系统中尤其有效,既可以节省代码空间和CPU带宽又能提供快速响应的时间。
问:ADC的最大输入电压及输入阻抗?
答:ADC的最大输入电压为VREF,它的输入电压范围是0V-AV+/VDD。
输入电容为10pF;输入阻抗等价于一个5kΩ电阻和一个10pF电容的串联。
请参考应用笔记AN019“计算开关电容ADC的建立时间”。
问:从上电(或退出掉电模式)到ADC稳定开始转换需要多长时间?
答:模拟建立时间也就是等待参考电平稳定的时间。
它取决于接在VREF引脚的电容容量。
此电容越大VREF
的噪音就越小,ADC转换结果的噪音也就越小。
如果用4.7μF电容,则稳定时间大约为2ms,如果无旁路电容(不推荐),稳定时间大约为10μS。
注意:在开始转化之前,需要一个1.5μS的跟踪时间,这也就决定了ADC多路转换开关(MUX)的切换速
度。
问:C8051F MCU的指令执行速度为多少?
答:C8051F MCU的CIP-51内核采用流水线结构,与标准的8051结构相比,指令执行速度有很大的提高。
标准的8051单片机执行一个单周期指令需要12个系统时钟周期,而C8051F MCU执行一个单周期指令只需要一个系统时钟周期。
如果系统时钟频率为25MHz,执行一个单周期指令所需时间为40ns。