1. 程式人生 > >02微控制器IO口操作

02微控制器IO口操作

 其實真的不能再簡單了哦,就是三個暫存器。 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模組檔案 標頭檔案:
#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;
    }
}