gpio輸入輸出實驗報告5篇_第1頁
gpio輸入輸出實驗報告5篇_第2頁
gpio輸入輸出實驗報告5篇_第3頁
gpio輸入輸出實驗報告5篇_第4頁
gpio輸入輸出實驗報告5篇_第5頁
已閱讀5頁,還剩57頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

編號:

時間:2021年x月x日

海納文庫

頁碼:第

gpio輸入輸出實驗報告5篇

gpio輸入輸出實驗報告5篇gpio輸入輸出實驗報告一、二、一、二、點時在S課程名實驗名專業(yè)班實驗目的:(1)熟悉人(2)掌握在(3)掌握在合成的實驗內容:(1)將人體初始化時,即程下面是我為大家整理的gpio輸入輸出實驗報告5篇,供大家參考。

篇一:gpio輸入輸出實驗報告、二、一、二、點時在S課程名實驗名專業(yè)班實驗目的:(1)熟悉人(2)掌握在(3)掌握在合成的實驗內容:(1)將人體初始化時,即程序在實驗12SecurityCam名稱:

嵌名稱:

實班級:

人體紅外傳在Window在Windows的方法。

體紅外傳感化PIR按鈕,序檢測到下降1的基礎上mera。即檢嵌入式Winn驗12PIR

姓名傳感器、語音s10IoTCo10IoTCor感器PIR、L,若附近有降沿,LED上,使用樹檢測到附近nndows程序傳感器和語名:

音識別和文ore中使用re中使用SLED燈分別有人活動時D燈熄滅,莓派、人體有人活動時1

序開發(fā)語音識別實

學號:文本轉語音(GPIO讀取SpeechReco別連接到樹莓,即程序檢與應用程序體紅外傳感時,程序自實驗

(TTS)。

取人體紅外傳ognition和S莓派的GPI檢測到上升序界面上的感器PIR、L動拍照,存

實驗日傳感器輸出SpeechSyntIO5和GPIO沿,指示的狀態(tài)同步。LED燈、電存儲到本地成績教師日期:

出的方法。

thesis進行語O6,運行程的LED燈亮如下圖所電阻、面包板地。

績績:

師師:

語音識別和程序121后亮;沒有人所示。

板和跳線,

和語音后,先活動實現(xiàn)

面語引所用請三、1(2)使用樹面包板和跳語音控制一引腳連接的所示。

用戶可以在請在此基礎實驗結果1.利用Frit樹莓派(Io跳線,實現(xiàn)本一個LED的的LED燈。在應用程序界礎上,添加(注意:

所tzing軟件畫oTCore系統(tǒng)本地的語音的場景,即使同時,可以界面輸入文LED燈,修所有截圖需要畫出硬件連附

硬統(tǒng)燒寫版本音合成和語音使用語音tu以在Visual文字,按修改語音定要加注自己連接圖,給出附調試截圖硬件連接圖本為14986)音識別,從urnonbedrlStudio的按鈕,可以定義文件和程己的姓名+學出實驗內容圖。

圖:

)、USB聲從而達到控制oomled或Output窗口以讓系統(tǒng)讀程序,從而學號水印):1對應的所卡、耳機、制LED燈的者turnoffb口看到語音出該內容,而達到控制兩

所有關鍵代碼麥克風、的目的。程bedroomle音識別的實時如下圖所兩個不同的碼,給出測試LED燈、程序122給ed來控制G時結果。如示。

的LED的功試結果和說電阻、給出了GPIO5如下圖功能。

說明,

硬件連接圖如左圖所示,將led連接在GPIO5上,將pri的數(shù)據輸出接口接在GPIO18上

關鍵代碼:

privatevoidPinPIR_ValueChanged(GpioPinsender,GpioPinValueChangedEventArgse)

{

//togglethestateoftheLEDeverytimethebuttonispressed

if(e.Edge==GpioPinEdge.RisingEdge)

{

ledPin.Write(GpioPinValue.Low);

}

if(e.Edge==GpioPinEdge.FallingEdge)

{

ledPin.Write(GpioPinValue.High);

}

vartask=Dispatcher.RunAsync(CoreDispatcherPriority.Normal,()={

if(e.Edge==GpioPinEdge.FallingEdge)

{

ledEllipse.Fill=grayBrush;

GpioStatus.Text=PIRFallingEdge;

}

if(e.Edge==GpioPinEdge.RisingEdge)

{

ledEllipse.Fill=redBrush;

GpioStatus.Text=PIRRisingEdge;

takePhoto_Click(takePhoto,newRateChangedRoutedEventArgs());

}

});

}

如上面的代碼所示在原來的代碼段中調用takePhoto_Click(takePhoto,newRateChangedRoutedEventArgs());函數(shù),在主頁面的圓點控制的代碼中添加調用拍照功能的代碼。當人體紅外傳感器檢測到時輸出高電平,GPIO口接受到后檢測到上升沿便會進行拍照并且點亮led

實驗結果:2.利用Frit附調試截圖硬件連接圖關鍵代碼:

privateas

