其实真的不能再简单了哦,就是三个寄存器。
1.PxSEL:设置某一个的IO口是作为基本的IO口还是作为第二功能的接口来使用。(0:基本IO,1:外设功能)
2.PxDIR:设置作为基本功能的IO口到底是作为输入还是输出使用。(0:输入,1:输出)
3.PxINP:设置某一个IO口的输入模式,上下拉还是三态模式,如果要具体指明上拉还是下拉,需要配合P2INP【5:7】这三位分别对应P0---P2这三组。(0:上拉,1:下拉)
ADC采集的时候用三态输入
4.注意,P2.0---P2.2这三个IO口不区分基本IO还是外设功能。
5.2530一共四十个IO,但是我们用到的只有21个,实质上中间还有一个大IO,所以是41个IO。这21个IO是P0和P1分别是8个,还有P2的5个。
6.上电初始化以后默认所有寄存器都是0.
补充内容:
1、掌握Zigbee无线模块基本工作电路。
2、做Zigbee无线模块,和TI CC2530基本工作电路有什么不同。
多出了一块复位电路;
从CC2530芯片直接引出下载的相关5根线,为CC2530下载程序。
3、学会随心所欲的控制所有口子的输入输出。
输出怎么配置:
需要让P1_0处于普通IO口模式,非是偏上外设的模式 P1SEL 的第0位 为0
//管理所有IO处于普通IO还是偏上外设,由P0SEL P1SEL P2SEL 决定
让P1_0处于输出状态,非输入状态 找到P1DIR 第0位 让它等于1
//让所有IO口处于输入状态还是输出状态由P0DIR P1DIR P2DIR 决定
P1_0=1;
输入怎么配置:
让P0_6处于普通IO口,非偏上外设模式 P0SEL 的第6位为0
让P0_6处于输入状态,非输出状态 P0DIR 的第6位为0
让P0_6处于上拉、下拉或者三态中的一种状态
if(1==P0_6)
{//检测到的是高电平
}
else
{//检测到的P0_6外部是低电平
}
2、做Zigbee无线模块,和TI CC2530基本工作电路有什么不同。
多出了一块复位电路;
从CC2530芯片直接引出下载的相关5根线,为CC2530下载程序。
3、学会随心所欲的控制所有口子的输入输出。
输出怎么配置:
需要让P1_0处于普通IO口模式,非是偏上外设的模式 P1SEL 的第0位 为0
//管理所有IO处于普通IO还是偏上外设,由P0SEL P1SEL P2SEL 决定
让P1_0处于输出状态,非输入状态 找到P1DIR 第0位 让它等于1
//让所有IO口处于输入状态还是输出状态由P0DIR P1DIR P2DIR 决定
P1_0=1;
输入怎么配置:
让P0_6处于普通IO口,非偏上外设模式 P0SEL 的第6位为0
让P0_6处于输入状态,非输出状态 P0DIR 的第6位为0
让P0_6处于上拉、下拉或者三态中的一种状态
if(1==P0_6)
{//检测到的是高电平
}
else
{//检测到的P0_6外部是低电平
}
LED模块文件
头文件:
#ifndef __74LS164_8LED_H__
#define __74LS164_8LED_H__
#include<ioCC2530.h>
#define LS164_DATA P1_3
#define LS164_CLK P1_2
#define UCHAR unsigned char
void LS164_Cfg();
void LS164_BYTE(UCHAR Data);//P1.3 DATA P1.2 CLK
#endif
实现文件:
#include<ioCC2530.h>
#include"74LS164_8LED.h"
static UCHAR LED_Map[]={0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x00,0xFF};
void LS164_Cfg()
{
P1SEL &=~0x0C;//xxxx 00xx 配置为普通IO模式
P1DIR |=0x0C;//xxxx 11xx 配置为输出模式
}
void LS164_BYTE(UCHAR Index) //P1.3 DATA P1.2 CLK
{
UCHAR i=0;
UCHAR Data=LED_Map[Index];
for(;i<8;i++)
{
if(0x80 & Data)
{
LS164_DATA=1;
}
else
{
LS164_DATA=0;
}
Data=Data << 1;
LS164_CLK=0;
LS164_CLK=1;
}
}