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:
Porta IO geral, porta IO periférica (temporizador, USART, ADC)
Pino de entrada, pino de saída
Quando entrada, pull-up, pull-down, estado de alta impedância (três estados)
Uma breve introdução aos registros:
PxSEL é definido como 0 para uma porta de E/S de uso geral e como 1 para uma função dedicada.
PxDIR é definido como 0 para modo de entrada e definido como 1 para modo de saída.
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.
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.
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)
-
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
-
-
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
-
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; } } }