太原理工大学单片机实验报告Word文档下载推荐.docx

上传人:聆听****声音 文档编号:426748 上传时间:2023-04-28 格式:DOCX 页数:22 大小:1.03MB
下载 相关 举报
太原理工大学单片机实验报告Word文档下载推荐.docx_第1页
第1页 / 共22页
太原理工大学单片机实验报告Word文档下载推荐.docx_第2页
第2页 / 共22页
太原理工大学单片机实验报告Word文档下载推荐.docx_第3页
第3页 / 共22页
太原理工大学单片机实验报告Word文档下载推荐.docx_第4页
第4页 / 共22页
太原理工大学单片机实验报告Word文档下载推荐.docx_第5页
第5页 / 共22页
太原理工大学单片机实验报告Word文档下载推荐.docx_第6页
第6页 / 共22页
太原理工大学单片机实验报告Word文档下载推荐.docx_第7页
第7页 / 共22页
太原理工大学单片机实验报告Word文档下载推荐.docx_第8页
第8页 / 共22页
太原理工大学单片机实验报告Word文档下载推荐.docx_第9页
第9页 / 共22页
太原理工大学单片机实验报告Word文档下载推荐.docx_第10页
第10页 / 共22页
太原理工大学单片机实验报告Word文档下载推荐.docx_第11页
第11页 / 共22页
太原理工大学单片机实验报告Word文档下载推荐.docx_第12页
第12页 / 共22页
太原理工大学单片机实验报告Word文档下载推荐.docx_第13页
第13页 / 共22页
太原理工大学单片机实验报告Word文档下载推荐.docx_第14页
第14页 / 共22页
太原理工大学单片机实验报告Word文档下载推荐.docx_第15页
第15页 / 共22页
太原理工大学单片机实验报告Word文档下载推荐.docx_第16页
第16页 / 共22页
太原理工大学单片机实验报告Word文档下载推荐.docx_第17页
第17页 / 共22页
太原理工大学单片机实验报告Word文档下载推荐.docx_第18页
第18页 / 共22页
太原理工大学单片机实验报告Word文档下载推荐.docx_第19页
第19页 / 共22页
太原理工大学单片机实验报告Word文档下载推荐.docx_第20页
第20页 / 共22页
亲,该文档总共22页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

太原理工大学单片机实验报告Word文档下载推荐.docx

《太原理工大学单片机实验报告Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《太原理工大学单片机实验报告Word文档下载推荐.docx(22页珍藏版)》请在冰点文库上搜索。

太原理工大学单片机实验报告Word文档下载推荐.docx

File,新建文件main.c。

2.2引入头文件:

基于CC2530的程序,必须包含对ioCC2530.h的引用,此文件定义了CC2530的各类特殊功能寄存器(SFR)的地址映射。

#include<

ioCC2530.h>

//引入CC2530所对应的头文件(包含各SFR的定义)

2.3定义LED引脚

查看开发板电路图,如下所示:

可知led1~2分别受引脚P1_0~P1_1的控制,因此可以定义led1、led2为引脚P1_0、P1_1。

#defineled1P1_0LED1//定义LED1为P1_0口控制

#defineled2P1_1LED2//定义LED2为P1_1口控制

2.4main函数

接下来,开始编写main函数。

首先,在使用P1_0~P1_1端口前,需对其工作方式以及输入/输出方向进行设置,其中涉及到两个SFR:

P1SEL、P1DIR。

P1SEL=0x00;

//设置P1为普通I/O口

P1DIR|=0x03;

//设置P1_0、P1_1为输出

CC2530具有P0_0~P0_7,P1_0~P1_7,P2_0~P2_7共21个I/O口。

它们可作为通用数字I/O,也可用于连接ADC、定时/计数器或USART等外设IO。

CC2530的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);

led2=0;

//led2闪烁

led2=1;

其中涉及到一个延时子函数Delay(unsignedcharn):

voidDelay(unsignedcharn)

{unsignedchari;

unsignedintj;

for(i=0;

i<

n;

i++)

for(j=1;

j;

j++);

}

2.5实验源码

将上述代码合并为一个整体。

本实验主要用到的寄存器:

3.按键轮询

将CPU处在循环的状态中,当按下按键后,会使与按键相关的I/O口的电平拉低,此时我们检测I/O的电压高低来控制相应的小灯亮灭。

3.1程序流程图

3.2代码分析

(1)获取按键的值

