欢迎来到冰点文库! | 帮助中心 分享价值,成长自我!
冰点文库
全部分类
  • 临时分类>
  • IT计算机>
  • 经管营销>
  • 医药卫生>
  • 自然科学>
  • 农林牧渔>
  • 人文社科>
  • 工程科技>
  • PPT模板>
  • 求职职场>
  • 解决方案>
  • 总结汇报>
  • ImageVerifierCode 换一换
    首页 冰点文库 > 资源分类 > DOCX文档下载
    分享到微信 分享到微博 分享到QQ空间

    太原理工大学单片机实验报告.docx

    • 资源ID:268583       资源大小:1.03MB        全文页数:22页
    • 资源格式: DOCX        下载积分:15金币
    快捷下载 游客一键下载
    账号登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录 QQ登录
    二维码
    微信扫一扫登录
    下载资源需要15金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP,免费下载
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    太原理工大学单片机实验报告.docx

    1、实验名称 普通I/O口操作一、实验目的1掌握IAR的配置、程序代码的编写,以及编译及调试的过程; 2学会如何运用 IAR 编写并在线调试程序LED灯闪烁实验;3. 学会按键的基本原理。 二、实验内容在IAR开发环境中建设LED灯闪烁、按键轮询实验工程项目,并完成程序编写和调试。三、主要仪器和设备1.中软国际ETC-WSN物联网实验平台一套;2. 装有IAR8.10软件的PC机一台; 3. CC2530仿真器一台。 四、操作方法和实验步骤1 IAR的配置 IAR是一个强大的嵌入式开发平台,支持非常多种类的芯片。IAR中的每一个Project,都可以拥有自己的配置,具体包括Device类型、堆/栈

    2、、Linker、Debugger等。1.1新建 Workspace 和 Project 首先新建文件夹 ledtest。打开IAR,选择主菜单File - New - Workspace建立新的工作区域。 选择Project - Create New Project - Empty Project,点击OK,把此工程文件保存到文件夹 ledtest 中,命名为:ledtest.ewp。 1.2配置General Options Target设置:Device:CC2530F256; Data model:Large; Calling convention:XDATA stack reetran

    3、t1.3 Debugger设置 Driver:Texas Instruments2程序代码的编写 2.1新建程序文件:选择File-New-File,新建文件main.c。 2.2引入头文件:基于CC2530的程序,必须包含对ioCC2530.h的引用,此文件定义了CC2530的各类特殊功能寄存器(SFR)的地址映射。 #include /引入CC2530所对应的头文件(包含各SFR的定义) 2.3定义LED引脚 查看开发板电路图,如下所示:可知led12分别受引脚P1_0P1_1的控制,因此可以定义 led1、led2 为引脚 P1_0、P1_1。#define led1 P1_0 LED1

    4、 /定义LED1为P1_0口控制#define led2 P1_1 LED2 /定义LED2为P1_1口控制2.4 main函数 接下来,开始编写main函数。 首先,在使用P1_0P1_1端口前,需对其工作方式以及输入/输出方向进行设置,其中涉及到两个SFR:P1SEL、P1DIR。P1SEL = 0x00; /设置P1为普通 I/O 口 P1DIR |= 0x03; /设置P1_0、P1_1 为输出 CC2530具有 P0_0 P0_7 , P1_0P1_7 , P2_0P2_7 共21个I/O口。它们可作为通用数字I/O,也可用于连接ADC、定时/计数器或USART等外设IO。 CC25

    5、30的SFR中有三类寄存器可用于配置这些IO口: PxSEL(x为0/1/2):P0/P1/P2口功能选择 0:通用数字IO,1:外设IO,缺省默认为0 PxDIR(x为0/1/2):P0/P1/P2口方向 0:输入,1:输出,缺省默认为0 PxINP(x为0/1):P0/P1口输入模式 0:上拉/下拉,1:三态,缺省默认为0 在使用IO口时需配置,若缺省,则取系统默认值。然后初始化2个LED灯,设为全灭: led1 = 1; led2 = 1; 最后,编写LED灯闪烁效果代码: led1 = 0; /led1闪烁 Delay(10);led1 = 1; Delay(10);led2 = 0;

    6、 /led2闪烁 Delay(10); led2 = 1; Delay(10); 其中涉及到一个延时子函数Delay(unsigned char n): void Delay(unsigned char n) unsigned char i; unsigned int j; for(i = 0; i n; i+) for(j = 1; j; j+); 2.5实验源码 将上述代码合并为一个整体。本实验主要用到的寄存器:3. 按键轮询将CPU处在循环的状态中,当按下按键后,会使与按键相关的I/O口的电平拉低,此时我们检测 I/O 的电压高低来控制相应的小灯亮灭。3.1程序流程图3.2代码分析(1)

    7、获取按键的值 uchar KeyScan(void) if(K1 = 0) /低电平有效 Delay(100); /检测到按键 if(K1 = 0) while(!K1); /直到松开按键 return(1); if(K2 = 0) Delay(100); if(K2 = 0) while(!K2); return(2); return(0); 该函数实现了识别到底是哪个按键被按下的功能,首先检测 K1 是否等于 0,如果一旦检测到等于0,说明有相应的按键被按下,延时一段时间,又来判断(if(K1 = 0)这个判断是为了防止按键抖动。同理检测按键K2是否被按下。 (2)主函数功能 主函数实现了

    8、一按键被按下后,使相应的小灯点亮,同时清除标志位。本实验主要用到的寄存器:五、实验结果2.6实验现象LED1灯先闪烁隔一会熄灭,一会儿LED2灯闪烁,隔一会也熄灭。3.3实验现象 按下K1键,LED1灯亮,按下K2键,LED2灯亮六、讨论、心得通过本实验,我们掌握了IAR的配置、程序代码的编写,以及编译及调试的过程;学会了如何运用 IAR 编写并在线调试程序LED灯闪烁实验;学会了按键的基本原理。在代码编写过程中,对于按键的接口不是很清楚,最后请教同学解决了。两个按钮分别是P0_1和P0_0。实验名称 外部中断一、实验目的1学会如何运用 IAR 编写并在线调试程序外部中断实验; 2掌握外部中断

    9、原理。二、实验内容理解中断的概念、熟悉中断的基本流程和中断处理函数的书写格式。 三、主要仪器和设备1.中软国际ETC-WSN物联网实验平台一套;2. 装有IAR8.10软件的PC机一台; 3. CC2530仿真器一台。 四、操作方法和实验步骤1. 实验内容:外部中断发生,控制灯的亮灭。开发板上已把 S1 按键与 P0.1 相连,本实验想要达到的效果就是,通过按键 S1 触发 P0.1的中断,进而在中断服务子程序中控制LED1的亮/灭。2.实验流程图3. 实验涉及的主要寄存器初始化LED:设置 P1为通用I/O口,设置 P1.0 P1.1 方向为输出,然后关闭2 个 LED灯。 再来配置外部中断

    10、的相关 SFR 寄存器,开启各级中断使能,涉及 3 个 SFR:EA、IEN1、PICTL(各SFR详细介绍请查阅CC2530中文手册): EA 总中断使能; IEN1.5 P0 中断使能; PICTL.3 P0.1口中断使能; PICTL.0 设置P0.1口输入下降沿引起中断触发。 然后在主函数中使用 while(1) 等待中断即可。4. 代码分析 1)中断及 I/O 初始化 中断及I/O初始化函数入下: void Init_IO_AND_LED(void) P1DIR = 0x03; /0 为输入(默认),1 为输入 led1 = 1; led2 = 1; P0IEN |= 0x02; /

    11、P01 口中断使能 PICTL |= 0x01; /P01 下降沿 EA = 1; IEN1 |= 0X20; /P0 口中断使能 P0IFG &= 0x00; /P0 口中断状态,如果有中断发生,相应位置 1 (1)设置P0_1口中断使能 P0IEN |= 0x02; CC2530单片机共有18个中断源,每一个中断都有一个相应的中断使能特殊功能寄存器,当对应位设置为1,使能中断位,当设置为 0 屏蔽相应的中断位;这里我们使用的是 P0_1,所以我们通过P0IEN |= 0x02 将p0_1置一。 (2)中断的触发方式 中断的触发方式不外乎这样两种,高低电平触发和边沿触发。这里我们通过设置 P

    12、ICTL设置了P0_1为下降沿触发,也即当 P0_1引脚由高电平到低电平变化时即产生了一次中断。 (3)打开中断总开关和使能 P0_1口中断EA = 1;这个是总开关,18 个中断源对应着有 18 个独自的中断开关,只有将总开关打开,然后再打开相应的小开关,这样你想要允许的总开关才能奏效。 (4)清除中断标志位 P0IFG &= 0x00;P0IFG是中断标志位,当该位为 1 时说明已产生过一次中断,为 0 还未产生中断。所以初始化我们将它清零,要不然我们怎么知道是否来了中断了呢?以后我们要想知道是否来了中断我们就可以来查它。 2)中断服务程序 函数代码如下: #pragma vector =

    13、 P0INT_VECTOR _interrupt void P0_ISR(void) if(P0IFG & 0x02) /按键中断 P0IFG = 0; led1 = !led1; P0IFG = 0; /清中断标志 (1) 中断服务程序 什么意思呢? 简单来说中断来了,你想要干什么。 (2) CC2530中断格式 格式如下: #pragma vector = P0INT_VECTOR _interrupt void P0_ISR(void) a)P0INT_VECTOR设定 的中断向量名本实验主要用到的寄存器: 五、实验结果实验现象:按键S1可以控制LED1灯亮灭六、讨论、心得通过本实验,学

    14、会了如何运用 IAR 编写并在线调试程序外部中断实验;掌握了外部中断原理。理解中断的概念、熟悉中断的基本流程和中断处理函数的书写格式。通过中断来控制按钮的操作。实验名称 定时器一、实验目的1学会使用定时器; 2运用 IAR 编写并在线调试程序定时器中断实验。二、实验内容掌握16位定时器基本使用方法。三、主要仪器和设备1.中软国际ETC-WSN物联网实验平台一套;2. 装有IAR8.10软件的PC机一台; 3. CC2530仿真器一台。 四、操作方法和实验步骤1.实验内容: CC2530 共有4个定时器,可分3类:定时器1、定时器2、定时器 3/4(3与4的用法一致)。定时器1 是一个16 位定

    15、时器,具有定时器/计数器/脉宽调制功能。它有 3 个单独可编程 输入捕获/输出比较 信道,每一个信道都可以用来当做 PWM 输出或用来捕获输入信号的边沿时间(关于什么是输入捕获/输出比较,以及如何实现 PWM输出,可自行查阅 CC2530数据手册)。 定时器有一个很重要的概念:操作模式。 操作模式包含:自由运行模式(free-running)、模模式(modulo)和正计数/倒计数模式(up-down)。2. 定时器T1的使用自由运行模式的溢出值为 0xFFFF 不可变;而其他两种模式则可通过对 T1CC0 赋值,以精确控制定时器的溢出值。本实验正是利用此特性,通过特定的T1CC0,使定时器每

    16、隔 1s触发一次中断,从而精确控制 LED灯的闪烁间隔为1s。在定时器的modulo模式下,精确控制LED灯的闪烁间隔为 1s,即:亮0.5s 暗 0.5s 亮0.5s 暗0.5s . 亮0.5s 暗 0.5s(即从暗转亮的时刻间隔为 1s)。亮/暗的反转通过溢出中断来实现。2.1实验流程图2.2、计数值计算LED 灯的状态为:亮0.5s 暗0.5s 亮 0.5s 暗0.5s . 亮 0.5s 暗 0.5s,而且需用溢出中断实现,因此要求定时器的溢出周期为 0.5s。为此,需要计算出相应的溢出值(暂设为 N)。 系统时钟频率选为 32MHz,提供给定时器的时钟频率默认为 16MHz(两者都由特

    17、殊功能寄存器 CLKCON 来配置,具体可查阅 CC2530数据手册)。 对于定时器1,设置其时钟分频为 128分频。 综上所述,可列式如下: 求出N=62500,其十六进制为 0xF424,即需要设置 T1CC0H=0xF4, T1CC0L=0x24 即可 。2.3代码分析本实验用到的主要寄存器:3定时器T4中断定时器3和定时器4都是8位的定时器,每个定时器都与两个独立的输入捕获、输出比较的定时器通道,每通道都有一个独立 I/O接口。在定时器的Up/down模式下,精确控制LED灯的闪烁间隔为 1s,即:亮 0.5s 暗 0.5s 亮0.5s 暗0.5s . 亮0.5s 暗 0.5s(即从暗

    18、转亮的时刻间隔为 1s)。亮/暗的反转通过溢出中断来实现。3.1程序流程图3.2 代码分析(1) T4和LED的初始化函数 void Init_T4_AND_LED(void) 该函数实现了对各个功能函数的调用,并向有参函数提供实参的值。 (2) 初始化T4 #define TIMER34_INIT(timer) /*T4CTL:定时器控制 ;0x06 set CLR,MODE*/ do T#timer#CTL = 0x06; /*T4CCTL0:定时器4 通道0 捕获比较控制;*/ T#timer#CCTL0 = 0x00; /*T4CC0:定时器 4通道零捕获比较值设定;*/ T#time

    19、r#CC0 = 0x00; /*T4CC0:定时器 4通道零捕获比较值设定;*/ T#timer#CCTL1 = 0x00; /*T4CCTL1:定时器4 通道1 比较捕获控制*/ T#timer#CC1 = 0x00; /*TTCC1:定时器4 通道0 捕获比较值设定*/ while (0) 这个宏就是对定时器的初始化,大家看,这里这么多的#,看起来有点不明白,其实说白了它就只是简单的连接符而已;比如说:T#timer#CTL = 0x06; 这个程序中我们用实参传进来的timer = 4,所以这句话的意思就是 T4CTL = 0x06. (3)启动定时器4 #define TIMER34_

    20、START(timer,val) (T#timer#CTL = (val) ? T#timer#CTL | 0X10 : T#timer#CTL&0X10) 通过检测T4CTL的值是否等于val的来决定是否启动定时器4. (4)设置系统时钟 #define TIMER34_SET_CLOCK_DIVIDE(timer,val) do T#timer#CTL &= 0XE0; (val=2) ? (T#timer#CTL|=0X20): (val=4) ? (T#timer#CTL|=0x40): (val=8) ? (T#timer#CTL|=0X60): (val=16)? (T#timer

    21、#CTL|=0x80): (val=32)? (T#timer#CTL|=0xa0): (val=64) ? (T#timer#CTL|=0xc0): (val=128) ? (T#timer#CTL|=0XE0): (T#timer#CTL|=0X00); /* 1 */ while(0) 通过传进来的val,我们在这里选择的是128分频。 (5)定时器4 模式的设定 #define TIMER34_SET_MODE(timer,val) do T#timer#CTL &= 0X03; (val=1)?(T#timer#CTL|=0X01): /*DOWN */ (val=2)?(T#tim

    22、er#CTL|=0X02): /*Modulo */ (val=3)?(T#timer#CTL|=0X03): /*UP / DOWN */ (T#timer#CTL|=0X00); /*free runing */ while(0) 通过传进来的参数,这里我们设定 T4为自动重装模式即 free running。五、实验结果实验现象:编译程序并在线调试,开发板上的LED1如期闪烁起来,闪烁间隔大概在1s。六、讨论、心得本节主要学习了定时器1的计数轮询的方法,实现了精确控制LED灯闪烁间隔为1s。通过定时器操作就可以获得较为精确的计数值。实验名称 串口收发数据一、实验目的 1学会如何运用 IA

    23、R 编写并在线调试串口通信实验,实现开发板与PC机的通信; 2.掌握串口通信的基本原理。二、实验内容掌握UART工作模式、波特率的设置等操作、建立基本的串口通信平台。三、主要仪器和设备1.中软国际ETC-WSN物联网实验平台一套;2. 装有IAR8.10软件的PC机一台; 3. CC2530仿真器一台。 四、操作方法和实验步骤1. 实验内容: CC2530包括2个串行通信接口 USART0 与 USART1,每个串口包括两个模式:UART(异步)模式、SPI(同步)模式)。2. 串口通信2.1程序流程图2.2实验分析首先配置USART0所对应的I/O口:通过对 PECFRG.0 清零来设置UA

    24、RT0为可选位置1,即RXD对应P0.2,TXD 对应P0.3。然后配置P0.2和 P0.3为外部设备I/O。然后选择 UART 模式,并使能接收器。接着配置 USART0 的参数:波特率 57600,无奇偶校验、停止位为1。2.3 代码分析 (1) 初始化串口 void initUARTtest(void) CLKCONCMD &= 0x40; /晶振 while(!(SLEEPSTA & 0x40); /等待晶振稳定 CLKCONCMD &= 0x47; /TICHSPD128 分频,CLKSPD不分频 PERCFG = 0x00; /位置1 P0 口 P0SEL = 0x3c; /P0

    25、用作串口 P2DIR &= 0XC0; /P0优先作为串口0 U0CSR |= 0x80; /UART 方式 U0GCR |= 10; /baud_e U0BAUD |= 216; /波特率设为57600 UTX0IF = 0; 前面四句话,设置系统的时钟,以及等待时钟稳定;接下来3句话将P0口初始化为串口;然后设置总线模式为 UART方式,然后设置波特率为57600;最后清中断标志位。 (2)发送字符串函数 void UartTX_Send_String(char *Data,int len) int j; for(j=0;jlen;j+) U0DBUF = *Data+; while(UT

    26、X0IF = 0); UTX0IF = 0; 通过向 U0DBUF 寄存器写入数据,然后硬件自动将其发送出去;所以我们可以将我们的数据写入U0DBUF中,这样就可以发出我们的数据了。2.4实验现象通过串口来控制Led灯3.1 实验分析 (1)设置号相应的寄存器。 (2)然后选择UART模式,并使能接收器。接着配置 USART0的参数:波特率 57600,无奇偶校验、停止位为1。 (3)相应的控制命令 10# 关RED LED 11# 开RED LED 20# 关GREEN LED 21# 开GREEN LED3.2程序流程图3.3代码分析 (1)UART 初始化函数 void initUARTtest(void) CLKCONCMD &= 0x40; /晶振 while(!(SLEEPSTA & 0x40); /等待晶振稳定 CLKCONCMD &= 0x47; /TI


    注意事项

    本文(太原理工大学单片机实验报告.docx)为本站会员主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

    copyright@ 2008-2023 冰点文库 网站版权所有

    经营许可证编号:鄂ICP备19020893号-2


    收起
    展开