PIC32MX220F032B学习笔记之I/O口

学校发的实验例子太高深了,对于我们零基础的孩子来说太痛苦了PIC32MX220F032B学习笔记之I/O口,只有自己找资料凑凑了。边学习边记录,提供大家参考和指正。

先说说基础定义吧:

1.一般要先定义端口的输入和输出TRISx(数据方向寄存器)

如果相应的TRISx的位为0表示为输出,这个很容易记住,Output的第一个字母O和数字0相象。
如果相应的TRISx的位为1表示为输入,这个很容易记住,Input的第一个字母I和数字1相象。

如:
TRISB=0b11001010;(二进制表示0b)注意的是二进制从右向左数依次为0,1,2...
TRISB=0xCA;(十六进制0x)  十六进制1位换成4位二进制0xf=0b1111
TRISB=202;(十进制)

他们的效果都是一样的表示RB7,RB6,RB3,RB1为输入,其余(RB5,RB4,RB2,RB0)为输出。

也可以单独的对某个位进行操作:

TRISAbits.TRISA7=0;//A端的编号七设置为输出

TRISBbits.TRISB1=1;//B端的编号一设置为输入

 

1.1也可以用我们实验例子中所用到的在plib.h头文件中的库函数

PORTSetPinsDigitalOut(IOPORT_B, BIT_7);//将B端的RB7设为数字输出端口

 

顺便说一下,PIC默认时,引脚是输入的,即默认时,TRISx=0xFF.F=1111;

 

关于何时输入输出的问题百度了以下:

输出:如果你要用某个引脚控制一个东东,如让它高电平或低电平,则这个引脚就得设置为输出。(例如点亮一个灯)
输入:如果你想知道某个引脚是高电平或低电平,则这个引脚就得设置为输入。还有如果作为AD转换,相应的引脚就得做为输入。(例如获取按钮的状态)

 

 

2.然后就是设置I/O口的值PORTx ——— 端口寄存器(可以点亮led灯了)

如果相应的PORTx的位为1表示为高电位

如果相应的PORTx的位为0表示为低电位

如:

PORTA=0b10100010;        或        PORTA=0xA2;
都表示RA1,RA5,RA7为高电位,其他的为低电位。

同样也可以单个控制

PORTBbits.RB6=1;//B端的RB6为高电位

 

2.1也可以用我们实验例子中所用到的在plib.h头文件中的库函数

PORTSetBits(IOPORT_B,BIT_7|BIT_8|BIT_9);//将B端IO口的RB7,RB8,RB9置1高电位

PORTClearBits(IOPORT_A,BIT_0|BIT_1|BIT_3);//将A端IO口的RA0,RA1,RA3清零低电位

注意:要引用这些库函数需要在起始位置添上#include

 

先写个简单的流水灯例子吧

开发板电路原理图如下:

PIC32MX220F032B学习笔记之I/O口
注意到有四个led D10,D12,D13,D4灯分别对应RB7,RB8,RB9,RB13只需控制这几个端口就可以做简单的流水灯了。

但观察实际的开发板从上到下为D13,D12,D10,D4,也就是从上到下控制RB9,RB8,RB7,RB13要以实际为主。

代码如下:


#include //32位的基本头文件
#include//定义了多种库函数的头文件
#pragma config JTAGEN = OFF//好像用MPLABX IDE测试都要关闭JTAGEN端口(不太懂)

int main()
{
    int i;
    TRISBbits.TRISB7=0;
    TRISBbits.TRISB8=0;
    TRISBbits.TRISB9=0;
    TRISBbits.TRISB13=0;

//设置RB7,RB8,RB9,RB13为输出

//也可直接用PORTSetPinsDigitalOut(IOPORT_B, BIT_7|BIT_8|BIT_9|BIT_13);代替

PORTSetBits(IOPORT_B,BIT_7|BIT_8|BIT_9|BIT_13);

//将RB7,RB8,RB9,RB13 置1 (我发现这开发板置1的时候灯灭,置0的时候亮不太清楚为什么)

while(1)
    {
     for(i=0;i<100000;i++)
    {
//    单个命名赋值有冲突错误 ,单个赋值时发现灯没有正常的流水亮,多次调试都不成功最终放弃
//    PORTBbits.RB9=0;
//    PORTBbits.RB13=1;
//    PORTBbits.RB8=1;
//    PORTBbits.RB7=1;
  
    }
//     PORTB=0b11110111111111;//这个可以用,与下面两句等效
     PORTClearBits(IOPORT_B,BIT_9);
    PORTSetBits(IOPORT_B,BIT_7|BIT_8|BIT_13);
     for(i=0;i<100000;i++)
    {
      
//    PORTBbits.RB9=1;
//    PORTBbits.RB13=1;
//    PORTBbits.RB8=0;
//    PORTBbits.RB7=1;
   
    }
//    PORTB=0B11111011111111;//同上(使用时注意去掉下面两句)
    PORTClearBits(IOPORT_B,BIT_8);
    PORTSetBits(IOPORT_B,BIT_7|BIT_9|BIT_13);
     for(i=0;i<100000;i++)
     {
       
//    PORTBbits.RB9=1;
//    PORTBbits.RB13=1;
//    PORTBbits.RB8=1;
//    PORTBbits.RB7=0;
  
     }
//  PORTB=0B11111101111111;
 PORTClearBits(IOPORT_B,BIT_7);
 PORTSetBits(IOPORT_B,BIT_8|BIT_9|BIT_13);
 
    for(i=0;i<100000;i++)//等待延时的简单设置
    {
      
//    PORTBbits.RB9=1;
//    PORTBbits.RB8=1;
//    PORTBbits.RB7=1;
//    PORTBbits.RB13=0;
    }
//  PORTB=0B01111111111111;
  PORTClearBits(IOPORT_B,BIT_13);//先点亮RB13
  PORTSetBits(IOPORT_B,BIT_7|BIT_8|BIT_9);//确保其他端口灭
    }
  
}

3.总结

面对一个新的领域确实有点摸不着头脑,还有一些语句也太多了,几条不同的语句竟然都表示同一个意思甚至汇编,C语言,伪指令都混用。

虽然这样可移植性和适用语言性大大增强了,但对我们初学者也太多了,有点混乱。看来我的基础也没有掌握,还有这么多语句要理解。

 有些疑问还需要慢慢的查询和解决。

 

转载请说明出处谢谢。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值