ucharKeyScan(void)

{

if(K1==0)//低电平有效

{

Delay(100);

//检测到按键

if(K1==0)

{while(!

K1);

//直到松开按键

return

(1);

}

}

if(K2==0)

{Delay(100);

if(K2==0)

K2);

return

(2);

return(0);

}

该函数实现了识别到底是哪个按键被按下的功能,首先检测K1是否等于0,如果一旦检测到等于0,说明有相应的按键被按下,延时一段时间,又来判断(if(K1==0))这个判断

是为了防止按键抖动。

同理检测按键K2是否被按下。

(2)主函数功能

主函数实现了一按键被按下后,使相应的小灯点亮,同时清除标志位。

五、实验结果

2.6实验现象

LED1灯先闪烁隔一会熄灭,一会儿LED2灯闪烁,隔一会也熄灭。

3.3实验现象

按下K1键,LED1灯亮,按下K2键,LED2灯亮

六、讨论、心得

通过本实验,我们掌握了IAR的配置、程序代码的编写,以及编译及调试的过程;

学会了如何运用IAR编写并在线调试程序LED灯闪烁实验;

学会了按键的基本原理。

在代码编写过程中,对于按键的接口不是很清楚,最后请教同学解决了。

两个按钮分别是P0_1和P0_0。

外部中断

1.学会如何运用IAR编写并在线调试程序外部中断实验;

2.掌握外部中断原理。

理解中断的概念、熟悉中断的基本流程和中断处理函数的书写格式。

3.CC2530仿真器一台。

1.实验内容:

外部中断发生,控制灯的亮灭。

开发板上已把S1按键与P0.1相连,本实验想要达到的效果就是,通过按键S1触发P0.1的中断,进而在中断服务子程序中控制LED1的亮/灭。

2.实验流程图

3.实验涉及的主要寄存器

初始化LED:

设置P1为通用I/O口,设置P1.0~P1.1方向为输出,然后关闭2个LED灯。

再来配置外部中断的相关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初始化函数入下:

voidInit_IO_AND_LED(void)

P1DIR=0x03;

//0为输入(默认),1为输入

led1=1;

led2=1;

P0IEN|=0x02;

//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)中断的触发方式

中断的触发方式不外乎这样两种,高低电平触发和边沿触发。

这里我们通过设置PICTL设置了P0_1为下降沿触发,也即当P0_1引脚由高电平到低电平变化时即产生了一次中断。

(3)打开中断总开关和使能P0_1口中断

EA=1;

这个是总开关,18个中断源对应着有18个独自的中断开关,只有将总开关打开,然后再打开相应的小开关,这样你想要允许的总开关才能奏效。

(4)清除中断标志位

P0IFG&

P0IFG是中断标志位,当该位为1时说明已产生过一次中断,为0还未产生中断。

所以初始化我们将它清零,要不然我们怎么知道是否来了中断了呢?

以后我们要想知道是否来了中断我们就可以来查它。

2)中断服务程序

函数代码如下:

#pragmavector=P0INT_VECTOR

__interruptvoidP0_ISR(void)

{

if(P0IFG&

0x02)//按键中断

{

P0IFG=0;

led1=!

led1;

}

P0IFG=0;

//清中断标志

(1)中断服务程序

什么意思呢?

简单来说中断来了,你想要干什么。

(2)CC2530中断格式

格式如下:

a)P0INT_VECTOR——设定的中断向量名

实验现象:

按键S1可以控制LED1灯亮灭

通过本实验,学会了如何运用IAR编写并在线调试程序外部中断实验;

掌握了外部中断原理。

通过中断来控制按钮的操作。

定时器

1.学会使用定时器;

2.运用IAR编写并在线调试程序定时器中断实验。

掌握16位定时器基本使用方法。

1.实验内容:

CC2530共有4个定时器,可分3类:

定时器1、定时器2、定时器3/4(3与4的用法一致)。

定时器1是一个16位定时器,具有定时器/计数器/脉宽调制功能。

它有3个单独可编程输入捕获/输出比较信道,每一个信道都可以用来当做PWM输出或用来捕获输入信号的边沿时间(关于什么是输入捕获/输出比较,以及如何实现PWM输出,可自行查阅CC2530数据手册)。

定时器有一个很重要的概念:

操作模式。

操作模式包含:

自由运行模式(free-running)、模模式(modulo)和正计数/倒计数模式(up-down)。

2.定时器T1的使用