{

Windows.Appltzing軟件畫圖。

圖:

yncvoidLigif(target={

//======

if(comm

{

if

{

icationModel畫出硬件連ghtControl(s==Bedroom============mand==ON

(BedRoomLED_awaitl.Core.CoreA連接圖,給出stringcomma)===========)

_GpioPin!=Application.實會進行展示框到紅外點亮。執(zhí)行任出實驗內容and,string

null)MainView.Cor實驗結果如行拍照,并框下的指示外信息,同。沒有檢測任何操作。2對應的所如右圖所GPIO引腳

target)reWindow.Dis圖所示,當并且將照片進示點便會由灰同時連接在樹測到紅外信息所有關鍵代碼所示,在此次腳,分別為spatcher.Run當紅外設備檢進行保存,灰色變?yōu)榧t樹莓派GPI息時,便不碼,給出測試次的試驗中為GPOI6和nAsync(Window檢測到有人于此同時,紅色以指示檢IO上的led不會拍照。也試結果和說中需要用到兩和GPIO12。ws.UI.Core.C人時就照片檢測d小燈也不會說明,兩個CoreDi

spatcherPriority.Normal,()=

{

bedRoomTimer.Start();

}

);

}

}

elseif(command==OFF)

{

awaitWindows.ApplicationModel.Core.CoreApplication.MainView.CoreWindow.Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal,()=

{

bedRoomTimer.Stop();

if(BedRoomLED_GpioPinValue==GpioPinValue.Low)

{

BedRoomLED_GpioPinValue=GpioPinValue.High;

BedRoomLED_GpioPin.Write(BedRoomLED_GpioPinValue);

//LED.Fill=redBrush;

}

}

);

}

//===========================

}

elseif(target==kitchen)

{

//===========================

if(command==ON)

{

if(kITCHENLED_GpioPin!=null)

{

awaitWindows.ApplicationModel.Core.CoreApplication.MainView.CoreWindow.Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal,()=

{

kITCHENTimer.Start();

}

);

}

}

elseif(command==OFF)

{

awaitWindows.ApplicationModel.Core.CoreApplication.MainView.CoreWindow.Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal,()=

{

kITCHENTimer.Stop();

if(kITCHENLED_GpioPinValue==GpioPinValue.Low)

{

kITCHENLED_GpioPinValue=GpioPinValue.High;

kITCHENLED_GpioPin.Write(kITCHENLED_GpioPinValue);

//LED.Fill=redBrush;

}

}

);

}

//===========================

}

SaySomthing(${target}light,command);

}

privatevoidInitBedRoomGPIO()

{

vargpio=GpioController.GetDefault();

//ShowanerrorifthereisnoGPIOcontroller

if(gpio==null)

{

BedRoomLED_GpioPin=null;

//GpioStatus.Text=ThereisnoGPIOcontrolleronthisdevice.;

return;

}

BedRoomLED_GpioPin=gpio.OpenPin(BedRoomLED_PINNumber);

BedRoomLED_GpioPinValue=GpioPinValue.High;

BedRoomLED_GpioPin.Write(BedRoomLED_GpioPinValue);

BedRoomLED_GpioPin.SetDriveMode(GpioPinDriveMode.Output);

//GpioStatus.Text=GPIOpininitializedcorrectly.;

}

privatevoidInitKITCHENGPIO()

{

vargpio=GpioController.GetDefault();

//ShowanerrorifthereisnoGPIOcontroller

if(gpio==null)

{

kITCHENLED_GpioPin=null;

//GpioStatus.Text=ThereisnoGPIOcontrolleronthisdevice.;

return;

}

實驗結果:

當語音輸入hijack時便會啟動程序,程序會返回hijackwhatcanIdoforyou。然后便可以進行命令輸入。當語音輸入turnonthe便可以進行用語音輸入控制小燈的亮滅。

實驗結果如左圖所示,當聲音輸入開燈的命令之后便會將燈打開途中兩個燈分別代表臥室和廚房的燈,從中可以看出實驗成功將兩個地方的燈分別點亮。

四、實驗總結(請列出實驗過程中遇到的問題和解決方法):

由于此次的實驗比較簡單基本上沒有遇到什么很難的問題,主要出現(xiàn)的問題還是之前出現(xiàn)過的那些,由于takephoto_Click為前臺的事件,因此需要將該調用放入UI更改程序中否則無法成功。四、實驗總結(請列出實驗過程中遇到的問題和解決方法):

由于此次的實驗比較簡單基本上沒有遇到什么很難的問題,主要出現(xiàn)的問題還是之前出現(xiàn)過的那些,由于takephoto_Click為前臺的事件,因此需要將該調用放入UI更改程序中否則無法成功。

篇二:gpio輸入輸出實驗報告科技大學《微控制器原理》實驗指導書

STM32F103GPIO基本輸入輸出實驗1實驗01STM32F103GPIO基本輸入輸出實驗

實驗01STM32F103GPIO基本輸入輸出實驗

一、實驗目的

學習STM32F103VCT6單片機的通用GPIO的基本輸出輸入功能,主要了解STM32的GPIO的原理和應用。

二、實驗設備1)裝有RVMDK仿真軟件的Pentium以上的計算機一套;2)JLinkARMV8仿真器一套;3)STM32F103VCT的神舟II號開發(fā)板一套。

三、實驗電路原理圖及其說明在神州Ⅱ號STM32開發(fā)板中,一共有5個LED指示燈,其中一個是電源指示燈LD5,其他的4個LED(LD1、LD2、LD3和LD4)由GPIOPD控制,4個LED分別串了470K的電阻,起限流作用防止電流過大損壞LED和GPIO口。電路原理圖如圖1所示。

圖1STM32F103GPIOLED電路原理圖圖當GPIO管腳輸出高電平時,對應的LED燈亮;當GPIO管腳輸出低電平時對應的LED燈滅。GPIO管腳與對應的LED燈的關系如下表所示:

LED燈LED燈對應的GPIOLD1PD08LD2PD09LD3PD10LD4PD11蜂鳴器DEEPPC8

山東科技大學《微控制器原理》實驗指導書

STM32F103GPIO基本輸入輸出實驗2

圖2按鍵KEY硬件電路GPIO管腳與按鍵對應的關系按鍵GPIO說明確定OKPD3下拉電阻上UPPD4下拉電阻下DOWNPA8下拉電阻左LEFTPD0下拉電阻右RIGHTPD1下拉電阻用戶自定義UserPD2上拉電阻干預TamperPC13上拉電阻喚醒WakeupPA0下拉電阻四、實驗內容1.使用單步運行實現(xiàn)LD1、LD2、LD3、LD4點亮和熄滅。

