C8051F020硬件电路设计

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

1C8051F020硬件电路设计一直觉得自己设计的C8051F020电路板的过程比较凌乱,想找个时间来总结下,所以就有了这篇文章。其实这个电路板的功能很简单,主要就是板上设计了LCD12864、LCD1602以及键盘的接口,但是在设计过程中出现了很多问题,现在来做个总结。首先来个电路板的照片如图1所示。电路板所以的IO口都用牛角座引出,方便连接。图1系统板实物图片1、关于ADC的设计。去年在研究C8051F020片内的ADC0的时候发现一个奇怪的问题,每当采采集电压达到3V左右的时候采集的数字量就已经达到了最大值4095(参考电压接的是3.3v),即使电压再升高,比如达到3.2V,采集的电压的数字量始终是4095(12位的ADC),当时想当然的认为是器件的非线性问题,但是官方给出的数据是转换误差为:±1LSB,当时就一直怀疑芯片给的数据有问题。为了验证是否是非线性问题,于是就自己做测试,采集到的数据如图2所示。2图2ADC0测试曲线从图2中看到器件在0~3V左右的时候采集的数据线性是非常好的,只是在达到3V以后数据始终是4095。这到底是什么问题呢,当时由于时间紧,没有仔细的读数据手册,只是在程序中把参考电压的值改为3.1V(测试的时候3.1V达到极限),这样程序处理也是没有问题的。现在又要从新设计这个板子,由于时间比较充裕,自己就发誓一定要找到原因。首先排除的是器件的非线性问题,这个从图2中就已经证实了。那么是数据手册给的数据有问题么?虽然有这个怀疑,但是想来数据手册给的数据应该是没问题的,那么估计是没有仔细了解数据手册的内容,于是乎就仔细的研读了数据手册。在一个叫电压基准的电气特性的表格中找到了答案,如图3所示。图3电压基准的电气特性从图3中看到外部基准电压的范围为1~AV+-0.3V,这里的AV+为3.3V,也就是说外部输入的参考电压必须比输入给ADC的电源电压小0.3V。这确实让我感到欣喜与震惊。欣喜的是找到了问题,震惊的是以前用过的ADC参考电压和3电源电压一般都是相同的(也可能是自己见识少了吧,呵呵)。找到问题后,解决起来就简单了。在单片机外部设计一个小于3.1V的参考电压电路就行了。其实设计参考电压一般有两种方案,采用专用稳压IC和用稳压管设计稳压电路。当时在网上找来找去没找到3.1V和3.0V的稳压IC,没办法,就用稳压管设计吧,由于以前用过TL431,设计起来也蛮方便的,精度的话普通的应用还是可以满足的。0.1uFC134.7uF/16VC19213PUTQ12KR172KR1810KR195VVREFDVREF0VREF1123Header3P7123Header3P8123Header3P6VREF图4TL431设计图图4电路中设计了三个接线柱,主要是为了参考电压也可以选择芯片内部产生的2.4V的电压。具体参数设计如下:设计的输出稳压电压为3.0V,那么电阻R17上的压降为2V,查询数据手册,TL431工作的最大需要电流为1mA,最小电流为0.4mA,那么R17的阻值范围为2K~5K,实际电路中R18、R19以及芯片还需要一定的电流,最后确定的R17的值还需要修正;先来看看R18,R19的设计,由于R19和R18的压降是确定的(R19为2.5V,R18为0.5V),为了使电路耗电最小,电阻的值应该越大越好,但是电阻越大越容易受到干扰,这里取R19的值为10K,那么R18的值就可计算得到为2K,这时候R18和R19消耗的电流为0.25mA;芯片的电流官方给的数据是1uA,所以这个电流可以忽略,那么现在可以得到该稳压电路需要的提供的电流范围为0.65mA~1.25mA,那么R17的取值范围为1.6K~3K,电路中取的值为2K。2、C8051F020单片机IO口深入分析C8051F020有八个IO端口,每个端口有八位,可分为两组:低四个端口P0~P34和高四个端口P4~P7。八个端口的结构都是一样的,不同之处为:高端口的输出形式是统一设定的,由P74OUT寄存器统一配置。当P74OUT配置为0xFF时,为推挽输出形式;当P74OUT配置为0x00时,为漏极开路输出。而且高端口不能位寻址,这个特点给编程带来了很多不便,但是通过电路的设计是可以克服的,下面会具体谈到。低端口则由相对应的PXMDOUT(X的值为0、1、2、3),而且可以单独配置端口的每一个位的输出形式。低端口是可以位寻址的。端口的电路框图如图5所示。图5I/O单元功能框图如图5所示的电路结构框图中,配置为推挽输出时,当端口输出为“1”时,MOS管1打开,端口引脚电压为VDD;当端口输出为“0”时,MOS管1关闭,MOS管2打开,端口引脚输出为DGND。配置为漏极开路时,当端口输出为“1”时,MOS管1和MOS管2关闭,端口引脚输出为高阻态;当端口输出为“0”时,端口引脚输出为DGND。不管端口配置为什么输出形式,只要读取端口寄存器,都将返回端口的电平值。但是,当配置为推挽输出时,引脚端口电压是确定的“1”或“0”,如果外围芯片有输入信号,那么端口引脚的电平是不会改变的,就不能实现端口输入功能了。要实现输入功能,那么应按照如下的步骤进行:①、配置端口为漏极开路输出方式;②、向端口数据寄存器写“1”;经过上面的配置,I/O端口就配置为数据输入方式。在编程的时候如果一个I/O口既要用于数据输出也要读入数据,那么在数据输出的时候就要配置端口为推挽输出,在读入数据的时候就要按照上面的步骤配置端口为数据输入方式。这种过程显得很麻烦,有没有更简单的配置方法呢?这时联想到MCS-51单片机5P1口的结构如图6所示。P1口在读入数据的时候应先向端口写“1”,才能读数据,这里的原理就是,向数据端口寄存器写“1”,就断开晶体管VT,就可实现数据输入功能。图6MCS-51单片机P1口电路结构图图6所示的电路中,之所以能比较简单的在输出与输入直接切换,主要就是利用了芯片内部的上拉电阻。受到这个启发,在C8051F020中同样可以实现这个功能。其实实现这个功能很简单,将IO端口配置为漏极开路输出形式,在芯片引脚上外接一个10K的上拉电阻即可。通过这种改进,单片机在读入数据的时候只需要先向端口数据寄存器写“1”,然后读取数据就可以了。在设计上拉电阻的时候并不是每个IO口都外接了上拉电阻,这是因为低端口的IO引脚和芯片外设引脚是公用的,比如串口占用P0.0和P0.1,如果将低端口也设计上拉电阻的话,将会影响芯片外设的工作,所以在设计的时候只将高端口设计了上拉电阻。将高端口设计了上拉电阻也是考虑到和5V芯片的链接。有时候和单片机相连接的芯片电平为5V,由于C8051F020端口耐5V的电压,那么将上拉电阻的电源接5V就可以直接和5V芯片进行连接,就不需要电平转换芯片了。电路中P4和P5的上拉电阻电源固定接5V(LCD的接口),P6和P7可以用短路冒选择5V或3.3V。3、LCD接口电路设计电路板上设计了LCD1602和LCD12864的接口,P5口作为数据口(公共数据口),P4口为控制口。具体电路如图7所示。在上面已经说过,高端口P4~P7的输出形式是统一设定的,然而对于数据端口P5是既要输出数据也要读取数据,那么在端口切换的时候不能影响其它端口,这时候外接的10K的上拉电阻就起到很关键的作用。具体的电路原理就不讨论了,主要来说明下端口操作。6GND1VCC2VO3RS4RW5EN6DB07DB18DB29DB310DB411DB512DB613DB714PSB15NC16RST17VOUT18A19K20MHDR1X20JP2GND5VVOP40P41P42P50P51P52P53P54P55P56P57P43VOUT5VGNDVOUTGNDVOP441210uFC2310KR105V100R9GND1VCC2VO3RS4RW5EN6DB07DB18DB29DB310DB411DB512DB613DB714A15K16LCD1602JP3GND5V5VGND100R20GND5VP50P51P52P53P54P55P56P57P45P46P475V5VP40P41P42P43P44P45P46P47P50P51P52P53P54P55P56P5712345678910kX8R2212345678910kX8R2410KRPot1R210KR21图7LCD接口电路LCD12864的接口定义程序清单:#defineDBP5//P5口,作为数据总线#defineDBmdoutP74OUT//输出方式控制寄存器#defineSET_RSP4=P4|0x01//RS---P40#defineCLR_RSP4=P4&0xFE#defineSET_RWP4=P4|0x02//RW---P41#defineCLR_RWP4=P4&0xFD#defineSET_ENP4=P4|0x04//EN---P42#defineCLR_ENP4=P4&0xFBLCD1602的接口定义程序清单:#defineLCD1602_DATAP5//定义lcd数据端口---P5#defineLCD1602_DATA_MODP74OUT//定义lcd数据端口数据输入输出配置/**********RS---P45************/#defineSET1602_RSP4=P4|0x20//RS=1#defineCLR1602_RSP4=P4&0xDF//RS=0/**********RW---P46************/#defineSET1602_RWP4=P4|0x40//RW=1#defineCLR1602_RWP4=P4&0xBF//RW=0/**********EN---P47************/#defineSET1602_ENP4=P4|0x80//EN=17#defineCLR1602_ENP4=P4&0x7F//EN=0上面的接口定义了端口的操作,比如SET_RS表示将P4.0拉高,CLR_RS将P4.0拉低,这种操作将不影响其它位的端口电平。4、键盘接口电路设计其实矩阵键盘的硬件设计很简单,但是设计的时候还是要考虑单片机IO端口的具体电路,特别是对具有推挽输出能力的IO口。对于C8051F020单片机矩阵键盘的设计需要外接上拉电阻和限流电阻。具体电路如图8所示。12345678MHDR1X8JP5P20P21P22P23P24P25P26P2710KR610KR710KR810KR11100R12100R13100R14100R15VCCkey0key1key2key3key0key1key2key3图8矩阵键盘电路矩阵键盘最主要的还是键盘扫描的程序的设计。由于按键按下的时候会有抖动,如何消除抖动对按键识别的影响是值得深入研究的。

1 / 7
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功