"); //-->
**********************
51的I/O口:
1:准双向口
2:单独控制I/O口输出的置位或清零(位方式CLR,SETB)
3:复位后上拉成高电平,可以用做输入
4:带载能很弱(未考虑变异产品)
P1等直接控制
**********************
PIC的I/O口:
1:真正的双向口
2:单独控制I/O口输出的置位或清零(位方式BSF,BCF)
3:所有I/O口在复位后默认为输入
4:带载能力强
由2个寄存器控制(忽略其他功能)以PORTC为例
TRISC:I/O口方向控制寄存器 输入为1,输出为0
PORTC:I/O引脚值寄存器
***********************
ARM7的I/O口:
1:真正的双向口
2:单独控制I/O口输出的置位或清零(其实还是字方式)
3:所有I/O口在复位后默认为输入
4:带载能力不强
由4个寄存器控制(忽略其他功能)
IOPIN:IO引脚值寄存器,引脚的当前状态可从该寄存器中读出
(不管I/O口是输入还是输出)其实PIC的也一样
IOSET:I/O输出置位寄存器,写入1输出高电平,写入0无效
好象不存在读-修改-写的问题,这个比较特殊
IOCLR:I/O输出清0寄存器,作用同上
IODIR:I/O口方向控制寄存器(同PIC的TRISC等)
输入为0,输出为1(同PIC的相反)
注:IOSET与IOCLR是一对
***************
***************
I/O口优缺点(个人愚见):
1:输出1或0
51: SETB P1.0
PIC:BSF PORTC,0
或
BCF PORTC,0
要注意其他端口的情况(读-修改-写的问题)
ARM:如要求在P0.0输出1,只要IO0SET=0x00000001即可
不用担心其他引脚的情况
2:取反(例对第0位)
51: 可以用异或也可用取反(因为有布尔取反指令)
PIC:用异或 PORTB="PORTB"^0x01;
ARM:只能分开搞了
if(IO0SET&0x00000001==0)
{IO0SET=0x00000001;}
else
{IO0CLR=0x00000001;}
3:同时改变P0口的某几位为1,某几位为0
如原P0=0x00000055,现要求P0=0x000000aa
51: P0=0xaa;
PIC:PORTC=0xaa;
ARM:比较麻烦了
写法1:IO0SET=0x0000aaaa
IO0CLR=0xffff5555
不但要分2次写,而且还出现了中间状态
这种情况在51和PIC中是不会出现的
4:读I/O口状态
51: 必须先对端口写1(SETB P1.0)
然后再判断是1还是0
PIC:先设为输入,然后判断
ARM:先设为输入,然后判断
4:驱动能力
51最低,PIC最强
例:在I/O口与地间接一个100欧的电阻
I/O口输出1,然后读此I/O口,只有PIC可读回高电平
如果ARM读的是IOSET则读到高电平,如果读IOPIN则读到
低电平,输出和实际电平不符
专栏文章内容及配图由作者撰写发布,仅供工程师学习之用,如有侵权或者其他违规问题,请联系本站处理。 联系我们
相关推荐
研华中国嵌入式市场策略及业务方向
如何选用湿度传感器
中国软件第二春
遥控玩具汽车电路(RCMlA/RCMlB构成收发模块)
[本站特供]高带宽 I/O 总线解决方案支持新一代嵌入式系统
物品防遗失报警器(RCMlA/RCMlB构成收发模块)
pic12c5xx
[本站独家版权]技术白皮书《Ethernet Over SONET》
后PC时代(智能地球时代)研华之全球战略
使用LTspice仿真来解释电压依赖性影响
ADI GMSL技术如何赋能 Connect Tech攻克工业机器人视觉难题?
立足前沿产品技术,村田携多款产品亮相2025光博会
pci21
PIC12C67X
PLC_training_Manual
PLC_ST
数字化的线性稳压器
2011研华嵌入式设计论坛——北京站 媒体提问
真双极性输入、全差分输出 ADC 驱动器设计
Allegro A89301:超静、无编码、FOC 无传感器 BLDC 电机控制器
应对智能边缘的软件复杂性
嵌入式软体趋势 迎接未来无限可能
如何设计低功耗、高精度自行车功率计?
电话无线振铃电路(RCMlA/RCMlB构成收发模块)
如何使用工业级串行数字输入来设计具有并行接口的数字输入模块
遥控语音门铃(RCMlA/RCMlB构成收发模块)
vxworks tcp/ip传输效率?
由RCM1A/RCM1B组成的无线电遥控照明开关
如何利用低噪声、高速ADC增强飞行时间质谱仪性能?
嵌入式核心事业群使命及愿景