2.使用軟件延時1s實現(xiàn)這四個燈交替閃爍的流水燈效果。

3.按下UP、DOWN、LEFT、RIGHT鍵分別讓對應的LD1、LD2、LD3、LD4指示燈亮。

4.按下LEFT鍵讓LD1LD2LD3LD4自左向右流水顯示;按下RIGHT鍵分別讓LD4LD3LD2LD1自右向左流水顯示。

5.按下UP鍵讓LD1LD2LD3LD4自左向右流水循環(huán)顯示;按下DOWN鍵分別讓LD4LD3LD2LD1自右向左流水循環(huán)顯示。

五、實驗原理流水燈的關鍵實際上就是如何控制STM32處理器的GPIO接口,作為IO口,輸出指定的電平信號。

STM32的IO口可以由軟件配置成8種模式:模擬輸入、輸入懸空、輸入下拉、輸入

山東科技大學《微控制器原理》實驗指導書

STM32F103GPIO基本輸入輸出實驗3上拉、開漏輸出、推挽輸出、復用功能開漏輸出和復用功能推挽輸出等。STM32每個IO口可以自由編程,單IO口寄存器必須要按32位字被訪問。STM32的很多IO口都是5V兼容的,這些IO口在與5V電平的外設連接的時候很有優(yōu)勢。

STM32的每個IO端口都有7個寄存器來控制:配置模式的2個32位的端口配置寄存器CRL和CRH、2個32位的數(shù)據寄存器IDR和ODR、1個32位的置位/復位寄存器BSRR、一個32位的復位寄存器BRR、1個32位的鎖存寄存器LCKR等。

GPIO_CR控制著每個IO口的模式及輸出速率,STM32的IO口位配置表如下表所示。

配置模式CNF1CNF0MODE1MODE0PxODR寄存器通用輸出推挽式PushPull00011011見表3.1.20或1開漏OpenDrain10或1復用功能輸出推挽式PushPull10不使用開漏OpenDrain1不使用輸入模擬輸入0000不使用浮空輸入1不使用下拉輸入100上拉輸入1STM32輸出模式配置如下表所示:

MODE[1:0]意義00保留01最大輸出速度為10MHz10最大輸出速度為2MHz11最大輸出速度為50MHz六、實驗現(xiàn)象把程序下載到神州Ⅱ號STM32開發(fā)板后,可以根據實驗設計看到四個LED(LD14)單獨或者輪流閃亮,實現(xiàn)流水燈的效果。

七、實驗報告書寫要求說明:七、實驗報告書寫要求說明:

實驗報告均按以下格式書寫

1)繪制程序流程圖。

2)寫出程序清單。

3)給出實驗中用到的數(shù)據和實驗結果。

4)通過實驗,分析你的收獲、不足、問題。

山東科技大學《微控制器原理》實驗指導書

STM32F103GPIO基本輸入輸出實驗4八、參考程序/*Includes*/#includestm32f10x.h/*Privatedefine*/#defineRCC_GPIO_LED

RCC_APB2Periph_GPIOD/*LED使用的GPIO時鐘*/#defineLEDn

4

/*神舟II號LED數(shù)量*/#defineGPIO_LED

GPIOD

/*LED使用的GPIO組*/#defineLD1_PIN

GPIO_Pin_8

/*LD1使用的GPIO管腳*/#defineLD2_PIN

GPIO_Pin_9

/*LD2使用的GPIO管腳*/#defineLD3_PIN

GPIO_Pin_10

/*LD3使用的GPIO管腳*/#defineLD4_PIN

GPIO_Pin_11

/*LD4使用的GPIO管腳*//*Privatevariables*/u8count=0;/*Privatefunctionprototypes*/voidDelay(vu32nCount);voidTurn_On_LED(u8LED_NUM);/*Privatefunctions*/intmain(void){GPIO_InitTypeDef

GPIO_InitStructure;

//定義結構體變量

/*配置神舟II號LED燈使用的GPIO管腳模式*/

RCC_APB2PeriphClockCmd(RCC_GPIO_LED,ENABLE);/*使能LED使用的GPIO時鐘*/

GPIO_InitStructure.GPIO_Pin=LD1_PIN|LD2_PIN|LD3_PIN|LD4_PIN;

GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;

GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;

GPIO_Init(GPIO_LED,GPIO_InitStructure);

/*LED燈相關的GPIO口初始化*/

GPIO_ResetBits(GPIO_LED,LD1_PIN|LD2_PIN|LD3_PIN|LD4_PIN);/*關閉所有LED燈*/

while(1)

{

GPIO_ResetBits(GPIO_LED,LD1_PIN|LD2_PIN|LD3_PIN|LD4_PIN);/*關閉所有LED燈*/

Turn_On_LED(count%4);

//點亮一個LED燈

count++;

Delay(0x2FFFFF);

}}/*點亮對應燈*/voidTurn_On_LED(u8LED_NUM){

switch(LED_NUM)

{

case0:GPIO_SetBits(GPIO_LED,LD1_PIN);break;/*點亮LD1燈*/

case1:GPIO_SetBits(GPIO_LED,LD2_PIN);break;/*點亮LD2燈*/

case2:GPIO_SetBits(GPIO_LED,LD3_PIN);break;/*點亮LD3燈*/

山東科技大學《微控制器原理》實驗指導書

STM32F103GPIO基本輸入輸出實驗5

case3:GPIO_SetBits(GPIO_LED,LD4_PIN);break;/*點亮LD4燈*/

default:

GPIO_SetBits(GPIO_LED,LD1_PIN|LD2_PIN|LD3_PIN|LD4_PIN);break;/*點亮所有燈*/

}}/********************************************************************************FunctionName

:Delay*Description

:Insertsadelaytime.*Input

:nCount:specifiesthedelaytimelength.*Output

:None*Return

:None*******************************************************************************/voidDelay(vu32nCount){

for(;nCount!=0;nCount);}/*******************(C)COPYRIGHT2022STMicroelectronics*****ENDOFFILE****/說明:

