娇小w搡bbbb搡bbb,《第一次の人妻》,中国成熟妇女毛茸茸,边啃奶头边躁狠狠躁视频免费观看

歷史上的今天

今天是:2025年05月18日(星期日)

2020年05月18日 | 二、GPIO【MSP430學習筆記】

發布者:月光男孩 來源: eefocus關鍵字:GPIO  MSP430  學習筆記 手機看文章 掃描二維碼
隨時隨地手機看文章

一、GPIO口配置

MSP430F249有6組IO 端口,即P1~P6,每一組IO口都有8個可獨立編程引腳,比如P1有P1.0 ~ P1.7。在MSP430所有的端口都有控制輸入輸出方向和進行輸入、輸出的能力。其中P1、P2口具有外部中斷的功能,第二功能可通過寄存器進行控制,外部中斷有三個寄存器,中斷使能,中斷觸發控制,中斷標志位。

在這里插入圖片描述

端口P1具有輸入/輸出、中斷和外部模塊功能,這些功能可通過7個控制寄存器的設置來實現。下面介紹

各控制寄存器特點及其使用:

1、PxDIR 輸入/輸出方向寄存器

輸入/輸出方向寄存器

相互獨立的8位分別定義了Px 口的8位的輸入輸出方向。

使用輸入/輸出功能時,應先定義端口方向。作為輸入時,只能讀;作為輸出時,可讀可寫。

PxDIR.x:端口輸入輸出方向控制


0:輸入模式

1:輸出模式

操作:

P1DIR |=0x10; // P1.4作輸出,其余各位端口方向不變。

P1DIR &=0x7f; // P1.7作輸入,其余各位端口方向不變。


2、PxIN 輸入寄存器

l 輸入寄存器

該寄存器是只讀寄存器。只能通過讀取該寄存器內容才能知道Px 口的輸入信號的狀態。

讀出此寄存器的內容中,只有Px口設為輸入的數據位有效。

對于 Px口設為輸出的那些位,一般來說,PxIN.x = PxOUT.x

PxIN.x:端口輸入的電平


0:端口輸入低電平

1:端口輸入高電平

操作:

unsigned char Temp;

P1DIR &=0x77 ; // P1.3和P1.7輸入

Temp = P1IN; // Temp為在已定義的一變量,Temp 中只要第7位和第四位有效。


3、PxOUT 輸出寄存器

輸出寄存器

該寄存器可讀可寫,讀取時,其內容與Px 口引腳定義無關。改變方向寄存器的內容,此寄存器內容不受

影響。

PxOUT.x:端口輸出的電平


0:端口輸出低電平

1:端口輸出高電平

注意:

P1OUT.0 = 1(P1.0輸出高),但是P1DIR.0 = 0(該引腳為輸入模式),則此時P1.0為輸入;

如果將P1DIR.0 = 1(該引腳為輸出模式),則此時P1.0為輸出,并且輸出為高電平。

操作:

P1DIR |=0x88; // P1.3和P1.7輸出

P1OUT |=0x88; // P1.3和P1.7輸出高電平


4、上下拉電阻配置

上下拉電阻是否開啟由PxREN寄存器決定,而上拉還是下拉是由PxOUT寄存器決定,在作為輸出時,隨著PxOUT的高低,自動選擇上下拉,所以平時我們沒有特別的去設置內部上下拉也可以輸出高電平的原因,但作為輸出的時候,這個配置就必需得有,可以人為的賦值PxOUT寄存器來得到上下拉,具體如下工作原理:

在這里插入圖片描述

二、對寄存器的位操作

1、比如要設置


P1.0為高電平輸出

P1.1為低電平輸出

P1.2取反

P1.3讀取的數據

以下三種編寫方法:

(1)不依賴頭文件編寫

P1OUT | = 0X01;

P1OUT & = ~0X02;

P1OUT^ = 0X04;

if((P1OUT&0X08)==0)

{

//執行代碼

}


(2)在IAR環境下編寫,BIT0 ——BIT7 是 0x01——0x08 的宏定義。


P1OUT | = BIT0;

P1OUT & = ~BIT1;

P1OUT^ = BIT2;

if((P1OUT&BIT3)==0)

