gpio输入输出实验报告5篇gpio输入输出实验报告 一、二、一、二、点时在S课程名实验名专业班实验目的:(1)熟悉人(2)掌握在(3)掌握在合成的实验内容:(1)将人体点击初始化时,即程下面是小编为大家整理的gpio输入输出实验报告5篇,供大家参考。
篇一:gpio输入输出实验报告
、二、一、二、点时在S课程 名实验 名专业 班实验目的 :(1)熟悉人(2)掌握在(3)掌握在合成的实验内容 :(1)将人体点击初始化时,即程序在实验 12-Security Cam名 称:嵌名 称:
实班 级:
:
人体红外传在 Window在 Windows 的方法。
:
体红外传感化 PIR 按钮,序检测到下降-1 的基础上mera。即检嵌 入式 Win n验 12-PIR
姓 名传感器、语音s 10 IoT Co10 IoT Cor感器 PIR、L,若附近有降沿,LED上,使用树检测到附近n n dows 程 序传感器和 语名 :
音识别和文ore 中使用re 中使用 SLED 灯分别有人活动时D 灯熄灭,莓派、人体有人活动时1
序 开发 语 音识别 实
学号:文本转语音(GPIO 读取SpeechReco别连接到树莓,即程序检与应用程序体红外传感时,程序自实 验
(TTS)。
取人体红外传ognition 和 S莓派的 GPI检测到上升序界面上的感器 PIR、L动拍照,存
实验 日传感器输出SpeechSyntIO5 和 GPIO沿,指示的状态同步。LED 灯、电存储到本地成 绩教 师日 期:
出的方法。
thesis 进行语O6,运行程的 LED 灯亮如下图所电阻、面包板地。
绩 绩:
师 师:
语音识别和程序 12-1 后亮;没有人所示。
板和跳线,
和语音后,先活动 实现
面语引所用请三、1(2)使用树面包板和跳语音控制一引脚连接的所示。
用户可以在请在此基础实验结果1. 利用 Frit树莓派(Io跳线,实现本一个 LED 的的 LED 灯。在应用程序界础上,添加(注意:
所tzing 软件画oT Core 系统本地的语音的场景,即使同时,可以界面输入文LED 灯,修所 有截图需 要画出硬件连附
硬统烧写版本音合成和语音使用语音 tu以在 Visual文字,点击按修改语音定要 加注自 己连接图,给出附调试截图硬件连接图本为 14986)音识别,从urn on bedrl Studio 的按钮,可以定义文件和程己 的姓名+ 学出实验内容图。
图:
)、USB 声从而达到控制oom led 或Output 窗口以让系统读程序,从而学 号水印):1 对应的所卡、耳机、制 LED 灯的者 turn off b口看到语音出该内容,而达到控制两
所有关键代码麦克风、的目的。程bedroom le音识别的实时如下图所两个不同的码,给出测试LED 灯、程序 12-2 给ed 来控制 G时结果。如示。
的 LED 的功试结果和说电阻、给出了GPIO5如下图 功能。
说明,
硬件连接图如左图所示,将 led 连接在 GPIO5 上,将 pri 的数据输出接口接在 GPIO18 上
关键代码:
private void PinPIR_ValueChanged(GpioPin sender, GpioPinValueChangedEventArgs e)
{
// toggle the state of the LED every time the button is pressed
if (e.Edge == GpioPinEdge.RisingEdge)
{
ledPin.Write(GpioPinValue.Low);
}
if (e.Edge == GpioPinEdge.FallingEdge)
{
ledPin.Write(GpioPinValue.High);
}
var task = Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () => {
if (e.Edge == GpioPinEdge.FallingEdge)
{
ledEllipse.Fill = grayBrush;
GpioStatus.Text = "PIR FallingEdge";
}
if (e.Edge == GpioPinEdge.RisingEdge)
{
ledEllipse.Fill = redBrush;
GpioStatus.Text = "PIR RisingEdge";
takePhoto_Click(takePhoto, new RateChangedRoutedEventArgs());
}
});
}
如上面的代码所示在原来的代码段中调用 takePhoto_Click(takePhoto, new RateChangedRoutedEventArgs());函数,在主页面的圆点控制的代码中添加调用拍照功能的代码。当人体红外传感器检测到时输出高电平,GPIO 口接受到后检测到上升沿便会进行拍照并且点亮 led
实验结果:2. 利用 Frit附调试截图硬件连接图关键代码:
private as
{
Windows.Appl tzing 软件画图。
图:
ync void Ligif (target ={
//======
if (comm
{
if
{
icationModel画出硬件连ghtControl(s== "Bedroom"============mand == "ON"
(BedRoomLED_await l.Core.CoreA连接图,给出string comma") =========== ")
_GpioPin != Application. 实会进行展示框到红外点亮。执行任 出实验内容and, string
null) MainView.Cor实验结果如行拍照,并框下的指示外信息,同。没有检测任何操作。2 对应的所 如右图所GPIO 引脚
target) reWindow.Dis图所示,当并且将照片进示点便会由灰同时连接在树测到红外信息 所有关键代码所示,在此次脚,分别为spatcher.Run当红外设备检进行保存,灰色变为红树莓派 GPI息时,便不码,给出测试次的试验中为 GPOI6 和nAsync(Window检测到有人于此同时,红色以指示检IO 上的 led不会拍照。也试结果和说中需要用到两和 GPIO12。ws.UI.Core.C人时就照片检测d 小灯也不会说明,两个 CoreDi
spatcherPriority.Normal, () =>
{
bedRoomTimer.Start();
}
);
}
}
else if (command == "OFF")
{
await Windows.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;
}
}
);
}
//===========================
}
else if (target == "kitchen")
{
//===========================
if (command == "ON")
{
if (kITCHENLED_GpioPin != null)
{
await Windows.ApplicationModel.Core.CoreApplication.MainView.CoreWindow.Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, () =>
{
kITCHENTimer.Start();
}
);
}
}
else if (command == "OFF")
{
await Windows.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);
}
private void InitBedRoomGPIO()
{
var gpio = GpioController.GetDefault();
// Show an error if there is no GPIO controller
if (gpio == null)
{
BedRoomLED_GpioPin = null;
//GpioStatus.Text = "There is no GPIO controller on this device.";
return;
}
BedRoomLED_GpioPin = gpio.OpenPin(BedRoomLED_PINNumber);
BedRoomLED_GpioPinValue = GpioPinValue.High;
BedRoomLED_GpioPin.Write(BedRoomLED_GpioPinValue);
BedRoomLED_GpioPin.SetDriveMode(GpioPinDriveMode.Output);
//GpioStatus.Text = "GPIO pin initialized correctly.";
}
private void InitKITCHENGPIO()
{
var gpio = GpioController.GetDefault();
// Show an error if there is no GPIO controller
if (gpio == null)
{
kITCHENLED_GpioPin = null;
//GpioStatus.Text = "There is no GPIO controller on this device.";
return;
}
实验结果:
当语音输入“hi jack”时便会启动程序,程序会返回“hi jack what can I do for you”。然后便可以进行命令输入。当语音输入“turn on the …”便可以进行用语音输入控制小灯的亮灭。
实验结果如左图所示,当声音输入开灯的命令之后便会将灯打开途中两个灯分别代表卧室和厨房的灯,从中可以看出实验成功将两个地方的灯分别点亮。
四、实验总结(请列出实验过程中遇到的问题和解决方法):
由于此次的实验比较简单基本上没有遇到什么很难的问题,主要出现的问题还是之前出现过的那些,由于 takephoto_Click 为前台的事件,因此需要将该调用放入 UI 更改程序中否则无法成功。四、实验总结(请列出实验过程中遇到的问题和解决方法):
由于此次的实验比较简单基本上没有遇到什么很难的问题,主要出现的问题还是之前出现过的那些,由于 takephoto_Click 为前台的事件,因此需要将该调用放入 UI 更改程序中否则无法成功。
篇二:gpio输入输出实验报告
科技大学《微控制器原理》实验指导书STM32F103-GPIO 基本输入输出实验 1实验 01 STM32F103-GPIO 基本输入输出实验
实验 01 STM32F103-GPIO 基本输入输出实验
一、实验目的
学习 STM32F103VCT6 单片机的通用 GPIO 的基本输出输入功能,主要了解 STM32 的GPIO 的原理和应用。
二、实验设备 1) 装有 RV MDK 仿真软件的 Pentium 以上的计算机一套; 2) J-Link-ARM V8 仿真器一套; 3) STM32F103VCT 的神舟 II 号开发板一套。
三、实验电路原理图及其说明 在神州Ⅱ号 STM32 开发板中,一共有 5 个 LED 指示灯,其中一个是电源指示灯LD5,其他的 4 个 LED (LD1、LD2、LD3 和 LD4)由 GPIO-PD 控制,4 个 LED 分别串了 470KΩ的电阻,起限流作用防止电流过大损坏 LED 和 GPIO 口。电路原理图如图 1 所示。
图 1 STM32F103GPIO-LED 电路原理图图 当 GPIO 管脚输出高电平时,对应的 LED 灯亮;当 GPIO 管脚输出低电平时对应的LED 灯灭。GPIO 管脚与对应的 LED 灯的关系如下表所示:
LED 灯 LED 灯对应的 GPIO LD1 PD08 LD2 PD09 LD3 PD10 LD4 PD11 蜂鸣器 DEEP PC8
山东科技大学《微控制器原理》实验指导书
STM32F103-GPIO 基本输入输出实验 2
图 2 按键 KEY 硬件电路 GPIO 管脚与按键对应的关系 按键 GPIO 说明 确定 OK PD3 下拉电阻 上 UP PD4 下拉电阻 下 DOWN PA8 下拉电阻 左 LEFT PD0 下拉电阻 右 RIGHT PD1 下拉电阻 用户自定义 User PD2 上拉电阻 干预 Tamper PC13 上拉电阻 唤醒 Wakeup PA0 下拉电阻 四、实验内容 1. 使用单步运行实现 LD1、LD2、LD3、LD4 点亮和熄灭。
2. 使用软件延时 1s 实现这四个灯交替闪烁的流水灯效果。
3. 按下 UP、DOWN、LEFT、RIGHT 键分别让对应的 LD1、LD2、LD3、LD4 指示灯亮。
4. 按下 LEFT 键让 LD1→LD2→LD3→LD4 自左向右流水显示;按下 RIGHT 键分别让LD4→LD3→LD2→LD1 自右向左流水显示。
5. 按下 UP 键让 LD1→LD2→LD3→LD4 自左向右流水循环显示;按下 DOWN 键分别让LD4→LD3→LD2→LD1 自右向左流水循环显示。
五、实验原理 流水灯的关键实际上就是如何控制 STM32 处理器的 GPIO 接口,作为 IO 口,输出指定的电平信号。
STM32 的 IO 口可以由软件配置成 8 种模式:模拟输入、输入悬空、输入下拉、输入
山东科技大学《微控制器原理》实验指导书
STM32F103-GPIO 基本输入输出实验 3上拉、开漏输出、推挽输出、复用功能开漏输出和复用功能推挽输出等。STM32 每个 IO口可以自由编程,单 IO 口寄存器必须要按 32 位字被访问。STM32 的很多 IO 口都是 5V兼容的,这些 IO 口在与 5V 电平的外设连接的时候很有优势。
STM32 的每个 IO 端口都有 7 个寄存器来控制:配置模式的 2 个 32 位的端口配置寄存器 CRL 和 CRH、2 个 32 位的数据寄存器 IDR 和 ODR、1 个 32 位的置位/复位寄存器 BSRR、一个 32 位的复位寄存器 BRR、1 个 32 位的锁存寄存器 LCKR 等。
GPIO_CR 控制着每个 IO 口的模式及输出速率,STM32 的 IO 口位配置表如下表所示。
配置模式 CNF1 CNF0 MODE1 MODE0 PxODR 寄存器 通用输出 推挽式 Push-Pull 0 0 01 10 11 见表 3.1.2 0 或 1 开漏 Open-Drain 1 0 或 1 复 用 功 能输出 推挽式 Push-Pull 1 0 不使用 开漏 Open-Drain 1 不使用 输入 模拟输入 0 0 00 不使用 浮空输入 1 不使用 下拉输入 1 0 0 上拉输入 1 STM32 输出模式配置如下表所示:
MODE[1:0] 意义 00 保留 01 最大输出速度为 10MHz 10 最大输出速度为 2MHz 11 最大输出速度为 50MHz 六、实验现象 把程序下载到神州Ⅱ号 STM32 开发板后,可以根据实验设计看到四个 LED(LD1-4)单独或者轮流闪亮,实现流水灯的效果。
七、实验报告书写要求 说明:七、实验报告书写要求 说明:
实验报告均按以下格式书写
1) 绘制程序流程图。
2) 写出程序清单。
3) 给出实验中用到的数据和实验结果。
4) 通过实验,分析你的收获、不足、问题。
山东科技大学《微控制器原理》实验指导书
STM32F103-GPIO 基本输入输出实验 4八、参考程序 /* Includes ------------------------------------------------------------------*/ #include "stm32f10x.h" /* Private define ------------------------------------------------------------*/ #define RCC_GPIO_LED
RCC_APB2Periph_GPIOD /*LED 使用的 GPIO 时钟*/ #define LEDn
4
/*神舟 II 号 LED 数量*/ #define GPIO_LED
GPIOD
/*LED 使用的 GPIO 组*/ #define LD1_PIN
GPIO_Pin_8
/*LD1 使用的 GPIO 管脚*/ #define LD2_PIN
GPIO_Pin_9
/*LD2 使用的 GPIO 管脚*/ #define LD3_PIN
GPIO_Pin_10
/*LD3 使用的 GPIO 管脚*/ #define LD4_PIN
GPIO_Pin_11
/*LD4 使用的 GPIO 管脚*/ /* Private variables ---------------------------------------------------------*/ u8 count=0; /* Private function prototypes -----------------------------------------------*/ void Delay(vu32 nCount); void Turn_On_LED(u8 LED_NUM); /* Private functions ---------------------------------------------------------*/ int main(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);
} } /*点亮对应灯*/ void Turn_On_LED(u8 LED_NUM) {
switch(LED_NUM)
{
case 0: GPIO_SetBits(GPIO_LED,LD1_PIN); break; /*点亮 LD1 灯*/
case 1: GPIO_SetBits(GPIO_LED,LD2_PIN); break; /*点亮 LD2 灯*/
case 2: GPIO_SetBits(GPIO_LED,LD3_PIN); break; /*点亮 LD3 灯*/
山东科技大学《微控制器原理》实验指导书
STM32F103-GPIO 基本输入输出实验 5
case 3: GPIO_SetBits(GPIO_LED,LD4_PIN); break; /*点亮 LD4 灯*/
default:
GPIO_SetBits(GPIO_LED,LD1_PIN|LD2_PIN|LD3_PIN|LD4_PIN); break;/*点亮所有灯*/
} } /******************************************************************************* * Function Name
: Delay * Description
: Inserts a delay time. * Input
: nCount: specifies the delay time length. * Output
: None * Return
: None *******************************************************************************/ void Delay(vu32 nCount) {
for(; nCount != 0; nCount--); } /******************* (C) COPYRIGHT 2008 STMicroelectronics *****END OF FILE****/ 说明:
1) 为了降低STM32处理器的功耗,可以依据实际的需求,选择合适的时钟速率,GPIO口支持的最大时钟速率越低,它产生的功耗也越低。
2) 在使用一个 GPIO 之前,一般需要对 GPIO 管脚的时钟、GPIO 管脚模式以及速率进行设定。
篇三:gpio输入输出实验报告
IO 实验 【实验内容】1、 LED 闪烁
2、 LED 流水灯
3、 继电器控制 【需要了解的知识】
1、 GPIO 设定
2、 输入与输出及其处理 【实验预习】
仔细预读实验指导电子文档的实验一到三及其前面的实验流程 【实验设备】
Keil C51 软件、 ICE52 仿真驱动、 MEFlash 编程软件、 USB 驱动程序
【实验过程】
实验一
LED 闪烁 实验任务:
1)
P0、 P2 端口的 LED 亮 300ms, 灭 300ms, 如此循环
2)
发光二极管在不停地一亮一灭, 时间间隔为 300ms, 形成闪烁效果 实验步骤:
1)
首先安装好相应的软件和驱动程序
2)
连接好 ME850:
将随机 USB 线的扁头端连接至计算机的 USB 接口, 方头端连接到 ME850 的 USB 插座上
3)
将电源开关 SW1 拨到 USB 端, 电源指示灯“PWR” 亮, 表明已经正常接通电源可以做实验了
4)
将 JP1(MCU 类型选择跳线, 位于锁紧插座的手柄旁边)
的跳线帽短接在“51” 的位置, JP9 的跳线帽全部插上;
5)
将 AT89S52 单片机芯片放入 ME850 的锁紧插座
6)
驱动 MEFlash 软件, 正常打开后软件右下角会显示实验仪的型号和连接状态
7)
在软件中点击“器件” 按钮, 选择型号“AT89S52”
8)
在软件中点击“加载” 按钮, 定位到产品光盘Emamples_A51\EX1_LED\LED. hex, 点击“打开” , 弹出“加载文件” 对话框, 按默认点击确定即可
9)
在软件中点击“擦除” 按钮, 再点击“编程” 按钮, 编辑完毕, 即可看到 16 个发光二极管都在闪烁了 汇编源程序:
ORG
0000H
; 初始地址为 0000H
AJMP
MAIN
; 跳转到 MAIN
ORG
0050H
; 初始地址为 0050H MAIN:
MOV
P0, #OFFH
; 初始化 P0
MOV
P2, #OFFH
; 初始化 P2 LOOP:
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
; 跳转到 LOOP DELAY:
MOV
R5, #3
; 将 3 赋给寄存器 R5 DEL1:
MOV
R6, #200
; 将 200 赋给寄存器 R6
DEL2:
MOV
R7, #230
; 将 230 赋给寄存器 R7 DEL3:
DJNZ
R7 , DEL3
; 第一层循环
DJNZ
R6, DEL2
; 第二层循环
DJNZ
R5, DEL1
; 第三层循环
RET
; 返回
END
; 结束 试验流程图:
实验结果:
1)
P0、 P2 端口的 LED 亮 300ms, 灭 300ms, 如此循环
2)
发光二极管在不停地一亮一灭, 时间间隔为 300ms, 形成闪烁效果 P0、 P2 端口初始化P0、 P2 端口送低电平所有 LED 点亮 延时 300ms P0、 P2 端口送高电平所有 LED 熄灭 延时 300ms
问题解决及讨论:
1)
JP24 没有切换到“OFF” 端, 结果 P0 口的 8 个 LED 不闪烁。
原因是被1602LED 干扰
2)
没有正确加载烧写文件。
必须是先选芯片在加载文件
3)
芯片型号没有选择正确。
可重新选择型号
4)
没有放置芯片。
先放芯片, 再压下锁紧座手柄锁紧
5)
芯片损坏。
换新的芯片重试 实验二
流水灯 实验任务:
P0、 P2 端口的 LED 先从从右至左方向依次点亮, 再从左至右方向依次点亮, 如此循环形成流水灯效果 实验步骤:
1、 首先在硬盘上建立一个文件夹;
2、 启动 Keil C51 软件;
3、 执行 Keil C51 软件的菜单“Project| New Project……” , 弹出一个名为“Create New Project” 的对话框。
输入工程文件名, 选择保存路径 uv2 后缀,点击“保存” 按钮;
4、 紧接着弹出“Options for Target‘Target 1’”, 为刚才的项目选择 ATMEL的 AT89S52 的 CPU。
选择之后, 点击“确定” 按钮;
5、 接下来弹出一个对话框提示你是否要把标准 8051 的启动代码添加项目中去, 此时, 点击“否” 按钮;
6、 执行 菜单“File| New……”, 出现一个名为“Text1” 的文档。
接着执行菜单“File| Save” 弹出一个名为“Save As” 的对话框, 将文件名改为“. asm”后缀, 然后保存;
7、 添加源程序文件到工程中, 一个空的源程序文件建成。
单击 Keil C51 软件左边项目工作窗口“Target1” 上的“+”, 将其展开。
然后右击 “Source Group1”文件夹弹出下拉菜单, 单击其中的“Add Files to Group‘Source Group1’” 项;
8 、在 弹 出 的 对 话 框 中 先 选 择 文 件 类 型 为 “ Asm Source file(*. s*; *. src; *. a*)” , 这时对话框内创建的空的源程序文件已经出现在项目工作窗口的“Source Group1” 文件夹中;
输入源程序代码;
9、 点击工具栏“Options for target” 按钮, 弹出一个对话框, 定义“Xtal”为 11. 0592. 下面依序是存储模式、 程序空间大小等设置, 均用默认值即可。
点击 Output 选项, 选中“Create Hex File”,
10、 单击编译按钮, 编译当前源程序;
11、 运行, 查看效果。
汇编源程序:
ORG
0000H
; 初始化地址
AJMP
MAIN
; 跳转到 MAIN
ORG
0050H
; 初始化地址 MAIN:
MOV
P0, #0FFH
; 端口初始化
MOV
P2, #0FFH
; 端口初始化 LOOP:
MOV
A, #0FEH
; 复制初始
MOV
R0, #08H
; 移动次数 LOOPL:
; 左移显示
MOV
P0, A
; 送数显式
MOV
P2, A
; 送数显式
RL
A
; 左移一位
ACALL
DELAY
; 延时 300ms
DJNZ
R0, LOOPL
; 是否左移 8 次
MOV
P0, #0FFH
; 关闭显示
MOV
P2, #0FFH
; 关闭显示
ACALL
DELAY
; 延时 300ms
MOV
A, #7FH
; 赋初始值
MOV
R0, #08H
; 移动次数 LOOPR:
; 右移显示
MOV
P0, A
; 送数显式
MOV
P2, A
; 送数显式
RR
A
; 右移一位
ACALL
DELAY
; 延时 300ms
DJNZ
R0, LOOPR ; 是否右移 8 次
MOV
P0, #0FFH
; 关闭显示
MOV
P2, #0FFH ; 关闭显示
ACALL
DELAY
; 延时 300ms
AJMP
LOOP
; 跳转到 LOOP DELAY:
MOV
R5, #3
; 将 3 赋给寄存器 R5 DEL1:
MOV
R6, #200
; 将 3 赋给寄存器 R5 DEL2:
MOV
R7, #230
; 将 3 赋给寄存器 R5 DEL3:
DJNZ
R7, DEL3
; 第一层循环
DJNZ
R6, DEL2
; 第二层循环
DJNZ
R5, DEL1
; 第三层循环
RET
; 结束 试验流程图:
实验结果:
P0、 P2 端口的 LED 先从从右至左方向依次点亮, 再从左至右方向依次点亮, 如此循环形成流水灯效果 问题解决及讨论:
1)
没有正确加载烧写文件。
必须是先选芯片在加载文件
2)
芯片型号没有选择正确。
可重新选择型号
3)
没有放置芯片。
先放芯片, 再压下锁紧座手柄锁紧
4)
芯片损坏。
换新的芯片重试
5)
JP24 没有切换到“OFF” 端, 结果 P0 口的 8 个 LED 不闪烁。
原因是被1602LED 干扰
实验三
继电器控制 实验任务:
用按键控制继电器的工作状态:
K1-吸和键, K2-释放键
按 K1 键, 继电器吸合, DL11 灯亮。
按 K2 键, 继电器释放, DL11 灯灭。
实验步骤:
1、 首先在硬盘上建立一个文件夹;
2、 启动 Keil C51 软件;
3、 执行 Keil C51 软件的菜单“Project| New Project……” , 弹出一个名为“Create New Project” 的对话框。
输入工程文件名, 选择保存路径 uv2 后缀,点击“保存” 按钮;
4、 紧接着弹出“Options for Target‘Target 1’”, 为刚才的项目选择 ATMEL的 AT89S52 的 CPU。
选择之后, 点击“确定” 按钮;
5、 接下来弹出一个对话框提示你是否要把标准 8051 的启动代码添加项目中去, 此时, 点击“否” 按钮;
6、 执行 菜单“File| New……”, 出现一个名为“Text1” 的文档。
接着执行菜单“File| Save” 弹出一个名为“Save As” 的对话框, 将文件名改为“. asm”后缀, 然后保存;
7、 添加源程序文件到工程中, 一个空的源程序文件建成。
单击 Keil C51 软件左边项目工作窗口“Target1” 上的“+”, 将其展开。
然后右击 “Source Group1”文件夹弹出下拉菜单, 单击其中的“Add Files to Group‘Source Group1’” 项;
8 、在 弹 出 的 对 话 框 中 先 选 择 文 件 类 型 为 “ Asm Source file(*. s*; *. src; *. a*)” , 这时对话框内创建的空的源程序文件已经出现在项目工作窗口的“Source Group1” 文件夹中;
输入源程序代码;
9、 点击工具栏“Options for target” 按钮, 弹出一个对话框, 定义“Xtal”为 11. 0592. 下面依序是存储模式、 程序空间大小等设置, 均用默认值即可。
点击 Output 选项, 选中“Create Hex File”,
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:
; 循环检测按键是否按下
ACALL
SCAN_KEY
; 输入按键状态
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 ; 保存按键状态
ACALL
PROC_KEY
; 绝对调用子程序 PROC_KEY
AJMP
KEY_CHK
; 绝对跳转到 KEY_CHK SCAN_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 控制循环
MOV
R6, #10
; R6 赋值为 10 DEL1:
MOV
R7, #185
; R7 赋值为 185 DEL2:
NOP
; 空操作, 延迟一个机器周期
NOP
NOP
DJNZ
R7, DEL2
; 第一层循环
DJNZ
R6, DEL1
; 第二层循环
RET
; 返回
END
; 结束
试验流程图:
实验结果:
用按键控制继电器的工作状态:
K1-吸和键, K2-释放键
按 K1 键, 继电器吸合, DL11 灯亮。
按 K2 键, 继电器释放, DL11 灯灭。
问题解决及讨论:
1)
没有正确加载烧写文件。
必须是先选芯片在加载文件
2)
芯片型号没有选择正确。
可重新选择型号
3)
没有放置芯片。
先放芯片, 再压下锁紧座手柄锁紧
4)
芯片损坏。
换新的芯片重试
5)
JP24 没有切换到“OFF” 端, 结果 P0 口的 8 个 LED 不闪烁。
原因是被1602LED 干扰
篇四:gpio输入输出实验报告
/p>院
系:计算机科学学院
专
业:
自动化
年
级:
11 级
学
号:
11064029
姓
名:
杨胜提
指导教师:
刘科
2013 年
5 月
8 日
2 年级
11 级 班级
11 级自动化 一班
学号
11064029 专业 自动化
姓名
杨胜提 题目名称 实验一、GPIO 实验
实验设计要求
控制 EduKit-M3 实验平台的发光二极管 LED1、LED2、LED3、LED4,使它们有规律的点亮,具体顺序如下:
LED1 亮->LED2 亮->LED3 亮->LED4 亮,如此反复,当按下 EduKit-M3 实验平台上的 Key 按钮时,灯全部熄灭, 2 秒钟后发光二极管全部点亮,再过一秒钟后返回被中断前的状态,有规律的依次点亮。
实 验 设 计 思 路
1、 硬件电路设计
在 EduKit-M3 实验平台上,LED1、LED2、LED3、LED4 分别与 PC6、PC7、PC8、PC9 相连,按键 Key 与 PB9 相连。
2、软件程序设计 (1) 配置 PB 口第 9 个引脚作为外部中断,下降延触发;
(2) 读取端口数据输出寄存器 GPIOC_ODR[15:0]的值,因为 C 口[9:6]位和四个LED 灯连通。
(3) 初始化时,LED 依次点亮,当按下 Key 键时产生中断;
(4) 中断服务子程序内容:灯全部熄灭,2 秒钟后发光二极管全部点亮,再过 1秒钟后中断返回。整个工程包含 3 个源文件:STM32F10x.s、stm32f10x_it.c 和 main.c,其中 STM32F10x.s 为启动代码,所有中断服务子程序均在 stm32f10x_it.c 中,其它函数则在 main.c 中。
3 实 验 步 骤 与 结 果 分 析
运行过程
(1) 使用 Keil uVision3 通过 ULINK 2 仿真器连接 EduKit-M3 实验平台,打开实验例程目录 GPIO_TEST 子目录下的 GPIO.Uv2 例程,编译链接工程;
(2) 选择软件调试模式,点击 MDK 的 Debug 菜单,选择 Start/Stop Debug Session项或 Ctrl+F5 键, 在逻辑分析仪中添加 GPIOC_ODR.6、GPIOC_ODR.7、GPIOC_ODR.8、GPIOC_ODR.9,点击 Run 按钮即可在 逻辑分析仪中看到如图 7-11;
(3) 选择硬件调试模式,选择 Start/Stop Debug Session 项或 Ctrl+F5 键,下载程序并运行,观察 LED 灯的变化情况;当程序运行在 while 循环体内时,按 Key 键,程序进入中断服务子程序 EXTI9_5_IRQHandler(), 单步运行,观察 LED 的变化情况。
(4) 退出 Debug 模式,打开 Flash 菜单>Download,将程序下载到 EduKit-M3 实验平台的 Flash 中,按 RESET 键复位, 观察 LED 灯的情况,正常情况应如下。
LED 灯状态 1
说
明 LED1 LED2 LED3
LED4
亮
灭
灭
灭
程序正常运行,发光二极管依次点亮 灭
亮
灭
灭
灭
灭
亮
灭
灭
灭
灭
亮
灭
灭
灭
灭
外部信号输入,发生中断,执行中断处理程序 亮
亮
亮
亮
LED 灯状态 2
说
明 LED1 LED2 LED3
LED4
亮
灭
灭
灭
程序正常运行,发光二极管依次点亮 亮
亮
灭
灭
亮
亮
亮
灭
亮
亮
亮
亮
灭
灭
灭
灭
外部信号输入,发生中断,执行中断处理程序 亮
亮
亮
亮
4
主 要 程 序 代 码 分 析
软件程序设计
1、配置 PB 口第 9 个引脚作为外部中断,下降延触发;
/* Configure PB9 as input floating (EXTI Line9) */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
//引脚选择
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;//输入模式选择 GPIO_Init(GPIOB, &GPIO_InitStructure);
2、读取端口数据输出寄存器 GPIOC_ODR[15:0]的值,因为 C 口[9:6]位和四个 LED 灯连通。
方法一:
/* Configure PC. as Output push-pull */
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); 方法二:
利用端口配置低寄存器(GPIOx-CRL)(x=A..E)和端口配置高寄存器(GPIOx-CRH)(x=A..E)
GPIOC_CRL=0xcc444444 ;
GPIOC_CRH=0x444444cc ;
3、初始化时,LED 依次点亮,当按下 Key 键时产生中断; /* Configure EXTI Line9 to generate an interrupt on falling edge */
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
GPIOC->ODR&= 0xfffffc4f;
//1
高 16 位保留,全为 F,底 16 位相应置高或置底
/*Delay(800);
GPIOC->ODR&= 0xfffffc0f;
GPIOC->ODR|= 0x00000cc0;
//2
Delay(800);
GPIOC->ODR&= 0xfffffc0f;
GPIOC->ODR|= 0x00000dc0;
//3
Delay(800);
GPIOC->ODR&= 0xfffffc0f;
GPIOC->ODR|= 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);
}
//
使用这两个函数对引脚进行配置。
(写不完时,可调整表结构。)
7 心 得 体 会
(这部分内容要手写)
成 绩 评 定
教师签名:
年
月
日
篇五:gpio输入输出实验报告
式实验报告姓名:邓庆学号:
1075490019学院:
通信工程学院
实验一 电源、 复位、 时钟管理单元(一) 实验目的1. 了解如何配置不同的时钟。
如何使用 MRCC 的功能而读取芯片上不用的时钟的当前状态和频率。
如何处理外部 4MHZ 的石英振荡器损坏情况的检测。
(二) 实验原理STR750 的时钟输入源共有 5 个, 这些时钟源为 MCU 系统提供时钟, 从而得到 HCLK 和PCLK。
1. 内部自由运行的振荡器可以提供 1~10MHZ 的时钟, 他们作为应急时钟。
它由配置在自由云子那种模式下的 PLL 组成。
2. OSC4M:4MHZ 主振荡器。
3. OSC32K:32.768KMZ 振荡器即可以驱动系统时钟, 也可以驱动 RTC。
4. LPOSC:
内部的提耗能 RC 振荡器, 所提供的频率大约为 300KMZ, 该时钟可以驱动系统时钟, 也可以驱动 RTC。
5. USB_CK:可以专门为 USB 提供 48KHZ 的时钟。
(三) 实验步骤1. 在 IAR 集成开发环境下创建工程, 命名并保存。
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 上连接了一个灯, 它会随着系统时钟不断的闪烁。
如果再 OSC4M 上没有时钟的话该灯就会停止闪烁。
(五) 心得缺少了时钟, 就好像人的脉搏不在跳动一样, 可以想象时钟的作用很大, 通过本次实验使我了解到S TR7 5 0 的时钟配置, 以及相应的寄存器的使用, 对于S T R7 5 0 的时钟分配以及产生应用有了进一步的熟悉。
实验二 通用输入/ 输出端口(G P I O )(一) 实验目的1. 通过实验, 理解通用输入输出端口的工作过程和作用。
2. 学习在软件系统的设计中输入使用输入输出的端口。
(二) 实验原理1. GP I O 介绍:
它是相对于芯片本身而言的, 如某个引脚是芯片的GP I O 脚, 则该引脚可以作为输入输出高低电平使用, 当然某些引脚具有复位功能, 既可以用作GP I O 也可以用作其他功能。
2. GP I O 的工作过程1) 每个通用I O 端口都有3 个3 2 为的配置寄存器、1 个 32 位的数据寄存器和 1个 32 位的可屏蔽寄存器。
根据 Datasheet 中所列的通用 IO 端口的特殊硬件特征, 通用 IO 端口的每一位都可以由软件单独配置成下面的几种模式:
a) 输入悬空; b) 输入上拉; c) 输入下拉; d) 模拟输入; e) 输出开漏; f) 输出推免; g) 可选功能; 2) 虽然每个 IO 端口位都可以自由编程, 但是 IO 端口寄存器只能进行 32 位访问,不允许进行字节或者比特访问。
在刚复位之后, 可选功能还处于无效状态, IO 端口配置为输入悬空模式。
当被配置为输出时, 写入到 IO 数据寄存器中的数据就加载到输出寄存器中。3) 4) 输出锁存器所有的输出的值, 可以在推免模式或者开漏模式使用输出驱动。
在每个 APB 时钟周期里输入锁存器 IO 引脚的数据。
读 IO 数据寄存器是读输入5) 寄存器还是输出寄存器是由端口的配置决定。
在除 Standby 模式外的所有电源模式中, GPIO 的状态是保留的, Standby 模式中所有 GPIO 引脚为高祖状态。
6) (三) 实验步骤1. 在 IAR 集成开发环境下新建一个名为 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 对多通道中断处理机制和实现方法。
学习使用 EIC 的寄存器设置流程和编程方法。
(二) 实验原理1. EIC 介绍:
ARM 内核提供两种中断级别:
FIQ 主要永固快速、 低反应时间的中断处理; IRQ 主要用于其它的普通中断处理。
STR750 中断管理系统提供了两个中断管理模块; 增强型中断控制器 EIC 和外部中断控制 EXTIT。
EIC 实现了对多个中断通道的2. 3. 硬件处理、 中断优先级决策并计算中断向量。
EIC 的工作过程:
1) 根据相关的通道屏蔽位接受或者拒绝响应的中断要求。
2) 将所有挂起的 IRA 中断请求的优先级与当前的优先级比较, 如果中断请求的优先级高于当前优先级, 则这个 IRQ 请求会传给 ARM7 内核。
如果中断请求的优2. 先级低于当前的优先级, 则根据实际情况讲中断请求挂起或者屏蔽。
将最高优先级的 IRQ 中断的地址向量加载熬中断向量寄存器中。
一旦 ARM 内核响应了一个新的 IRQ 中断请求, EIC 就会将以前的优先级保存在3) 4) 硬件优先级栈中。
当 ARM 内核响应了一个新的 IRQ 中断请求中, 用新的优先级更新当前中断优5) 先级寄存器。
(三) 实验步骤1. 在 IAR 集成开发环境下创建工程, 命名并保存。
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. 用于产生中断请求的边缘检测器。每个中断都能给独自的设置触发事件也可以独立的被屏蔽。
EXTIT 的功能描述:
1) 中断请求可以通过硬件和软件两种方式, 要产生硬件中断, 中断线要被设置并时能, 这个需要将触发器设置成需要的极性, 通过将屏蔽寄存器中相应位置 12. 使能中断请求。
当选择的边沿在外部中断线上发生时, 中断请求就产生, 这个中断请求在挂起寄存器被设置 1 后复位。
2) 本实验使用软件模拟产生中断, 过程如下:
配置 16 条中短线的屏蔽位(EXTIT_MR); 置位软件中断寄存器中需要的位(EXTIT_SWIR)
(三) 实验步骤1. 在 IAR 集成开发环境下创建工程, 命名并保存。
2. 像工程中添加下列文件。
+75x_conf.h+75x_it.c+main.c3. 从库文件里向工程添加 startup 文件用于初始化和中断向量的设置, 并添加下列所有文件。
+75x_lib.c+75x_gpio.c+75x_mrcc.c+75x_eic.c+75x_extit.c4. 设置工程项目的配置, 编译连接, 并将生成的目标文件下载到目标板得 RAM 中进行调试。
5. 运行程序, 观察结果。
(四) 实验现象运行程序后发现 LED4 灯每隔一定时间开始闪烁。
(五) 收获心得由 EIC 的结构原理图可以看到, EXTIT 控制器的 16 条中短线作为 EIC 的一个中断源, 在使用时必须要初始化和使能 EIC。
从此次实验中还学会了软件中断产生的方法。
实验五 TB 基准时间定时器(一) 实验目的通过实验了解 TB 定时器的功能和工作原理, 学习 TB 计时器的编程应用。
(二) 实验原理1. TB 介绍:
TB 定时器可以作为自由时钟过来产生一个标准时间, 也可以使用输出捕获模式测量 RTC 时钟。TB 定时器与 PWM 定时器、TIM 定时器一样具有同样的结构。TB 定时器主要有时钟源、 触发控制器、 计时器以及自动重装器组成。
2. TB 的工作过程1) 主要工作工程:
选择时钟, 通过分频器得到一定频率的处罚时钟处罚计数器按照某种方式计数, 计数完毕后自动重载初始值并产生中断。
2) 计数器时钟的选择TB 可供选择的时钟包括:
CK_TIM :
内部时钟; CK_RTC :
外部时钟; 选择的时钟通过一个 16 位的分频器进行 1~65536 分频后送入计数器。
3) 计数器模式计数器共有 3 种工作模式:
向上计算模式 向下计数模式 中心对齐模式4) 计数器初始化在程序运行中, 可以重新初始化计数器和分频器, 设置方法为:
修改 TB_CR寄存器的 CNT_RST=1。
根据 TB_CR 寄存器的 CMS 位和 UD 位的设置, 计数器复位, 计数器立即开始计数。
(三) 实验步骤1. 在 IAR 集成开发环境下创建工程, 命名并保存。
2. 像工程中添加下列文件。
+75x_conf.h+75x_it.c+main.c3. 从库文件里向工程添加 startup 文件用于初始化和中断向量的设置, 并添加下列所有文件。
+75x_lib.c+75x_gpio.c+75x_mrcc.c+75x_eic.c+75x_tb.c+75x_cfg.c4. 设置工程项目的配置, 编译连接, 并将生成的目标文件下载到目标板得 RAM 中进行调试。
5. 运行程序, 观察结果。
(四) 实验结果运行程序, 发现 LED4、 LED3、 LED2 三个灯以不同的频率闪烁。
(五) 收获心得通过此次实验, 我学习了 TB 计时器的结构原理和工作流程。
实验六 看门狗定时器实验(一) 实验目的1. 通过实验, 理解看门狗的工作过程和作用。
2. 学习在软件系统的设计中, 如何使用看门狗。
(二) 实验原理1. 看门狗介绍:
看门狗的作用是防止程序进入死循环。
看门狗每个一段时间读取某个存储单元, 若读取的不是设定值则将系统复位重置, 次次编写程序时一定要经常对相应存储单元写设定值以避免看门狗复位系统, 人们习惯的把这个过程称 “喂狗”。程序正常运行时, “喂狗” 工作也可以正常运行, 一旦程序进入死循环或者系统死机, 看门狗就会复位系统。
2. 看门狗可以用作普通定时器, 也可以作为解决处理软、 硬故障的看门狗。
主要具备以下功能:
16 位减 1 计数器, 8 位分频计数器, 安全重载序列, 普通定时器模式,计时器计数为零时产生中断。
1) 普通定时器模式如果软件不重置 WDG_CNT 寄存器的 WE 位, 该外设就进入普通定时器模式。该模式下, 当 WDG_CNT 寄存器的 SC 位被置 1, WDG_VR 寄存器的值就被装载到计数器中, 同时计数器开始减 1 计数。
2) 看门狗模式如果 WDG_CR 寄存器的 WE 位被置 1, 则进入看门狗模式, 这个模式不能被软件改变。
程序运行后, 计数器载入 WDG_VR 寄存器的值并开始减 1 计数, 当计数器达到终值时, 产生系统复位信号 WDG_RESET。
如果两个连续序列被写入 WDG_VR, 以防止进入计数器低端。
(三) 实验步骤1. 在 IAR 集成开发环境下创建工程, 命名并保存。
2. 像工程中添加下列文件。
+75x_conf.h+75x_it.c+main.c3. 从库文件里向工程添加 startup 文件用于初始化和中断向量的设置, 并添加下列所有文件。
+75x_lib.c+75x_gpio.c+75x_mrcc.c+75x_wdg.c4. 设置工程项目的配置, 编译连接, 并将生成的目标文件下载到目标板得 RAM 中进行调试。
5. 运行程序, 观察结果。
(四) 实验结果运行程序后, 观察到 LED3 点亮, 过约 4s 后, LED3 熄灭, 板上所有灯都熄灭, 然后 LED3又点亮, 可以判定, 实验板进入复位状态, 每次重启后点亮 LED3。
(五) 收获心得通过实验, 更深刻的理解了看门狗的原理和使用方法, 看门狗的软件系统中广泛的被使
用, 用来对整个系统的监控, 防止程序进入死锁或者死机状态, 同时, 为了防止看门狗被误操作以后错误的复位正常系统, 喂狗程序应多考虑安全性和稳定性, 看门狗多使用对相应寄存器连续写入。
实验七 模\数转换器(ADC)
实验(一) 实验目的1. 了解模数转换器 ADC 的工作原理。
学习 ADC 模拟“看门狗” 功能的应用, 了解如何设置 ADC 模式和通道, 进一步学2. 习模拟“看门狗” 的选择与使用。
学习并把握 ADC 在单通道模式下启动插入转换器, 通过 PWM 定时器的 TRGO 信号3. 来触发插入转换的功能也原理。
学习并把握主程序中配置 ADC 的工作参数和模拟看门狗的参数的配置。
(二) 实验原理1. 模数转换器(ADC)
的主要特点:
1) 在最大的 ADC 时钟频率下转换时间有以下因素组成:
采样时间、 11 个 ADC 时钟周期、 转换时间、 19 个 ADC 时钟周期。
2) 分辨度:
10Bits。
3) 单调性:
好。
4) 无缺失码:
有保证。
5) 输入为 0 是的读数:
0000h。
6) 满刻度读数:
03ffh。
7) 16*10 位数据寄存器。
8) 单通道模式或者扫描模式。
9) 在定时器 TIM00C2 触发...