1)為了降低STM32處理器的功耗,可以依據實際的需求,選擇合適的時鐘速率,GPIO口支持的最大時鐘速率越低,它產生的功耗也越低。

2)在使用一個GPIO之前,一般需要對GPIO管腳的時鐘、GPIO管腳模式以及速率進行設定。

篇三:gpio輸入輸出實驗報告IO實驗

1、LED閃爍

2、LED流水燈

3、繼電器控制

1、GPIO設定

2、輸入與輸出及其處理

仔細預讀實驗指導電子文檔的實驗一到三及其前面的實驗流程

KeilC51軟件、ICE52仿真驅動、MEFlash編程軟件、USB驅動程序

實驗一

LED閃爍實驗任務:

1)

P0、P2端口的LED亮300ms,滅300ms,如此循環(huán)

2)

發(fā)光二極管在不停地一亮一滅,時間間隔為300ms,形成閃爍效果實驗步驟:

1)

首先安裝好相應的軟件和驅動程序

2)

連接好ME850:

將隨機USB線的扁頭端連接至計算機的USB接口,方頭端連接到ME850的USB插座上

3)

將電源開關SW1撥到USB端,電源指示燈PWR亮,表明已經正常接通電源可以做實驗了

4)

將JP1(MCU類型選擇跳線,位于鎖緊插座的手柄旁邊)

的跳線帽短接在51的位置,JP9的跳線帽全部插上;

5)

將AT89S52單片機芯片放入ME850的鎖緊插座

6)

驅動MEFlash軟件,正常打開后軟件右下角會顯示實驗儀的型號和連接狀態(tài)

7)

在軟件中器件按鈕,選擇型號AT89S52

8)

在軟件中加載按鈕,定位到產品光盤Emamples_A51\EX1_LED\LED.hex,打開,彈出加載文件對話框,按默認確定即可

9)

在軟件中擦除按鈕,再編程按鈕,編輯完畢,即可看到16個發(fā)光二極管都在閃爍了匯編源程序:

ORG

0000H

;初始地址為0000H

AJMP

MAIN

;跳轉到MAIN

ORG

0050H

;初始地址為0050HMAIN:

MOV

P0,#OFFH

;初始化P0

MOV

P2,#OFFH

;初始化P2LOOP:

MOV

P0,#O0H

;為P0賦值0

MOV

P2,#OOH

;為P2賦值0

ACALL

DELAY

;調用子程序DELAY

MOV

P0,#OFFH

;為P0賦值

MOV

P2,#OFFH

;為P2賦值

ACALL

DELAY

;調用子程序DELAY

AJMP

LOOP

;跳轉到LOOPDELAY:

MOV

R5,#3

;將3賦給寄存器R5DEL1:

MOV

R6,#200

;將200賦給寄存器R6

DEL2:

MOV

R7,#230

;將230賦給寄存器R7DEL3:

DJNZ

R7,DEL3

;第一層循環(huán)

DJNZ

R6,DEL2

;第二層循環(huán)

DJNZ

R5,DEL1

;第三層循環(huán)

RET

;返回

END

;結束試驗流程圖:

實驗結果:

1)

P0、P2端口的LED亮300ms,滅300ms,如此循環(huán)

2)

發(fā)光二極管在不停地一亮一滅,時間間隔為300ms,形成閃爍效果P0、P2端口初始化P0、P2端口送低電平所有LED點亮延時300msP0、P2端口送高電平所有LED熄滅延時300ms

問題解決及討論:

1)

JP24沒有切換到OFF端,結果P0口的8個LED不閃爍。

原因是被1602LED干擾

2)

沒有正確加載燒寫文件。

必須是先選芯片在加載文件

3)

芯片型號沒有選擇正確。

可重新選擇型號

4)

沒有放置芯片。

先放芯片,再壓下鎖緊座手柄鎖緊

5)

芯片損壞。

換新的芯片重試實驗二

流水燈實驗任務:

P0、P2端口的LED先從從右至左方向依次點亮,再從左至右方向依次點亮,如此循環(huán)形成流水燈效果實驗步驟:

1、首先在硬盤上建立一個文件夾;

2、啟動KeilC51軟件;

3、執(zhí)行KeilC51軟件的菜單Project|NewProject,彈出一個名為CreateNewProject的對話框。

輸入工程文件名,選擇保存路徑uv2后綴,保存按鈕;

4、緊接著彈出OptionsforTargetTarget1,為剛才的項目選擇ATMEL的AT89S52的CPU。

選擇之后,確定按鈕;

5、接下來彈出一個對話框提示你是否要把標準8051的啟動代碼添加項目中去,此時,否按鈕;

6、執(zhí)行菜單File|New,出現(xiàn)一個名為Text1的文檔。

接著執(zhí)行菜單File|Save彈出一個名為SaveAs的對話框,將文件名改為.asm后綴,然后保存;

7、添加源程序文件到工程中,一個空的源程序文件建成。

單擊KeilC51軟件左邊項目工作窗口Target1上的+,將其展開。

然后右擊SourceGroup1文件夾彈出下拉菜單,單擊其中的AddFilestoGroupSourceGroup1項;

8、在彈出的對話框中先選擇文件類型為AsmSourcefile(*.s*;*.src;*.a*),這時對話框內創(chuàng)建的空的源程序文件已經出現(xiàn)在項目工作窗口的SourceGroup1文件夾中;

輸入源程序代碼;

9、工具欄Optionsfortarget按鈕,彈出一個對話框,定義Xtal為11.0592.下面依序是存儲模式、程序空間大小等設置,均用默認值即可。

Output選項,選中CreateHexFile,

10、單擊編譯按鈕,編譯當前源程序;

