原创 51-PIC-ARM的I/O口比较

2008-4-30 10:40 2649 5 6 分类: MCU/ 嵌入式

**********************
51
I/O口:
1
:准双向口
2
:单独控制I/O口输出的置位或清零(位方式CLRSETB
3
:复位后上拉成高电平,可以用做输入
4
:带载能很弱(未考虑变异产品)
P1
等直接控制

**********************
PIC
I/O口:
1
:真正的双向口
2
:单独控制I/O口输出的置位或清零(位方式BSFBCF
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口方向控制寄存器(同PICTRISC等)
       
输入为0,输出为1(同PIC的相反)
注:IOSETIOCLR是一对
***************
***************


I/O
口优缺点(个人愚见):

1
:输出10
   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次写,而且还出现了中间状态
        
这种情况在51PIC中是不会出现的
4
:读I/O口状态
   51
必须先对端口写1SETB  P1.0
        
然后再判断是1还是0    
   PIC
:先设为输入,然后判断
   ARM
:先设为输入,然后判断

4
:驱动能力
   51
最低,PIC最强
   
例:在I/O口与地间接一个100欧的电阻
       I/O
口输出1,然后读此I/O口,只有PIC可读回高电平
       
如果ARM读的是IOSET则读到高电平,如果读IOPIN则读到
       
低电平,输出和实际电平不符


 

PARTNER CONTENT

文章评论1条评论)

登录后参与讨论

用户179934 2009-4-4 23:29

恩,以前搞51,現在轉向搞pic了。 pic唯一的缺點就是價格高了點。呵呵。
相关推荐阅读
用户1643163 2008-04-16 15:16
关于C51的中断编程
8051 系列 MCU 的基本结构包括:32 个 I/O 口(4 组8 bit 端口);两个16 位定时计数器;全双工串行通信;6 个中断源(2 个外部中断、2 个定时/计数器中断、1 个串口输入/输...
我要评论
1
5
关闭 站长推荐上一条 /3 下一条