{

//執行代碼

}


(3)不依賴頭文件,移位的編寫方法


P1OUT | = (1<<0);

P1OUT & = ~(1<<1);

P1OUT^ = (1<<2);

if((P1OUT&(1<<3))==0)

{

//執行代碼

}


2、寫位操作

對某個字節直接使用“=”進行寫操作時,所有的位的值都將改變。如果先將原字節的值讀出來,使用位操作對原字節進行賦值,就可以“等效”實現對單個位的寫操作。


/* 設定P1OUT原始值為b'0101 1010 */


    P1OUT |= 0x01;          /* P1OUT = P1OUT | b'0000 0001

                                           b'0101 1010      //P1OUT:0x5A

                                        |  b'0000 0001      //0x01

                                      ________________

                                           b'0101 1011      //P1OUT:0x5B

                             或操作可以實現對特定位置1  */

                             

    P1OUT &= ~0x10;         /* P1OUT = P1OUT & b'1110 1111

                                             b'0101 1011      //P1OUT:0x5B

                                          &  b'1110 1111      //0xEF

                                       _________________

                                              b'0100 1011     //P1OUT:0x4B

                             與操作可以實現對特定位置0  */


    P1OUT ^= 0x02;          /* P1OUT = P1OUT ^ b'0000 0010

                                             b'0100 1011      //P1OUT:0x4B

                                          &  b'0000 0010      //0x02

                                       _________________

                                              b'0100 1001     //P1OUT:0x49

                             異或操作可以實現對特定位取反*/


這樣可以實現只對特定位進行操作而不影響其他位的值。


3、依賴頭文件對位操作

另外為了方便操作在”msp430xxx.h"里還包含了各種宏定義來輔助位操作。


#define BIT0                (0x0001u)

#define BIT1                (0x0002u)

#define BIT2                (0x0004u)

#define BIT3                (0x0008u)

#define BIT4                (0x0010u)

#define BIT5                (0x0020u)

#define BIT6                (0x0040u)

#define BIT7                (0x0080u)

#define BIT8                (0x0100u)

#define BIT9                (0x0200u)

#define BITA                (0x0400u)

#define BITB                (0x0800u)

#define BITC                (0x1000u)

#define BITD                (0x2000u)

#define BITE                (0x4000u)

#define BITF                (0x8000u)


有了BIT0-BITF后,可以方便地對寄存器的各位進行設置,不用再一個一個去數二進制的位數了。上述代碼可以改寫為:


P1OUT |= BIT0; //P1.0 輸出高電平

P1OUT &= ~BIT4 //P1.4 輸出低電平

P1OUT ^= BIT1; //P1.1 電平取反


另外也可以多個位一起操作:


P1OUT | = BIT3 + BIT5 +BIT6;    //P1.3 P1.5 P1.5 輸出高電平

P2OUT & = ~BIT2 + ~BIT4 + ~BIT7;   //P2.2 P2.4 P2.7 輸出低電平


讀位操作


if((P1IN&BIT6) == BIT6)     //如果P1.6輸入高電平    b'0100 1010 & b'0100 0000 = b'0100 0000

                            //                     b'0000 1010 & b'0100 0000 = b'0000 0000

P2OUT |= BIT0; //P2.0輸出高電平

else

P2OUT &= ~BIT0; //P2.0輸出低電平


原文鏈接


三、實戰例程

1、IO口控制LED燈


//IO口定義

#define LED_H P5OUT | = BIT7;//熄滅LED燈

#define LED_L P5OUT & = ~BIT7;//點亮LED燈

#define LED_HL P5OUT ^ = BIT7;//翻轉LED燈狀態

//函數聲明

void led_Init(void);

//LED燈初始化

void led_Init(void)

P5SEL & = ~BIT7;//設置P5.7IO為普通的I/O口

P5DIR | = BIT7;//設置P5.7IO口方向為輸出 

P5OUT | = BIT7;//初始化設置P5.7IO口為高電平


2、按鍵輸入控制LED燈


void Key_Init(void)