11、運行,查看效果。

匯編源程序:

ORG

0000H

;初始化地址

AJMP

MAIN

;跳轉到MAIN

ORG

0050H

;初始化地址MAIN:

MOV

P0,#0FFH

;端口初始化

MOV

P2,#0FFH

;端口初始化LOOP:

MOV

A,#0FEH

;復制初始

MOV

R0,#08H

;移動次數(shù)LOOPL:

;左移顯示

MOV

P0,A

;送數(shù)顯式

MOV

P2,A

;送數(shù)顯式

RL

A

;左移一位

ACALL

DELAY

;延時300ms

DJNZ

R0,LOOPL

;是否左移8次

MOV

P0,#0FFH

;關閉顯示

MOV

P2,#0FFH

;關閉顯示

ACALL

DELAY

;延時300ms

MOV

A,#7FH

;賦初始值

MOV

R0,#08H

;移動次數(shù)LOOPR:

;右移顯示

MOV

P0,A

;送數(shù)顯式

MOV

P2,A

;送數(shù)顯式

RR

A

;右移一位

ACALL

DELAY

;延時300ms

DJNZ

R0,LOOPR;是否右移8次

MOV

P0,#0FFH

;關閉顯示

MOV

P2,#0FFH;關閉顯示

ACALL

DELAY

;延時300ms

AJMP

LOOP

;跳轉到LOOPDELAY:

MOV

R5,#3

;將3賦給寄存器R5DEL1:

MOV

R6,#200

;將3賦給寄存器R5DEL2:

MOV

R7,#230

;將3賦給寄存器R5DEL3:

DJNZ

R7,DEL3

;第一層循環(huán)

DJNZ

R6,DEL2

;第二層循環(huán)

DJNZ

R5,DEL1

;第三層循環(huán)

RET

;結束試驗流程圖:

實驗結果:

P0、P2端口的LED先從從右至左方向依次點亮,再從左至右方向依次點亮,如此循環(huán)形成流水燈效果問題解決及討論:

1)

沒有正確加載燒寫文件。

必須是先選芯片在加載文件

2)

芯片型號沒有選擇正確。

可重新選擇型號

3)

沒有放置芯片。

先放芯片,再壓下鎖緊座手柄鎖緊

4)

芯片損壞。

換新的芯片重試

5)

JP24沒有切換到OFF端,結果P0口的8個LED不閃爍。

原因是被1602LED干擾

實驗三

繼電器控制實驗任務:

用按鍵控制繼電器的工作狀態(tài):

K1吸和鍵,K2釋放鍵

按K1鍵,繼電器吸合,DL11燈亮。

按K2鍵,繼電器釋放,DL11燈滅。

實驗步驟:

1、首先在硬盤上建立一個文件夾;

2、啟動KeilC51軟件;

3、執(zhí)行KeilC51軟件的菜單Project|NewProject,彈出一個名為CreateNewProject的對話框。

輸入工程文件名,選擇保存路徑uv2后綴,保存按鈕;

4、緊接著彈出OptionsforTargetTarget1,為剛才的項目選擇ATMEL的AT89S52的CPU。

選擇之后,確定按鈕;

5、接下來彈出一個對話框提示你是否要把標準8051的啟動代碼添加項目中去,此時,否按鈕;

6、執(zhí)行菜單File|New,出現(xiàn)一個名為Text1的文檔。

接著執(zhí)行菜單File|Save彈出一個名為SaveAs的對話框,將文件名改為.asm后綴,然后保存;

7、添加源程序文件到工程中,一個空的源程序文件建成。

單擊KeilC51軟件左邊項目工作窗口Target1上的+,將其展開。

然后右擊SourceGroup1文件夾彈出下拉菜單,單擊其中的AddFilestoGroupSourceGroup1項;

8、在彈出的對話框中先選擇文件類型為AsmSourcefile(*.s*;*.src;*.a*),這時對話框內創(chuàng)建的空的源程序文件已經出現(xiàn)在項目工作窗口的SourceGroup1文件夾中;

輸入源程序代碼;

9、工具欄Optionsfortarget按鈕,彈出一個對話框,定義Xtal為11.0592.下面依序是存儲模式、程序空間大小等設置,均用默認值即可。

Output選項,選中CreateHexFile,

10、單擊編譯按鈕,編譯當前源程序;

11、運行,查看效果。

匯編源程序:

KEY_NEW

EQU

40H

;為標號KEY_NEW賦值為40H

KEY_OLD

EQU

41H

;為標號KEY_OLD賦值為41H

K1

BIT

P1.4

K2

BIT

P1.5

RELAY

BIT

P3.6

;繼電器控制線

ORG

0000H

;初始化地址

AJMP

MAIN

;跳轉到MAIN

ORG

0050H

;地址初始化MAIN:

MOV

SP,#60H

;設置棧指針

MOV

P0,#0FFH

;將P0端口初始化為高電平

MOV

P2,#0FFH

;將P2端口初始化為高電平

MOV

KEY_OLD,#03H

;初始鍵比較值KEY_CHK:

;循環(huán)檢測按鍵是否按下

ACALL

SCAN_KEY

;輸入按鍵狀態(tài)

XRL

A,KEY_OLD

;查按鍵是否改變

JZ

KEY_CHK

;若無鍵被按則跳轉到KEY_CHK

ACALL

DELAY

;延時去抖

ACALL

SCAN_KEY

;再次檢查按鍵值

XRL

A,KEY_OLD

;寄存器KEY_OLD異或到累加器A

JZ

KEY_CHK

;累加器為零則跳轉到KEY_CHK

MOV

KEY_OLD,KEY_NEW;保存按鍵狀態(tài)

ACALL

PROC_KEY

;絕對調用子程序PROC_KEY

AJMP

KEY_CHK

;絕對跳轉到KEY_CHKSCAN_KEY:

CLR

A