自由运行模式的溢出值为0xFFFF不可变;

而其他两种模式则可通过对T1CC0赋值,以精确控制定时器的溢出值。

本实验正是利用此特性,通过特定的T1CC0,使定时器每隔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(两者都由特殊功能寄存器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(即从暗转亮的时刻间隔为1s)。

3.2代码分析

(1)T4和LED的初始化函数

voidInit_T4_AND_LED(void)

该函数实现了对各个功能函数的调用,并向有参函数提供实参的值。

(2)初始化T4

#defineTIMER34_INIT(timer)/*T4CTL:

定时器控制;

0x06setCLR,MODE*/

do

{

T##timer##CTL=0x06;

/*T4CCTL0:

定时器4通道0捕获比较控制;

*/

T##timer##CCTL0=0x00;

/*T4CC0:

定时器4通道零捕获比较值设定;

T##timer##CC0=0x00;

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

#defineTIMER34_START(timer,val)

(T##timer##CTL=(val)?

T##timer##CTL|0X10:

T##timer##CTL&

~0X10)

通过检测T4CTL的值是否等于val的来决定是否启动定时器4.

(4)设置系统时钟

#defineTIMER34_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##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模式的设定

#defineTIMER34_SET_MODE(timer,val)

do{

=~0X03;

(val==1)?

(T##timer##CTL|=0X01):

/*DOWN*/

(val==2)?

(T##timer##CTL|=0X02):

/*Modulo*/

(val==3)?

(T##timer##CTL|=0X03):

/*UP/DOWN*/

(T##timer##CTL|=0X00);

/*freeruning*/

}while(0)通过传进来的参数,这里我们设定T4为自动重装模式即freerunning。

编译程序并在线调试,开发板上的LED1如期闪烁起来,闪烁间隔大概在1s。

本节主要学习了定时器1的计数轮询的方法,实现了精确控制LED灯闪烁间隔为1s。

通过定时器操作就可以获得较为精确的计数值。

串口收发数据

1.学会如何运用IAR编写并在线调试串口通信实验,实现开发板与PC机的通信;

2..掌握串口通信的基本原理。

掌握UART工作模式、波特率的设置等操作、建立基本的串口通信平台。

CC2530包括2个串行通信接口USART0与USART1,每个串口包括两个模式:

UART(异步)模式、SPI(同步)模式)。

2.串口通信

2.1程序流程图

2.2实验分析

首先配置USART0所对应的I/O口:

通过对PECFRG.0清零来设置UART0为可选位置1,即RXD对应P0.2,TXD对应P0.3。

然后配置P0.2和P0.3为外部设备I/O。

然后选择UART模式,并使能接收器。

接着配置USART0的参数:

波特率57600,无奇偶校验、停止位为1。

2.3代码分析

(1)初始化串口

voidinitUARTtest(void)

CLKCONCMD&

=~0x40;

//晶振

while(!

(SLEEPSTA&

0x40));

//等待晶振稳定

=~0x47;

//TICHSPD128分频,CLKSPD不分频

PERCFG=0x00;

//位置1P0口

P0SEL=0x3c;

//P0用作串口

P2DIR&

=~0XC0;

//P0优先作为串口0

U0CSR|=0x80;

//UART方式

U0GCR|=10;

//baud_e

U0BAUD|=216;

//波特率设为57600

UTX0IF=0;

前面四句话,设置系统的时钟,以及等待时钟稳定;

接下来3句话将—P0口初始化为串口;

然后设置总线模式为UART方式,然后设置波特率为57600;

最后清中断标志位。

(2)发送字符串函数

voidUartTX_Send_String(char*Data,intlen)

intj;

for(j=0;

j<

len;

j++)

U0DBUF=*Data++;

while(UTX0IF==0);

通过向U0DBUF寄存器写入数据,然后硬件自动将其发送出去;

所以我们可以将我们的数据写入U0DBUF中,这样就可以发出我们的数据了。

2.4实验现象

通过串口来控制Led灯

3.1实验分析

(1)设置号相应的寄存器。

(2)然后选择UART模式,并使能接收器。

接着配置USART0的参数:

波特率57600,无奇

偶校验、停止位为1。

(3)相应的控制命令

10#关REDLED

11#开REDLED

20#关GREENLED

21#开GREENLED

3.2程序流程图

3.3代码分析

(1)UART初始化函数

//晶振

//TI

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 经管营销 > 公共行政管理

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

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