4. Operações básicas de porta IO

Recursos de porta CC2530: três portas, representadas como P0, P1 e P2. P0 e P1 são portas completas de 8 bits, enquanto P2 possui apenas 5 bits disponíveis

Algumas funções da porta IO do CC2530:

  1. Porta IO geral, porta IO periférica (temporizador, USART, ADC)

  2. Pino de entrada, pino de saída

  3. Quando entrada, pull-up, pull-down, estado de alta impedância (três estados)

Uma breve introdução aos registros:

  1. PxSEL é definido como 0 para uma porta de E/S de uso geral e como 1 para uma função dedicada.

  2. PxDIR é definido como 0 para modo de entrada e definido como 1 para modo de saída.

  3. PxINP é definido como 0 para modo pull-up/pull-down e definido como 1 para modo tri-state (alta impedância)

    • 1. Para P1INP e P0INP, os bits 0~7 atendem às regras acima.

    • 2. Para P2INP, os bits 0 ~ 4 atendem às regras acima e os bits 5 ~ 7 são funções dedicadas, ou seja, 5, 6 e 7 são usados ​​para controlar os modos pull-up e pull-down de P0, P1 e portas do grupo P2 respectivamente (0 pull-up, 1 pull-down)

registro de configuração de porta

Registro PxSEL

O registro PxSEL, onde x é o rótulo da porta 0~2, é usado para definir cada pino da porta como uma E/S de uso geral (0) ou uma E/S de dispositivo externo (1).

Por padrão, é uma entrada pull-up de porta IO comum após ligar.

imagem-20230916220122903

imagem-20230916220334606

O grupo P2 possui apenas 5 portas IO, mas P2_1 e P2_2 são usadas para download de programas, portanto esses dois IOs não precisam ser configurados.

Portanto, os 3 bits inferiores de P2SEL correspondem a P2_0, P2_3 e P2_4 respectivamente.

Registro PxDIR

Para alterar a direção de um pino de porta a qualquer momento, use o registro PxDIR para definir cada pino de porta como entrada ou saída.

imagem-20230916220858280

Se estiver usando a função de saída, não há necessidade de usar o registro PxINP

Registro PxINP

Defina o modo de entrada da porta IO geral: pull-up, pull-down ou tri-state (alta impedância)

  1. Selecione se a porta de entrada está em estado de alta impedância

    • Use os bits 0~4 de P0INP, P1INP e P2INP

    • Deve-se observar que P1_0 e P1_1 não possuem funções pull-up/pull-down

imagem-20230916221847315

imagem-20230916221914713

  1. Se o modo pull-up e pull-down for selecionado, use os bits 5~7 de P2INP para determinar se é pull-up ou pull-down.

    • P2_5: Determinar porta P0

    • P2_6: Determine a porta P1

    • P2_7: Determinar porta P2

imagem-20230916222013276

Registrar uso

Para uma determinada posição 1, use a operação OR [|]

Para uma determinada posição 0, use a operação AND [&]

Exemplo 1: Defina a porta P1_0 como uma porta IO de saída geral

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

Exemplo 2: Defina a porta P0_6 como uma porta IO de entrada pull-up geral

  P0SEL &= ~0x40;//P0.6设置为通用I/O口

  P0DIR &= ~0x40;//P0.6设置为输入

  P0INP &= ~0x40;//P0.6设置为上下拉模式
  P2INP &= ~0x20;//P0.6设置为上拉输入

Exemplo 3: Combine o Exemplo 1 e o Exemplo 2 para monitorar os níveis alto e baixo da porta P0_6 externa, e o nível alto acende a luz LED (P1_0)

Fenômeno experimental: a luz acende quando a tampa do jumper é retirada e apaga quando a tampa do jumper é conectada.

#include<iocc2530.h>
/*
  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;
    }
  }
}

#include<iocc2530.h>
/*
PxSEL Defina 0 para porta de E/S geral, defina 1 para função especial
PxDIR Defina 0 para modo de entrada, defina 1 para modo de saída
PxINP Defina 0 para modo pull-up/down, defina 1 para Modo tri-state (estado de alta impedância)
1. Para P1INP e P0INP, todos os bits 0 ~ 7 atendem às regras acima.
2. Para P2INP, os bits 0 e 4 atendem às regras acima, e 5 e 7 são funções dedicadas,
ou seja , 5, 6 e 7, respectivamente. Usado para controlar os modos pull-up e pull-down das portas do grupo P0, P1 e P2 (0 pull-up, 1 pull-down) */ void main(
)
{

//O registro é definido como 0 por padrão após a inicialização, ou seja, a entrada pull-up da porta de E/S comum
P1SEL &= ~0x01; //P1.0 é definido como uma porta de E/S de uso geral
P1DIR | = 0x01; //P1.0 é definido como saída

P0SEL &= ~0x40;//P0.6 está definido para a porta de E/S geral
P0DIR &= ~0x40;//P0.6 está definido para a entrada
P0INP &= ~0x40;//P0.6 está definido para o modo pull-up e pull-down

P2INP &= ~0x20;//P0.6 é definido como entrada pull-up

while(1){ if(P0_6 == 1){ //Detecta nível alto, acende LED P1_0 = 0; }else{ //Detecta nível baixo, desliga LED P1_0 = 1; } } }








Acho que você gosta

Origin blog.csdn.net/qq_61228493/article/details/133220973
Recomendado
Clasificación