;累加器A清零

MOV

C,K1

;將K1的值賦給C

MOV

ACC.0,C

;將C的值賦給累加器A

MOV

C,K2

;將K2的值賦給C

MOV

ACC.1,C

;將C的值賦給A

MOV

KEY_NEW,A;無鍵按下KEY_NEW

RET

;返回PROC_KEY:

MOV

A,KEY_NEW;將KEY_NEW的值賦給累加器A

JNB

ACC.0,PROC_K1;K1鍵按下

JNB

ACC.1,PROC_K2;K2鍵按下

RET

;返回PROC_K1:

;按鍵K1處理程序

CLR

RELAY

;繼電器吸合

RET

;返回PROC_K2:

;按鍵K2處理程序

SETB

RELAY

;繼電器釋放

RET

;返回DELAY:

;延時子程序R6、R7控制循環(huán)

MOV

R6,#10

;R6賦值為10DEL1:

MOV

R7,#185

;R7賦值為185DEL2:

NOP

;空操作,延遲一個機器周期

NOP

NOP

DJNZ

R7,DEL2

;第一層循環(huán)

DJNZ

R6,DEL1

;第二層循環(huán)

RET

;返回

END

;結束

試驗流程圖:

實驗結果:

用按鍵控制繼電器的工作狀態(tài):

K1吸和鍵,K2釋放鍵

按K1鍵,繼電器吸合,DL11燈亮。

按K2鍵,繼電器釋放,DL11燈滅。

問題解決及討論:

1)

沒有正確加載燒寫文件。

必須是先選芯片在加載文件

2)

芯片型號沒有選擇正確。

可重新選擇型號

3)

沒有放置芯片。

先放芯片,再壓下鎖緊座手柄鎖緊

4)

芯片損壞。

換新的芯片重試

5)

JP24沒有切換到OFF端,結果P0口的8個LED不閃爍。

原因是被1602LED干擾

篇四:gpio輸入輸出實驗報告/p>院

系:計算機科學學院

業(yè):

自動化

級:

11級

號:

11064029

名:

楊勝提

指導教師:

劉科

2022年

5月

8日

2年級

11級班級

11級自動化一班

學號

11064029專業(yè)自動化

姓名

楊勝提題目名稱實驗一、GPIO實驗

實驗設計要求

控制EduKitM3實驗平臺的發(fā)光二極管LED1、LED2、LED3、LED4,使它們有規(guī)律的點亮,具體順序如下:

LED1亮LED2亮LED3亮LED4亮,如此反復,當按下EduKitM3實驗平臺上的Key按鈕時,燈全部熄滅,2秒鐘后發(fā)光二極管全部點亮,再過一秒鐘后返回被中斷前的狀態(tài),有規(guī)律的依次點亮。

實驗設計思路

1、硬件電路設計

在EduKitM3實驗平臺上,LED1、LED2、LED3、LED4分別與PC6、PC7、PC8、PC9相連,按鍵Key與PB9相連。

2、軟件程序設計(1)配置PB口第9個引腳作為外部中斷,下降延觸發(fā);

(2)讀取端口數(shù)據輸出寄存器GPIOC_ODR[15:0]的值,因為C口[9:6]位和四個LED燈連通。

(3)初始化時,LED依次點亮,當按下Key鍵時產生中斷;

(4)中斷服務子程序內容:燈全部熄滅,2秒鐘后發(fā)光二極管全部點亮,再過1秒鐘后中斷返回。整個工程包含3個源文件:STM32F10x.s、stm32f10x_it.c和main.c,其中STM32F10x.s為啟動代碼,所有中斷服務子程序均在stm32f10x_it.c中,其它函數(shù)則在main.c中。

3實驗步驟與結果分析

運行過程

(1)使用KeiluVision3通過ULINK2仿真器連接EduKitM3實驗平臺,打開實驗例程目錄GPIO_TEST子目錄下的GPIO.Uv2例程,編譯鏈接工程;

(2)選擇軟件調試模式,MDK的Debug菜單,選擇Start/StopDebugSession項或Ctrl+F5鍵,在邏輯分析儀中添加GPIOC_ODR.6、GPIOC_ODR.7、GPIOC_ODR.8、GPIOC_ODR.9,Run按鈕即可在邏輯分析儀中看到如圖711;

(3)選擇硬件調試模式,選擇Start/StopDebugSession項或Ctrl+F5鍵,下載程序并運行,觀察LED燈的變化情況;當程序運行在while循環(huán)體內時,按Key鍵,程序進入中斷服務子程序EXTI9_5_IRQHandler(),單步運行,觀察LED的變化情況。

(4)退出Debug模式,打開Flash菜單Download,將程序下載到EduKitM3實驗平臺的Flash中,按RESET鍵復位,觀察LED燈的情況,正常情況應如下。

LED燈狀態(tài)1

明LED1LED2LED3

LED4

程序正常運行,發(fā)光二極管依次點亮滅

外部信號輸入,發(fā)生中斷,執(zhí)行中斷處理程序亮

LED燈狀態(tài)2

明LED1LED2LED3

LED4

程序正常運行,發(fā)光二極管依次點亮亮

外部信號輸入,發(fā)生中斷,執(zhí)行中斷處理程序亮

4

主要程序代碼分析

軟件程序設計

1、配置PB口第9個引腳作為外部中斷,下降延觸發(fā);

/*ConfigurePB9asinputfloating(EXTILine9)*/

GPIO_InitStructure.GPIO_Pin=GPIO_Pin_9;

//引腳選擇

GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING;//輸入模式選擇GPIO_Init(GPIOB,GPIO_InitStructure);

2、讀取端口數(shù)據輸出寄存器GPIOC_ODR[15:0]的值,因為C口[9:6]位和四個LED燈連通。

方法一:

/*ConfigurePC.asOutputpushpull*/

