• 4.基本IO口操作


    CC2530端口资源:三个端口,表示为 P0、P1 和 P2。P0 和 P1 是完全的 8 位端口,而 P2 仅有 5 位可用

    CC2530的IO口的一些功能:

    1. 通用IO口、外设IO口(定时器、USART、ADC

    2. 输入引脚、输出引脚

    3. 当输入时,上拉、下拉、高阻态(三态)

    寄存器简略介绍:

    1. PxSEL 置0为通用I/O口,置1为专用功能

    2. PxDIR 置0为输入模式,置1为输出模式

    3. PxINP 置0为上/下拉模式,置1位三态模式(高阻态)

      • 1.对应P1INP和P0INP来说,0~7位均满足上述规则

      • 2.对于P2INP来说,0 ~ 4位满足上述规则,5 ~ 7为专用功能,即5、6、7分别用来控制P0、P1、P2组端口的上下拉模式(0上拉、1下拉)

    端口配置寄存器

    PxSEL寄存器

    寄存器 PxSEL,其中 x 为端口的标号 0~2,用来设置端口的每个引脚为通用 I/O(0) 或者是外部设备I/O(1)。

    默认上电后为普通IO口上拉输入

    image-20230916220122903

    image-20230916220334606

    P2组只有5个IO口,但是P2_1和P2_2是用于下载程序用的,所以这两个IO不需要配置

    因此P2SEL的低3位分别对应P2_0、P2_3 、P2_4

    PxDIR寄存器

    在任何时候,要改变一个端口引脚的方向,就使用寄存器 PxDIR 来设置每个端口引脚为输入或输出

    image-20230916220858280

    如果使用输出功能,则不需要使用PxINP寄存器

    PxINP寄存器

    设置通用IO端口的输入模式:上拉、下拉或三态(高阻态)

    1. 选择输入端口是否为高阻态

      • 使用P0INP、P1INP以及P2INP的0~4位

      • 需要注意的是,P1_0 和 P1_1 没有上拉/下拉功能

    image-20230916221847315

    image-20230916221914713

    1. 如果选择了上下拉模式,使用P2INP的5~7位确定到底为上拉还是下拉

      • P2_5:确定P0口

      • P2_6:确定P1口

      • P2_7:确定P2口

    image-20230916222013276

    寄存器使用

    对某一位置1,使用或运算【|】

    对某一位置0,使用与运算【&】

    例1:设置P1_0口为通用输出IO口

      P1SEL &= ~0x01;   //P1.0设置为通用I/O口
      P1DIR |= 0x01;    //P1.0设置为输出
    
    • 1
    • 2

    例2:设置P0_6口为通用上拉输入IO口

      P0SEL &= ~0x40;//P0.6设置为通用I/O口
    
      P0DIR &= ~0x40;//P0.6设置为输入
    
      P0INP &= ~0x40;//P0.6设置为上下拉模式
      P2INP &= ~0x20;//P0.6设置为上拉输入
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    例3:结合例1和例2来实现监测外部P0_6口的高低电平,高电平点亮LED灯(P1_0)

    实验现象:拔出跳线帽灯亮,插上跳线帽灯灭

    #include
    /*
      PxSEL 置0为通用I/O口,置1为专用功能
      PxDIR 置0为输入模式,置1为输出模式
      PxINP 置0为上/下拉模式,置1位三态模式(高阻态)
        1.对应P1INP和P0INP来说,0~7位均满足上述规则
        2.对于P2INP来说,0~4位满足上述规则,5~7为专用功能,
        即5、6、7分别用来控制P0、P1、P2组端口的上下拉模式(0上拉、1下拉)
    */
    void main(){
    
      //寄存器上电默认置0,即普通IO口上拉输入
      P1SEL &= ~0x01;   //P1.0设置为通用I/O口
      P1DIR |= 0x01;    //P1.0设置为输出
    
      P0SEL &= ~0x40;//P0.6设置为通用I/O口
      P0DIR &= ~0x40;//P0.6设置为输入
      P0INP &= ~0x40;//P0.6设置为上下拉模式
    
      P2INP &= ~0x20;//P0.6设置为上拉输入
    
    
      while(1){
        if(P0_6 == 1){
          //监测到高电平,点亮LED
          P1_0 = 0;
        }else{
          //监测到低电平,熄灭LED
          P1_0 = 1;
        }
      }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32

    #include
    /*
    PxSEL 置0为通用I/O口,置1为专用功能
    PxDIR 置0为输入模式,置1为输出模式
    PxINP 置0为上/下拉模式,置1位三态模式(高阻态)
    1.对应P1INP和P0INP来说,0~7位均满足上述规则
    2.对于P2INP来说,04位满足上述规则,57为专用功能,
    即5、6、7分别用来控制P0、P1、P2组端口的上下拉模式(0上拉、1下拉)
    */
    void main(){

    //寄存器上电默认置0,即普通IO口上拉输入
    P1SEL &= ~0x01; //P1.0设置为通用I/O口
    P1DIR |= 0x01; //P1.0设置为输出

    P0SEL &= ~0x40;//P0.6设置为通用I/O口
    P0DIR &= ~0x40;//P0.6设置为输入
    P0INP &= ~0x40;//P0.6设置为上下拉模式

    P2INP &= ~0x20;//P0.6设置为上拉输入

    while(1){
    if(P0_6 == 1){
    //监测到高电平,点亮LED
    P1_0 = 0;
    }else{
    //监测到低电平,熄灭LED
    P1_0 = 1;
    }
    }
    }

  • 相关阅读:
    瑞吉外卖Redis
    kafka简易搭建(windows环境)
    当网络设置为自动获取dns时而实际nds是8.8.8.8,1.1.1.1的解决方法
    XTU-OJ 1194-Recipient
    Java IO面试题及答案整理汇总
    Linux学习之平均负载的概念和查看方法
    【nlp】天池学习赛-新闻文本分类-机器学习
    Python 既是解释型语言,也是编译型语言
    【Linux03-基本工具之VIM】Linux下的强大编辑器(附软件生态与yum)
    小红书笔记关键词规范
  • 原文地址:https://blog.csdn.net/qq_61228493/article/details/133220973