{

 P1SEL& = ~BIT0;  //設置P1.0的IO口為普通IO口模式

 P1DIR& = ~BIT0;  //p1.0的IO口方向為輸入

 P1REN | = BIT0;  //使能P1.0內部電阻

 P1OUT | = BIT0;  //設置P1.0為內部上拉電阻為上拉方式

 

 P6SEL& = ~BIT3;  //設置P1.0的IO口為普通IO口

 P6DIR& = ~BIT3;  //設置P6.3的IO口方向為輸入

 P6REN | = BIT3;  //使能P6.3的內部電阻

 P6OUT | = BIT3;  //設置P6.3內部電阻為上拉電阻方式

}

//按鍵掃描

u8 Kek_Scan(void)

{

static u8 KeyUpFlag = 1;

if (KeyUpFlag && (!KEY1_I || !KEY2_I))

{

Delay_ms(10);//延時消抖

KeyUpFlag = 0;

if(!KEY1_I ) return 1;

if(!KEY2_I ) return 2;

}

else if  (!KEY1_I || !KEY2_I)) 

KeyUpFlag = 1;

return 0;

}

//========外部中斷控制LED燈=========

//獨立按鍵底層驅動頭文件

#ifndef KEY_ Н

#define KEY_ H

#include "msp430type.h'

//IO口定義

#define KEY1_ _I (P1IN & BITO)  //按鍵1輸入

#define KEY2_ _I (P6IN & ВIT3)  //按鍵2輸入


//按鍵初始化

void Key_ Init(void);

//按鍵掃描

u8 Kek_ Scan(void);

# endif

//主程序

#include

#include "msp430type.h"

#include "system.h"

#include "delay.h"

#include "led.h"

#include "key.h"

//主函數

void main(void)

{

u8Key=0;

Wdt_ _Off();/ /關閉看門狗

Clock_ Init();/ /系統時鐘初始化Led_ Init();/ /led燈初始化

Key_ Init();/ /按鍵初始化

while(1)

{

Key = Kek_ Scan(); // 按鍵掃描

switch(Key)

   {

case 1 :

LED_ L;// 點亮led燈break;

case 2:

LED_ H;/ /kéX led 'Jbreak;

default:

break;

}

}

}


3、外部中斷控制LED燈狀態翻轉

在這里插入圖片描述在這里插入圖片描述

**注意:**中斷函數的寫法:


#pragma vector = 中斷想向,

_interruot void + 函數名。

在這里插入圖片描述
在這里插入圖片描述

關鍵字:GPIO  MSP430  學習筆記 引用地址:二、GPIO【MSP430學習筆記】

上一篇:MSP430單片機的中斷機制
下一篇:msp430單片機GPIO基礎理解

推薦閱讀

雖然三星下半年旗艦Galaxy Note 9并未發布,但是Galaxy S10顯然已經在路上了。現在,韓國The Bell的爆料稱,三星Galaxy S系列的下一代旗艦S10內部代號已經確定是Beyond。三星S10內部代號已定:Beyond  “Beyond”除了熟知的一支樂隊名外,其本身還有“超越“之意,所以可以將其解讀為超越以取得的成就,來到一個全新的高度。此前S系列的兩代產品,S...
2018年8月芯片代工廠臺積電突然遭受病毒入侵,在臺積電總部臺灣新竹科學園區的12英寸晶圓廠和營運總部均受到嚴重影響,生產線全部停擺數小時。根據臺積電官方給出的消息,在這短短的3天時間里,對臺積電第三季度營收造成了3%的損失。隨著我國發展集成電路產業的風頭正盛,如何保證晶圓廠的順利建設,保證建廠效率,以及實際運維的安全性穩定性等方面,EEWO...
2020年5月16日是一個普通的周六,也是英特爾OpenVINO?工具套件發布兩周年的特殊日子。在這一天,OpenVINO中文社區通過一場線上直播活動宣布正式成立,也成為OpenVINO兩歲生日的一份特殊禮物。秉承“開放、開源、共創”的理念,OpenVINO中文社區由一群熱愛技術、熱心社區的開發者自發組織成立,致力于通過定期舉辦線上與線下的沙龍、動手實踐及開發者交流...
智能車載系統已經成為當下汽車產品的標配項而非選擇項,“車聯網”相關的賣點繼續熱火朝天被各品牌玩弄得“天花亂墜”,但縱觀各品牌在實際的投入與戰略定位上,仍存在較大差異,步調并不一致。從現階段來看,造車新勢力由于“輕裝上陣”的緣故在智能車載系統上的表現更為突出,但比如合資品牌,想要放開手腳去發展,所遇阻力比自主品牌更高。從威爾森對行...

