第一篇:IO企业文化
IO的企业文化是什么:
【企业文化】
——企业定位
· 四个人每个人找十个标的,各自去实验,标的领域的选取根据各自偏好和擅长。公司注册成功后去寻找一个信托平台,费用为一个点的回报率。财务方面不用管信托平台会代为管理,并且将财务报表予以公示
·托管公司 代理大陆客户进行港股操盘
——使命
·为客户利益而努力进取
·提高每位员工的公司荣誉感,自豪感。
·像对待技术创新一样致力于成本创新。
·让更多的人获得更好,更稳健的服务
·充分调动员工主观能动性,主动完成好任务。
——核心价值观
· 成就客户—我们致力于每位客户的满意和成功。
· 尊重员工—我们致力于尊重每位员工的要求以及情感。
· 诚信正直—我们秉持信任、诚实和富有责任感,无论是对内部还是外部。· 追求卓越—我们倡导每天学习一点,开拓视野,每天争做最佳最好。
——愿景
IO基于对行业的深厚理解,以及对优秀的管理和文化基因的传承,顺应时代的趋势,争取成为时代的领头羊,在全球范围内打造高品质的产品,让消费者充分享受卓越的IO服务。IO致力于发展成为一个自由民主的公司,一个可以自由讨论,积极发出自己声音的的公司,一个稳健提升的企业,为客户、股东、员工和社会创造更多的价值,让世界因IO更美好。
第二篇:IO总结
输入和输出
IO分类输入 和 输出 流节点流 和 处理流字节流(byte)和 字符流(char)
输入流
字节流
抽象基类 InputStream
读取文件的 FileInputStream
缓冲流 BufferedInputStream
读取各种java基本数据类型的 DataInputStream
读取对象 ObjectInputStream
字符流
抽象基类 Reader
读取文本文件的 FileReader
实现缓冲的 BufferedRead 读取一个行 readLine();newline()输出流
字节流
抽象基类 OutputStream
写文件的 FileOutputStream
缓冲输出流 BufferedOutputStream
写各种java基本数据类型的 DataOutputStream
写对象的 ObjectOutputStreamwriteObject(Object obj);字符流
对象的序列化
一个对象所属的类如果实现java.io.Serializable
则这个类是序列化类,此类创建的对象就是序列化对象 序列化对象可以通过文件流在文件中进行读和写。
第三篇:关于磁盘IO的总结
磁盘IO的总结:
1.IO读写:磁盘是用来存取数据的。磁盘的存数据对应IO的写操作,磁盘的取数据对应IO的读操作。
2.随机访问(Random Access)与连续访问(Sequential Access):
随机访问指的是本次IO所给出的扇区地址和上次IO给出扇区地址相差比较大,这样的话磁头在两次IO操作之间需要做比较大的移动动作才能重新开始读/写数据。
同理,连续访问就是两次给出的扇区地址相近,磁头就能很快的进行操作,这样的多个IO操作就是连续访问。
3.顺序IO模式(Queue Mode)/并发IO模式(BurstMode):
原理:磁盘控制器可能会一次对磁盘组发出一连串的IO命令,如果磁盘组一次只能执行一个IO命令时称为顺序IO;当磁盘组能同时执行多个IO命令时,称为并发IO。
并发IO只能发生在由多个磁盘组成的磁盘组上,单块磁盘只能一次处理一个IO命令。
4.IOPS,IO系统每秒所执行IO操作的次数
5.一次完整的磁盘IO操作:
当控制器对磁盘发出一个IO操作命令的时候,磁盘的驱动臂(ActuatorArm)带读写磁头(Head)离开着陆区(LandingZone,位于内圈没有数据的区域),移动到要操作的初始数据块所在的磁道(Track)的正上方,这个过程被称为寻址(Seeking),对应消耗的时间被称为寻址时间(SeekTime);但是找到对应磁道还不能马上读取数据,这时候磁头要等到磁盘盘片(Platter)旋转到初始数据块所在的扇区(Sector)落在读写磁头正上方的之后才能开始读取数据,在这个等待盘片旋转到可操作扇区的过程中消耗的时间称为旋转延时(RotationalDelay);接下来就随着盘片的旋转,磁头不断的读/写相应的数据块,直到完成这次IO所需要操作的全部数据,这个过程称为数据传送(DataTransfer),对应的时间称为传送时间(TransferTime)。完成这三个步骤之后一次IO操作也就完成了。
6.传输速度(Transfer Rate)/吞吐率(Throughput):是磁盘在实际使用的时候从磁盘系统总线上流过的数据量。
7.IO响应时间也被称为IO延时(IOLatency),IO响应时间就是从操作系统内核发出的一个读或者写的IO命令到操作系统内核接收到IO回应的时间,注意不要和单个IO时间混淆了,单个IO时间仅仅指的是IO操作在磁盘内部处理的时间,而IO响应时间还要包括IO操作在IO等待队列中所花费的等待时间。
8.dd命令 dd:硬拷贝命令(直接在硬盘上进行数据拷贝,没有经过内存,二进制之间的协调复制)
bs=BYTES:一次读取和写入的字节数(单元大小)
count=BLOCKS:单元数量
if=FILE:源文件
of=FILE:目标文件
测试磁盘的写入:
[root@localhost ~]# /usr/bin/time dd if=/dev/zero of=/tmp/hx bs=4k count=10240 10240+0 records in 10240+0 records out 41943040 bytes(42 MB)copied, 0.0577 s, 727 MB/s 0.00user 0.05system 0:00.05elapsed 96%CPU(0avgtext+0avgdata 832maxresident)k 0inputs+81920outputs(0major+241minor)pagefaults 0swaps
测试磁盘的读取:
[root@localhost ~]# /usr/bin/time dd if=/tmp/hx of=/dev/null bs=4k 10240+0 records in 10240+0 records out 41943040 bytes(42 MB)copied, 0.014955 s, 2.8 GB/s 0.00user 0.01system 0:00.01elapsed 86%CPU(0avgtext+0avgdata 828maxresident)k 0inputs+0outputs(0major+240minor)pagefaults 0swaps
读写同时测试
[root@localhost ~]# /usr/bin/time dd if=/tmp/foo of=/tmp/foo2 bs=4k 10240+0 records in 10240+0 records out 41943040 bytes(42 MB)copied, 0.0742246 s, 565 MB/s 0.00user 0.08system 0:00.08elapsed 97%CPU(0avgtext+0avgdata 828maxresident)k 0inputs+81952outputs(0major+240minor)pagefaults 0swaps 9.[root@localhost ~]# iostat-x Linux 2.6.32-573.el6.x86_64(localhost.localdomain)03/16/2016 _x86_64_(12 CPU)
avg-cpu: %user
%nice %system %iowait %steal
%idle
0.09
0.00
0.06
0.02
0.00
99.82
Device:
rrqm/s
wrqm/s
r/s
w/s
rsec/s
wsec/s avgrq-sz avgqu-sz
await svctm %util sda
8.30
68.47
7.61
2.27
363.21
565.82
94.05
0.05
5.32
0.40
0.39 各个性能指标的简单说明。rrqm/s 每秒进行merge的读操作数目。wrqm/s 每秒进行merge的写操作数目。r/s 每秒完成的读I/O设备次数。w/s 每秒完成的写I/O设备次数。rsec/s 每秒读扇区数。wsec/s 每秒写扇区数。rkB/s 每秒读K字节数。wkB/s 每秒写K字节数。avgrq-sz平均每次设备I/O操作的数据大小(扇区)。avgqu-sz平均I/O队列长度。await平均每次设备I/O操作的等待时间(毫秒)。svctm平均每次设备I/O操作的服务时间(毫秒)。%util 一秒中有百分之多少的时间用于I/O操作,或者说一秒中有多少时间I/O队列是非空的。
平均单次IO大小(IO Chunk Size)<=>avgrq-sz
平均IO响应时间(IO Response Time)<=>await
IOPS(IO per Second)<=> r/s + w/s
吞吐率(Throughtput)<=> rkB/s + wkB/s
10.fio是一个非常灵活的io测试工具,他可以通过多线程或进程模拟各种io操作。
fio分顺序读,随机读,顺序写,随机写,混合随机读写模式。参数:
filename: 指定文件(设备)的名称。可以通过冒号分割同时指定多个文件,如filename=/dev/sda:/dev/sdb。
directory: 设置filename的路径前缀。在后面的基准测试中,采用这种方式来指定设备。
name: 指定job的名字,在命令行中表示新启动一个job。
direct: bool类型,如果设置成true(1),表示不使用io buffer。
ioengine: I/O引擎,现在fio支持19种ioengine。默认值是sync同步阻塞I/O,libaio是Linux的native异步I/O。
iodepth: 如果ioengine采用异步方式,该参数表示一批提交保持的io单元数。
rw: I/O模式,随机读写,顺序读写等等。
bs: I/O block大小,默认是4k。
size: 指定job处理的文件的大小。
numjobs: 指定job的克隆数(线程)。
time_based: 如果在runtime指定的时间还没到时文件就被读写完成,将继续重复知道runtime时间结束。
runtime: 指定在多少秒后停止进程。如果未指定该参数,fio将执行至指定的文件读写完全完成。
group_reporting: 当同时指定了numjobs了时,输出结果按组显示。
例: #顺序读
fio-filename=/dev/sda-direct=1-iodepth 1-thread-rw=read-ioengine=psync-bs=16k-size=200G-numjobs=30-runtime=1000-group_reporting-name=mytest
#顺序写
fio-filename=/dev/sda-direct=1-iodepth 1-thread-rw=write-ioengine=psync-bs=16k-size=200G-numjobs=30-runtime=1000-group_reporting-name=mytest
#随机读
fio-filename=/dev/sda-direct=1-iodepth 1-thread-rw=randread-ioengine=psync-bs=16k-size=200G-numjobs=30-runtime=1000-group_reporting-name=mytest #随机写
fio-filename=/dev/sda-direct=1-iodepth 1-thread-rw=randwrite-ioengine=psync-bs=16k-size=200G-numjobs=30-runtime=1000-group_reporting-name=mytest
#混合随机读写
fio-filename=/dev/sda-direct=1-iodepth 1-thread-rw=randrw-rwmixread=70-ioengine=psync-bs=16k-size=200G-numjobs=30-runtime=100-group_reporting-name=mytest-ioscheduler=noop
补充:
上次测试的三块固态硬盘IO:
0.55到2K的小文件
[root@localhost 1]# fio-filename=/data/B/1/2-direct=1-iodepth 1-thread-rw=randrw-rwmixread=80-ioengine=psync-bsrange=512-2048-size=4G-numjobs=5-group_reporting-name=test-runtime=1200 test:(g=0): rw=randrw, bs=512-2K/512-2K, ioengine=psync, iodepth=1...test:(g=0): rw=randrw, bs=512-2K/512-2K, ioengine=psync, iodepth=1 fio 2.0.7 Starting 5 threads test: Laying out IO file(s)(1 file(s)/ 4096MB)Jobs: 5(f=5): [mmmmm] [100.0% done] [8319K/2060K /s] [9870 /2498 iops] [eta 00m:00s] test:(groupid=0, jobs=5): err= 0: pid=29601
read : io=11152MB, bw=9515.1KB/s, iops=9183 , runt=1200079msec
clat(usec): min=0 , max=1000.3K, avg=468.07, stdev=1981.20
lat(usec): min=0 , max=1000.3K, avg=468.42, stdev=1981.20
clat percentiles(usec):
| 1.00th=[ 189], 5.00th=[ 211], 10.00th=[ 225], 20.00th=[ 249],| 30.00th=[ 274], 40.00th=[ 294], 50.00th=[ 318], 60.00th=[ 350],| 70.00th=[ 382], 80.00th=[ 430], 90.00th=[ 516], 95.00th=[ 596],| 99.00th=[ 844], 99.50th=[ 5088], 99.90th=[32128], 99.95th=[42240],| 99.99th=[58624]
bw(KB/s): min= 159, max= 6607, per=20.03%, avg=1905.53, stdev=328.56
write: io=2789.3MB, bw=2379.2KB/s, iops=2297 , runt=1200079msec
clat(usec): min=0 , max=1000.2K, avg=283.77, stdev=1432.42
lat(usec): min=0 , max=1000.2K, avg=284.21, stdev=1432.42
clat percentiles(usec):
| 1.00th=[
89], 5.00th=[ 110], 10.00th=[ 137], 20.00th=[ 153],| 30.00th=[ 165], 40.00th=[ 175], 50.00th=[ 189], 60.00th=[ 207],| 70.00th=[ 239], 80.00th=[ 302], 90.00th=[ 386], 95.00th=[ 458],| 99.00th=[ 660], 99.50th=[ 1976], 99.90th=[20352], 99.95th=[27520],| 99.99th=[43264]
bw(KB/s): min=
60, max= 1769, per=20.03%, avg=476.50, stdev=87.73
lat(usec): 2=0.08%, 100=0.51%, 250=29.98%, 500=59.64%, 750=8.40%
lat(usec): 1000=0.63%
lat(msec): 2=0.10%, 4=0.11%, 10=0.19%, 20=0.08%, 50=0.23%
lat(msec): 100=0.03%, 250=0.01%, 500=0.01%, 1000=0.01%, 2000=0.01%
cpu
: usr=6.13%, sys=37.70%, ctx=101478124, majf=0, minf=24056
IO depths
: 1=100.0%, 2=0.0%, 4=0.0%, 8=0.0%, 16=0.0%, 32=0.0%, >=64=0.0%
submit
: 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%
complete : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%
issued
: total=r=11021114/w=2757348/d=0, short=r=0/w=0/d=0
Run status group 0(all jobs):
READ: io=11152MB, aggrb=9515KB/s, minb=9515KB/s, maxb=9515KB/s, mint=1200079msec, maxt=1200079msec
WRITE: io=2789.3MB, aggrb=2379KB/s, minb=2379KB/s, maxb=2379KB/s, mint=1200079msec, maxt=1200079msec
Disk stats(read/write):
sda: ios=11020977/2758079, merge=0/69, ticks=4004421/515149, in_queue=4514919, util=98.00%
10M的大文件
[root@localhost 1]# fio-filename=/data/B/1/10-direct=1-iodepth 1-thread-rw=randrw-rwmixread=80-ioengine=psync-bs=10M-size=10G-numjobs=10
-group_reporting-name=test-runtime=1800 test:(g=0): rw=randrw, bs=10M-10M/10M-10M, ioengine=psync, iodepth=1...test:(g=0): rw=randrw, bs=10M-10M/10M-10M, ioengine=psync, iodepth=1 fio 2.0.7 Starting 10 threads test: Laying out IO file(s)(1 file(s)/ 10240MB)Jobs: 4(f=4): [_m___mm_m_] [99.0% done] [220.2M/104.9M /s] [21 /10 iops] [eta 00m:03s]]
test:(groupid=0, jobs=10): err= 0: pid=29618
read : io=81910MB, bw=270613KB/s, iops=26 , runt=309948msec
clat(msec): min=15 , max=1006 , avg=334.89, stdev=102.97
lat(msec): min=15 , max=1006 , avg=334.89, stdev=102.97
clat percentiles(msec):
| 1.00th=[ 123], 5.00th=[ 157], 10.00th=[ 200], 20.00th=[ 249],| 30.00th=[ 289], 40.00th=[ 318], 50.00th=[ 343], 60.00th=[ 363],| 70.00th=[ 383], 80.00th=[ 412], 90.00th=[ 449], 95.00th=[ 482],| 99.00th=[ 578], 99.50th=[ 766], 99.90th=[ 963], 99.95th=[ 979],| 99.99th=[ 1004]
bw(KB/s): min= 7076, max=64912, per=10.25%, avg=27750.67, stdev=7359.31
write: io=20490MB, bw=67694KB/s, iops=6 , runt=309948msec
clat(msec): min=24 , max=752 , avg=161.82, stdev=105.86
lat(msec): min=25 , max=753 , avg=162.61, stdev=105.84
clat percentiles(msec):
| 1.00th=[
27], 5.00th=[
33], 10.00th=[
34], 20.00th=[
51],| 30.00th=[
54], 40.00th=[ 103], 50.00th=[ 178], 60.00th=[ 206],| 70.00th=[ 233], 80.00th=[ 260], 90.00th=[ 297], 95.00th=[ 326],| 99.00th=[ 392], 99.50th=[ 416], 99.90th=[ 644], 99.95th=[ 725],| 99.99th=[ 750]
bw(KB/s): min= 7398, max=82447, per=29.87%, avg=20218.16, stdev=9671.17
lat(msec): 20=0.01%, 50=3.69%, 100=4.55%, 250=23.75%, 500=65.39%
lat(msec): 750=2.18%, 1000=0.42%, 2000=0.01%
cpu
: usr=0.61%, sys=6.94%, ctx=600392, majf=0, minf=12529
IO depths
: 1=100.0%, 2=0.0%, 4=0.0%, 8=0.0%, 16=0.0%, 32=0.0%, >=64=0.0%
submit
: 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%
complete : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%
issued
: total=r=8191/w=2049/d=0, short=r=0/w=0/d=0
Run status group 0(all jobs):
READ: io=81910MB, aggrb=270612KB/s, minb=270612KB/s, maxb=270612KB/s, mint=309948msec, maxt=309948msec
WRITE: io=20490MB, aggrb=67694KB/s, minb=67694KB/s, maxb=67694KB/s, mint=309948msec, maxt=309948msec
Disk stats(read/write):
sda: ios=261982/65792, merge=0/96, ticks=40438645/1040942, in_queue=41479880, util=100.00%
第四篇:C8051f020 IO配置小结
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端口每一位的输出状态。
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 |= 0xff;/*使能P4~P7推挽输出*/ EMI0CF |= 0x2c;/*EMIF工作在地址/数据复用方式,只用外部存储器,ALE高/低脉宽占1个SYSCLK周期*/ EMI0TC |= 0x6c;/*地址建立/保持时间占0个SYSCLK周期,/WR和/RD占12个SYSCLK周期*/ P3MDOUT |= 0xdf;/*使能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 00000000 位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)被交叉开关跳过它们的输出 状态由端口锁存器和外部存储器接口决定 如果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 信号),使用漏极开路方式可以防止不同器件之间的冲突。(推挽方式在有些书中称为推拉方式)
转载-关于开漏、推挽方式2008-01-27 17:53漏级开路即高阻状态,适用于输入/输出,其可独立输入/输出低电平和高阻状态,若需要产生高电平,则需使用外部上拉电阻或使用如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型管,但内部逻辑提供互补输出,以上的说明仅仅为了说明推挽的原理,为了更深的理解可以参考功率放大电路。
推挽方式可完全独立产生高低电平,推挽方式为低阻,这样,才能保证口线上不分走电压或分走极小的电压(可忽略),保证输出与电源相同的高电平,推挽适用于输出而不适用于输入,因为若对推挽(低阻)加高电平后,I=U/R,I会很大,将造成口的烧毁。
对与C8051F的很多型号片子,将I/O口设置为推挽方式的做法为:PnMDOUT=0xff,Pn=0x00,这样设置I/O口为推挽,并输出低电平(可降低功耗)将I/O口设置为漏开方式的做法为:PnMDOUT=0x00,Pn=0x11,这样设置I/O口为漏开。
推挽输出0的时候和开漏特性一样,就是1的时候可以当作直接接VCC.推挽输出的驱动能力相当强,因为输出1就等于接到了VCC.而同时推挽输出的IO也需要注意不要直接接到地,否则一旦输出1,就等于VCC通过内部的场效应管直接到地了,这时候IO端发热就很大,时间长就就拜拜了.你看到DX32实验板上,按键部分都是串了个300欧才到地的,就是为了避免IO误操作,使这些输入变成推挽输出1而做的保护.以此为设计依据,一般情况下,所有的IO都尽量避免直接到地,即使这个IO你是打算用来做输入的.
第五篇:并行IO口电路扩展几个问题(本站推荐)
并行I/O口电路扩展几个问题,你会吗?
7-1 为什么当系统接有外部程序存贮器时,P2口不能再作I/O口使用了?
7-2 8255有几种工作方式?试说明其每种工作方式的意义?
7-3 8155扩展器有几部分组成?试说明其作用?
7-4 试设计一个8031单片机系统,系统至少有120条外部I/O口线和4KEPROM,并写出其地址。
7-5 在单片机中控制I/O操作有几种方法?试说明各种方法的特点。
7-6 三态缓冲器为什么能实现数据隔离?
7-7 MCS-51单片机采用哪一种I/O编址方式?有哪些特点可以证明?
7-8 “在MCS-51中,由于I/O与RAM是统一编址的,因此要把外部RAM的64K地址空间拨出一部分给扩展I/O口使用”。这种说法对吗?
7-9 如何在一个4*4的键盘中使用扫描进行被按键的识别?
7-10 写出8255A方式0可能出现的16种控制字及相对应的各口输入/输出状态。7-11 使用定时器中断方法设计一个秒闪电路,让LED显示器每秒有400ms点亮。假定晶
振频率为6MHz,画电路连接图并编写程序。
7-12 单片机用内部定时方法产生频率为100kHz等宽矩形波,假定单片机的晶振频率为
12MHz,请编程实现。
7-13有晶振频率为6MHz的MCS-51单片机,使用定时器0以定时方法在P1.0输出周期为
400us,占空比为10:1的矩形脉冲,以定时工作方式2编程实现。
7-14以定时器/计数器1进行外部事件计数。每计数1000个脉冲后,定时器/计数器1转为定时工作方式,定时10ms后,又转为计数方式,如此循环不止。假定单片机晶振频率为6MHz,请使用工作方式1编程实现。
7-15以中断方法设计单片机秒,分脉冲发生器。假定P1.0每秒钟产生一个机器周期的正脉冲,P1.1每分钟产生一个周期的正脉冲。
7-16一个定时器的定时时间有限,如何实现两个定时器的串行定时,以满足较长定时时间的要求?
7-17使用一个定时器,如何通过软硬件结合的方法,实现较长时间的定时?
7-18假定单片机晶振频率为6MHz,要求每隔100ms,从外部RAM以data开始的数据区传送
一个数据到P1口输出,共传送100个数据。要求以两个定时器串行定时方法实现。7-19每隔1秒钟读一次P1.0,如果所读的状态为“1”,内部RAM10H单元加1,如果所读的状态为“0”,则内部RAM 11H单元加1,假定单片机晶振频率为12MHz,请以软硬件结合方法定时实现之。