GPIO_InitStructure.GPIO_Pin=GPIO_Pin_6|GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9;

//與LED燈連通的引腳選擇

GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;

//設置輸出引腳的速度

GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;

//設置輸出引腳的模式為推挽輸出模式

GPIO_Init(GPIOC,GPIO_InitStructure);方法二:

利用端口配置低寄存器(GPIOxCRL)(x=A..E)和端口配置高寄存器(GPIOxCRH)(x=A..E)

GPIOC_CRL=0xcc444444;

GPIOC_CRH=0x444444cc;

3、初始化時,LED依次點亮,當按下Key鍵時產生中斷;/*ConfigureEXTILine9togenerateaninterruptonfallingedge*/

EXTI_InitStructure.EXTI_Line=EXTI_Line9;

EXTI_InitStructure.EXTI_Mode=EXTI_Mode_Interrupt;

EXTI_InitStructure.EXTI_Trigger=EXTI_Trigger_Falling;

5

EXTI_InitStructure.EXTI_LineCmd=ENABLE;

EXTI_Init(EXTI_InitStructure);4、LED依次點亮的子程序

for(;;)

{

GPIO_ResetBits(GPIOC,GPIO_Pin_6|GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9);

GPIO_SetBits(GPIOC,GPIO_Pin_6);算法1

GPIOCODR=0xfffffc4f;

//1

高16位保留,全為F,底16位相應置高或置底

/*Delay(800);

GPIOCODR=0xfffffc0f;

GPIOCODR|=0x00000cc0;

//2

Delay(800);

GPIOCODR=0xfffffc0f;

GPIOCODR|=0x00000dc0;

//3

Delay(800);

GPIOCODR=0xfffffc0f;

GPIOCODR|=0x00000fc0;

//4

Delay(800);

算法2

GPIO_ResetBits(GPIOC,GPIO_Pin_6);//使Pin_6置低

Delay(800);

GPIO_SetBits(GPIOC,GPIO_Pin_6);//使Pin_6置高

Delay(100);

GPIO_ResetBits(GPIOC,GPIO_Pin_7);

Delay(800);

GPIO_SetBits(GPIOC,GPIO_Pin_7);

Delay(100);

GPIO_ResetBits(GPIOC,GPIO_Pin_8);

Delay(800);

GPIO_SetBits(GPIOC,GPIO_Pin_8);

Delay(100);

GPIO_ResetBits(GPIOC,GPIO_Pin_9);

Delay(800);

6

GPIO_SetBits(GPIOC,GPIO_Pin_9);

Delay(100);

}

//

使用這兩個函數(shù)對引腳進行配置。

(寫不完時,可調整表結構。)

7心得體會

(這部分內容要手寫)

成績評定

教師簽名:

篇五:gpio輸入輸出實驗報告式實驗報告姓名:

鄧慶學號:

1075490019學院:

通信工程學院

實驗一電源、復位、時鐘管理單元(一)實驗目的1.了解如何配置不同的時鐘。

如何使用MRCC的功能而讀取芯片上不用的時鐘的當前狀態(tài)和頻率。

如何處理外部4MHZ的石英振蕩器損壞情況的檢測。

(二)實驗原理STR750的時鐘輸入源共有5個,這些時鐘源為MCU系統(tǒng)提供時鐘,從而得到HCLK和PCLK。

1.內部自由運行的振蕩器可以提供1~10MHZ的時鐘,他們作為應急時鐘。

它由配置在自由云子那種模式下的PLL組成。

2.OSC4M:4MHZ主振蕩器。

3.OSC32K:32.768KMZ振蕩器即可以驅動系統(tǒng)時鐘,也可以驅動RTC。

4.LPOSC:

內部的提耗能RC振蕩器,所提供的頻率大約為300KMZ,該時鐘可以驅動系統(tǒng)時鐘,也可以驅動RTC。

5.USB_CK:可以專門為USB提供48KHZ的時鐘。

(三)實驗步驟1.在IAR集成開發(fā)環(huán)境下創(chuàng)建工程,命名并保存。

2.像工程中添加下列文件。

+75x_conf.h2.3.+75x_it.c+main.c3.從庫文件里向工程添加startup文件用于初始化和中斷向量的設置,并添加下列所有文件。

+75x_lib.c+75x_gpio.c+75x_mrcc.c+75x_eic.c+75x_cfg.c4.設置工程項目的配置,編譯連接,并將生成的目標文件下載到目標板得RAM中進行調試。

5.運行程序,觀察結果。

(四)實驗結果引腳P0.12上連接了一個燈,它會隨著系統(tǒng)時鐘不斷的閃爍。

如果再OSC4M上沒有時鐘的話該燈就會停止閃爍。

(五)心得缺少了時鐘,就好像人的脈搏不在跳動一樣,可以想象時鐘的作用很大,通過本次實驗使我了解到STR750的時鐘配置,以及相應的寄存器的使用,對于STR750的時鐘分配以及產生應用有了進一步的熟悉。

實驗二通用輸入/輸出端口(GPIO)(一)實驗目的1.通過實驗,理解通用輸入輸出端口的工作過程和作用。

2.學習在軟件系統(tǒng)的設計中輸入使用輸入輸出的端口。

(二)實驗原理1.GPIO介紹:

它是相對于芯片本身而言的,如某個引腳是芯片的GPIO腳,則該引腳可以作為輸入輸出高低電平使用,當然某些引腳具有復位功能,既可以用作GPIO也可以用作其他功能。

2.GPIO的工作過程1)每個通用IO端口都有3個32為的配置寄存器、1個32位的數(shù)據寄存器和1個32位的可屏蔽寄存器。

根據Datasheet中所列的通用IO端口的特殊硬件特征,通用IO端口的每一位都可以由軟件單獨配置成下面的幾種模式:

a)輸入懸空;b)輸入上拉;c)輸入下拉;d)模擬輸入;e)輸出開漏;f)輸出推免;g)可選功能;2)雖然每個IO端口位都可以自由編程,但是IO端口寄存器只能進行32位訪問,不允許進行字節(jié)或者比特訪問。

在剛復位之后,可選功能還處于無效狀態(tài),IO端口配置為輸入懸空模式。

當被配置為輸出時,寫入到IO數(shù)據寄存器中的數(shù)據就加載到輸出寄存器中。3)4)輸出鎖存器所有的輸出的值,可以在推免模式或者開漏模式使用輸出驅動。

在每個APB時鐘周期里輸入鎖存器IO引腳的數(shù)據。

讀IO數(shù)據寄存器是讀輸入5)寄存器還是輸出寄存器是由端口的配置決定。

在除Standby模式外的所有電源模式中,GPIO的狀態(tài)是保留的,Standby模式中所有GPIO引腳為高祖狀態(tài)。

6)(三)實驗步驟1.在IAR集成開發(fā)環(huán)境下新建一個名為GPIO的工程,然后保存。

2.向工程里添加文件:

+75x_conf.h+75x_it.c+main.c3.從庫文件里向工程添加startup文件用于初始化和中斷向量的設置,并添加下列所有文件。

+75x_lib.c+75x_gpio.c+75x_mrcc.c4.設置工程項目的配置,編譯連接,并將生成的目標文件下載到目標板得RAM中進行調試。

5.運行程序,觀察結果。

(四)實驗結果運行程序后觀察到,LED1、LED2、LED3、LED4依次輪流閃爍。

(五)收獲心得通過本次實驗,學習了GPIO的功能和編程過程,深刻理解了GPIO的端口的輸入輸出模式及端口寄存器是如何配置,同時也學習到了GPIO相關寄存器的種類和地址等工作方式,為以后的學習增加了知識儲備,打下了基礎。

實驗三EIC增強型中斷控制器(一)實驗目的1.通過實驗,了解增強型中斷控制的工作過程和作用。

了解EIC對多通道中斷處理機制和實現(xiàn)方法。

學習使用EIC的寄存器設置流程和編程方法。

(二)實驗原理1.EIC介紹:

ARM內核提供兩種中斷級別:

FIQ主要永固快速、低反應時間的中斷處理;IRQ主要用于其它的普通中斷處理。

STR750中斷管理系統(tǒng)提供了兩個中斷管理模塊;增強型中斷控制器EIC和外部中斷控制EXTIT。

EIC實現(xiàn)了對多個中斷通道的2.3.硬件處理、中斷優(yōu)先級決策并計算中斷向量。

EIC的工作過程:

1)根據相關的通道屏蔽位接受或者拒絕響應的中斷要求。

2)將所有掛起的IRA中斷請求的優(yōu)先級與當前的優(yōu)先級比較,如果中斷請求的優(yōu)先級高于當前優(yōu)先級,則這個IRQ請求會傳給ARM7內核。

如果中斷請求的優(yōu)2.先級低于當前的優(yōu)先級,則根據實際情況講中斷請求掛起或者屏蔽。

將最高優(yōu)先級的IRQ中斷的地址向量加載熬中斷向量寄存器中。

一旦ARM內核響應了一個新的IRQ中斷請求,EIC就會將以前的優(yōu)先級保存在3)4)硬件優(yōu)先級棧中。

當ARM內核響應了一個新的IRQ中斷請求中,用新的優(yōu)先級更新當前中斷優(yōu)5)先級寄存器。

(三)實驗步驟1.在IAR集成開發(fā)環(huán)境下創(chuàng)建工程,命名并保存。

2.像工程中添加下列文件。

+75x_conf.h+75x_it.c+main.c3.從庫文件里向工程添加startup文件用于初始化和中斷向量的設置,并添加下列所有文件。

+75x_lib.c+75x_gpio.c+75x_mrcc.c+75x_time.c+75x_eic.c+75x_cfg.c4.設置工程項目的配置,編譯連接,并將生成的目標文件下載到目標板得RAM中進行調試。

5.運行程序,觀察結果。

(四)實驗結果運行程序后觀察到LED4、LED3和LED2分別隔一定時間閃爍,LED4頻率最高,LED3次之,LED2閃爍頻率最低。

(五)獲得心得通過本次實驗,學習了EIC的功能和編程過程,對中斷子程序的調用和返回有了更具體

的理解。

實驗四EXTIT外部中斷控制器(一)實驗目的1.通過實驗,學習EXTIT對外設中斷請求響應和處理的工作工程。

學習使用EXTIT的寄存器設置流程和編程方法。

(二)實驗原理1.EXTIT介紹:

外部中斷控制器可以對外來自外設的中斷進行響應。

EXTIT包括16個2.用于產生中斷請求的邊緣檢測器。每個中斷都能給獨自的設置觸發(fā)事件也可以獨立的被屏蔽。

EXTIT的功能描述:

1)中斷請求可以通過硬件和軟件兩種方式,要產生硬件中斷,中斷線要被設置并時能,這個需要將觸發(fā)器設置成需要的極性,通過將屏蔽寄存器中相應位置12.使能中斷請求。

當選擇的邊沿在外部中斷線上發(fā)生時,中斷請求就產生,這個中斷請求在掛起寄存器被設置1后復位。

2)本實驗使用軟件模擬產生中斷,過程如下:

配置16條中短線的屏蔽位(EXTIT_MR);置位軟件中斷寄存器中需要的位(EXTIT_SWIR)

(三)實驗步驟1.在IAR集成開發(fā)環(huán)境下創(chuàng)建工程,命名并保存。

2.像工程中添加下列文件。

+75x_conf.h+75x_it.c+main.c3.從庫文件里向工程添加startup文件用于初始化和中斷向量的設置,并添加下列所有文件。

+75x_lib.c+75x_gpio.c+75x_m

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論