本帖最后由 tear086 于 2010-12-27 12:11 编辑
21:53:44
农民进城第一课《GPIO之硬件设计进阶》
21:54:15
学单片机从何学起呢???
21:55:02
至少知道与,或,非,异或
21:56:03
这四种可谓“万物之根”
21:57:41
学习单片机不懂这些行吗???
21:57:47
肯定不行
21:58:22
还要知道二极管,三极管,电阻,电容及电感
21:58:53
若知道了这些,就可以上阵学习单片机了
21:59:09
菜鸟进阶只需今晚时分
22:02:03
这就是TTL的输入级
22:04:05
这就是我们今晚的要点之所在
22:04:57
为什么单片机可以控制LED亮和知道键盘有输入呢???
22:05:20
如何设计才是合理的呢???
22:09:27
为什么键盘一般需要拉低有效呢???输出也要低电平输出呢?
即为什么都是“负逻辑”设计呢???
22:11:28
假若键盘采用正逻辑设计会出现什么问题呢?为什么需要将设计者拉出去枪毙呢?
22:12:45
纵观天下,只有51的复位是正逻辑设计,为何不被枪毙呢?
22:13:49
51不是很成功吗?为何没人再敢用正逻辑复位?
22:14:30
农民虽在乡村,足不出门,但这些还是有思考的
22:15:13
谁给俺再举出一个正逻辑复位的MCU/ARM/DSP/CPLD/FPGA
22:16:48
因为51的复位采用了施密特触发电路,即高门槛电路
22:17:24
此电路必然成本增加,故没人跟进
22:18:23
一般认为IO悬空为无关或高电平
22:19:34
那么试问压下键有效为高,那么断开不也为高吗?
22:20:25
时间的关系,一般认为对如TTL这样的输入级应该采用负逻辑设计
22:20:56
那么为什么输出也要用负逻辑呢?
22:22:01
可以看到TTL的输出级(俗称“图腾柱”)
22:22:38
它的R4就是一个限流电阻
22:23:56
假若无此电阻,假若(不可能的)T3,T4同时导通会是怎样???
单片机玩家(373884636) 22:24:45
那VCC对GND就短路了呀。
22:24:46
所以任何IO的输出设计必须有此电阻,即内部动态电阻
22:25:52
根据其大小称为“弱上拉”或"大电流输出"
22:26:43
故IO的低电平一般要比高电平的输出都大些
22:26:54
几乎不可能一样
22:27:24
所以,一般输出也应该采用“负逻辑”设计
单片机玩家(373884636) 22:27:24
我知道51的灌电流要远远大于拉电流
22:27:48
对,有灌和拉之分
22:28:48
现在就进入MCU的IO
22:29:12
上51的IO图来
22:31:22
51的生存周期长久的一个重要原因就是它IO设计的简单和独到
22:32:15
大家应该用过近代的IO吧,如PIC,AVR,。。。。
22:33:20
这次芯唐跟进了,它太聪明了
D.H(46915379) 22:33:43
读写方向控制。
D.H(46915379) 22:33:50
上拉下拉控制。
D.H(46915379) 22:33:59
驱动电流控制。
22:34:00
对,用读写方向控制
22:34:28
刚说的是真双向IO
22:37:28
22:38:09
这种电路可以做到IO永远不会烧毁的自检程序
22:39:36
当外部为低电平即负逻辑输入时,由于是内部上拉,电流很小
22:40:48
反之,当IO输出低即?V2对地时,外部是不敢接VCC或高电压的
22:41:51
但是,由于它是准双向IO,即输出低时,还能检测管脚的电平
22:42:16
提问,此时会烧毁吗?
世风依人(181323226) 22:42:57
烧毁要时间,看muc反应时间了
22:43:48
对
22:46:18
此时读IO为“1”
22:47:45
当你读为1时,迅速将IO切换为输入或输出1,则IO无忧也~~~
22:48:03
为什么读出为“1”,何也?
datouyuan<datouyuan123@qq.com> 22:48:07
这个口的输出功能没有了。
输入功能还有用。
V2烧断了。
22:48:52
不会烧,假若你处理迅速
22:50:29
这个问题实际归结为三极管的EC间施加了VCC
22:51:41
EC实际是有内阻的,在短时间会产生大电流,温度迅速升高
22:52:30
当处理迅速,则IO无事也
22:53:08
这个问题结束,这是俺从85年就开始的自检程序
22:54:26
都有内阻的,就是大小问题
22:55:12
由于VCC施加在IO上,所以读IO就是读到VCC,所以读为“1”
22:55:26
因为快
22:55:53
输出后立即读一次
世风依人(181323226) 22:55:58
大概时间多少?
22:56:14
就2条指令的时间
datouyuan<datouyuan123@qq.com> 22:56:25
我理解了
在准双向口,采用这种方式可以识别io口是否有错误。
HotCortex(106821270) 22:56:48
IO自身安全性好
22:56:53
晕,俺在STC上有测试程序
http://blog.21ic.com/user1/46/archives/2005/560.html
22:57:53
对,就是准双向
22:58:29
它是弱上拉,真IO俺没敢试过~~~
22:59:59
若电源加保护,则可以做到IO永不烧毁
23:00:30
而且可以检测管脚之间的短路,开路等
23:01:53
因为当年的制版技术的落后,过孔断,管脚复连等,俺才琢磨了此招
23:03:04
俺给人表演:用一把铁砂洒在51管脚上,还有用锯条弹钢琴
23:03:36
任意短路,拿个VCC,GND乱桶
23:04:27
程序就是俺刚给的链接,此非典已经25年了
23:06:03
M0的IO如何?
23:06:47
至少有准双向IO可以自检
23:07:18
所以,今天俺就重点地讲了准双向IO
23:08:30
http://blog.21ic.com/user1/46/archives/2005/560.html
这个就是因为STC管脚被烧毁后找不到原因而编写的
23:08:49
这样俺才找到原因
23:09:18
记得STC当时在二姨这也有论坛
dcp(79505816) 23:11:07
真是佩服 一个IO也用得这么细
23:11:22
还跟VCC抢时间
23:11:27
对
23:12:26
而且不用判断就知道什么管脚错了,是短路,开路,接VCC,接GND
23:11:45
你可以看那个例程
http://blog.21ic.com/user1/46/archives/2005/560.html
23:21:20
M0的GPIO
23:22:26
它实际51的增强型
23:23:26
这就是近代的IO输出
23:23:41
俺没看它的指标
23:24:30
有些标注:
拉电流15mA
灌电流20mA
23:24:35
何也?
23:25:17
这变相地说内部是上拉电阻
23:28:17
23:28:48
它的输入为什么有2个非门,不加也一样呀??
何也?
23:29:51
整形
23:31:08
外部信号可能是杂乱的,边沿不可能笔直
23:31:43
有可能在非法的电平之间徘徊
23:32:08
假若它不是施密特就是一般的OC
23:33:19
这个电路要比51的准双向IO复杂许多
23:34:35
可以选择4个模式,这个是其一
23:35:06
这个干什么的?
23:35:40
防止竞争冲突
23:36:48
奇怪不?
23:38:06
现在讲点红杏如何操作IO
23:40:40
芯唐的M0的GPIO现在分两种
23:40:55
一种是所谓的快速IO
23:41:06
一种是普通的
23:41:17
俺想电路都是一样的
23:41:29
只是编程不一样
23:41:46
在NUC100(可能以后会改)
23:44:32
PORTs.PB.DOUT.Bits.Pin0 = 1;
23:44:54
这是 nuc100的IO输出
23:45:18
它用的是位域方式
23:45:59
既在寄存器PB.OUT把PIN0置1
23:47:04
输出级的PMOS打开
23:47:44
OUT=1,非门输出0,PMOS需要低才打开
23:48:10
故PB.OUT.Pin0=1就让PMOS输出了
23:48:34
所以,脑子里要有硬件图
23:48:53
哪怕一个IO管脚
23:49:29
可以看出PMOS和NMOS是不会同时打开的
23:49:44
NMOS需要高才打开
23:50:05
所以,学了它就知道了mos管
23:53:34
芯唐的M0的IO在两个系列及NUC100和M051都可以用 DOUT控制输出IO
23:54:01
但是大家知道位域的效率是最低的
23:54:20
而结构的偏移效率是最高的
23:55:31
因为在文字池中取出PB的首地址后,偏移是可以在指令中不浪费其他计算的
23:56:27
所以,M051有快速IO即结构偏移寻址的操作指令
23:57:05
//0x00000D22~0x00000D2E 7条指令14个字节(不推荐语句)
PORTs.PBDx[E_PORT3].Pinx[E_PIN6].Bits.DOUT = 1;
__NOP();
//0x00000D32~0x00000D35 2条指令4个字节(极力推荐语句)
PORTs.PBD3.Pin6.Regs = 0;
23:57:51
这个讲需要很多时间
23:58:14
自己先看看红杏中他们的区别
0:00:04
即快速IO是靠浪费寄存器分配的空间提高IO的速度的
普通IO是位域即节约寄存器分配空间而降低IO速度的 |