02微控制器IO口操作
阿新 • • 發佈:2019-02-08
其實真的不能再簡單了哦,就是三個暫存器。
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外部是低電平
}
LED模組檔案 標頭檔案:
實現檔案:
補充內容: 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外部是低電平
}
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; } }