史海拾趣

問答坊 | AI 解惑

幾種常用電容器的結構和特點

電容器是電子設備中常用的電子元件,下面對幾種常用電容器的結構和特點作以簡要介紹,以供大家參考... …

查看全部問答∨

有誰用過Rabbit的MCU,好像居然還是Z80內核

連Zilog都在不斷對內核升級,居然rabbit還在用Z80內核做產品…

查看全部問答∨

有關80c51的棧的問題

棧指針SP可以設置堆棧的起始地址。 那么在一個程序中如果不設SP,則程序會自動開棧嗎? 如果會開棧,那么其起始地址是多少?…

查看全部問答∨

ARM 的I2C能直接和MCU的I2C通信嗎?

現在我想把2410的I2C的兩根線直接和一個16位MCU的I2C連接起來,ARM做主,MCU做從,這樣可以通信嗎?,如可以,哪么這個MCU的地址怎么得到呢?是程序設置的,還是芯片自身固定的? 謝謝。…

查看全部問答∨

請問哪些開發板提供的bsp能支持kitl調試的?

我曾經借過一個yc2440和sky2440,他們的bsp都不支持kitl調試,還有友善之臂的micro2440,好像也不支持kitl調試?現在找到一個立宇泰 2440 5.0 BSP SMDK2440A的,據說能夠支持kitl調試,但是我是菜鳥,不會移植(也不知道能不能移植到smdk2440上去, ...…

查看全部問答∨

有段ARM匯編代碼不理解,請高手指點.

             IMPORT      |Image$$RO$$Limit|              IMPORT      |Image$$RW$$Base|      & ...…

查看全部問答∨

按鈕優先等級應用

#include<reg52.h> void debouncer(void);void delay10ms(int);void alter(int);void left(int);void right(int);void pili(int);void flash(int);void debouncer(void){ int i; for(i=0;i<2400;i++);} void delay10ms(int x){&n ...…

查看全部問答∨

Altera-modesim 仿真出錯

最近做時序仿真時,一直出現 Warning: (vsim-SDF-3445) Failed to parse SDF file "edge_dect_v.sdo". 錯誤。之前的時候沒出現過, 加載SDF 時,勾了下面兩個選項,工程建立在 simulation 下面,求指導,…

查看全部問答∨

help2416_JSON_Transmit_如何使用開源代碼

replyreload += \',\' + 1730295;一、JSON入門 JSON即JavaScript Object Natation,它是一種輕量級的數據交換格式,非常適合于服務器與JavaScript的交互. 盡管有許多宣傳關于XML如何擁有跨平臺,跨語言的優勢. 然而,除非應用于Web Services,否則在 ...…

查看全部問答∨
小廣播
設計資源 培訓 開發板 精華推薦

最新單片機文章
何立民專欄 單片機及嵌入式寶典

北京航空航天大學教授,20余年來致力于單片機與嵌入式系統推廣工作。

 
EEWorld訂閱號

 
EEWorld服務號

 
汽車開發圈

 
機器人開發圈

電子工程世界版權所有 京ICP證060456號 京ICP備10001474號-1 電信業務審批[2006]字第258號函 京公網安備 11010802033920號 Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
主站蜘蛛池模板: 宾阳县| 界首市| 宁都县| 色达县| 裕民县| 聂拉木县| 浪卡子县| 嵊州市| 察雅县| 常山县| 兴山县| 墨江| 绍兴县| 莱阳市| 昂仁县| 桦南县| 台山市| 玉树县| 顺义区| 金门县| 紫金县| 青海省| 通辽市| 罗源县| 揭东县| 三原县| 康平县| 建阳市| 乌兰浩特市| 五原县| 井陉县| 锦州市| 阜阳市| 江源县| 调兵山市| 太原市| 商洛市| 中宁县| 永定县| 清徐县| 昭通市|