博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
zigbee菜鸟笔记(三)基础实验点亮led灯
阅读量:2085 次
发布时间:2019-04-29

本文共 2576 字,大约阅读时间需要 8 分钟。

一.cc2330 IO端口

有问题发送邮件至468078841@qq.com

(一)io介绍
CC2530有21个数字输入/输出引脚,可以配置为通用数字I/O或外设I/O信号,配置为连接到ADC、定时器或USART外伤。这些I/O的用途可以通过一系列寄存器配置,由用户程序加以实现。
(二)IO 特性
I/O端口具备如下重要特性:

21个数字I/O引脚

可以配置为通用I/O或外部设备I/O

输入口具备上拉或下拉能力

具有外部中断能力

在这里插入图片描述

TIP:21个I/O引脚都可以用作于外部中断源入口。因此如果需要外部设备可以产生中断,外部中断功能也可以从睡眠模式唤醒设备。

(三)IO引脚

由电路图可以得知一共有51个可用IO端口,当用作通用I/O 时,引脚可以组成3 个8 位端口,端口0、端口1 和端口2,表示为P0、P1 和P2。其中,P0和P1 是完全的8 位端口,而P2 仅有5 位可用。所有的端口均可以通过SFR 寄存器P0、P1 和P2 位寻址和字节寻址。每个端口引脚都可以单独设置通用I/O 或外部设备I/O。除了两个高驱动输出口P1.0 和P1.1 各具备20 mA 的输出驱动能力之外,所有的输出均具备4 mA 的驱动
能力。

二.LED灯IO寄存器及其理解

TIP:我们的2530 LED分布在P1端口

如果我们需要通过代码控制LED的亮灭 那么我们就要通过代码将cc2530的寄存器功能设置为 普通IO口 且 配置为输出,下面我们讲解如何认识这两个寄存器

(一)寄存器PxSEL,其中x 为端口的标号0~2,用来设置端口的每个引脚为通用I/O 或者是外部设备I/O 信号。(这个寄存器控制端口功能 在下面我们叫其功能寄存器)

因为我们的灯在P1的IO口,所以我在这里只对P1端口进行讲解,如果存在其他疑问请发邮件联系,邮箱468078841@qq.com
在这里插入图片描述
1.我们要控制LED灯的闪烁就必须要将其设置为普通的IO口,

配置寄存器的方法:

将功能寄存器第一位端口1值0 P1SEL & = ~0x02;

解释:**0x02为16进制 将其转为二进制表示为 0000 0010 取反后为 1111 1101 (这里的二进制高低位分别对应上面表格的端口0到端口七) 这时候我们由于不知道P1SEL端口是处于什么状态 这时候我们只知道在这里我是要将P1.1为普通IO口 也就是第二位值0 这时候为了避免引起不必要的错误 我们选用&=学过C语言的都知道 1&任何数为任何数, 0&任何数为0 ,我们在这里可以保证 我们的代码P1SEL & = ~0x02只对第二位进行了操作改变

练习 : 将P1.3 P1.2 P1.1 P1.0设置为通用口

首先我们要提前取反 0000 1111 等于16 进制0x0F

P1SEL &= ~0x0F

取反是因为我比较菜 前几位方便运算 个人习惯 不喜勿喷

significant:**在这里我们要理解八位二进制与P1处八个端口的映射对应关系,了解这个才可以保证以后学会其他寄存器操作。

(2)在任何时候,要改变一个端口引脚的方向,就使用寄存器PxDIR 来设置每个端口引脚为输入或输出。因此只要设置PxDIR 中的指定位为1,其对应的引脚口就被设置为输出了。(这个寄存器控制端口的输入输出在下面我们叫其输入输出寄存器)

在这里插入图片描述
1.我们要控制LED灯的闪烁就必须要将其设置为输出,
在前面我们已经知道如何见P1SEL如何设置了 在这里,我们就不提这里了 但是为了加强练习 我在这里设置几个小问题,希望可以独立完成

(1)端口1设置为输出口

P1DIR  |= 0x01;

在这里我用 |= 运算符是因为我们需要将这一位设置为1 1或上任何数为1 0或上任何数 为任何数,

(2)端口2和端口1一起设置为输出模式

P1DIR  |= 0x06;

三.实战操作点亮LED灯

在上面我们已经知道了如何将端口设置为可以点亮LED灯的步骤 在这里我将讲述如何控制LED灯的亮灭

(一)了解端口

这个为我们的LED灯端口电路图,接下来的基础实验我也都会以这个电路图为模板写下去,
在这里插入图片描述
我们可以看到 这是一个二极管 当P1.1 P1.2,P1.3为低电平时灯就可以闪烁 在代码中 如果我们已经设置好之后 我们可以直接令端口等于0 则点亮 为1 则熄灭

(二)实战演示

题目要求,将D4,D2,D3,初始时全部熄灭,然后依次闪烁

#include "ioCC2530.h"  //引入头文件 类似C语言 #include"stdio.h" #define D4 P1_0   //宏  定义引脚为端口 方便记忆#define D2 P1_1  #define D3 P1_2  void LED_INIT(void);    //函数申明  这里建议书写规范void delay(unsigned int time);void delay(unsigned int time)  //延时函数 这里是为了让程序多执行几次for循环 让函数延时{
for(unsigned char j = 0; j < time;j++) {
for(unsigned int i = 0; i < time; i++) {
} } }void LED_INIT(void) //LED初始化函数{
P1SEL &= ~0x07; // P1SEL &= ~(0000 0111)P1SEL &= (1111 1000) P1DIR |= 0x07; P1 = 0x07;}void main(void){
LED_INIT(); //初始化 while(1) {
D4 = 0; //D4亮 delay(100); D4 = 1; //D4灭 D2 = 0; delay(100); D2 = 1; D3 = 0; delay(100); D3 = 1; } }

转载地址:http://fnvqf.baihongyu.com/

你可能感兴趣的文章
用 Doc2Vec 得到文档/段落/句子的向量表达
查看>>
使聊天机器人具有个性
查看>>
使聊天机器人的对话更有营养
查看>>
一个 tflearn 情感分析小例子
查看>>
attention 机制入门
查看>>
手把手用 IntelliJ IDEA 和 SBT 创建 scala 项目
查看>>
GAN 的 keras 实现
查看>>
AI 在 marketing 上的应用
查看>>
Logistic regression 为什么用 sigmoid ?
查看>>
Logistic Regression 为什么用极大似然函数
查看>>
为什么在优化算法中使用指数加权平均
查看>>
Java集合详解1:一文读懂ArrayList,Vector与Stack使用方法和实现原理
查看>>
Java集合详解2:一文读懂Queue和LinkedList
查看>>
Java集合详解4:一文读懂HashMap和HashTable的区别以及常见面试题
查看>>
Java集合详解5:深入理解LinkedHashMap和LRU缓存
查看>>
Java集合详解6:这次,从头到尾带你解读Java中的红黑树
查看>>
Java并发指南2:深入理解Java内存模型JMM
查看>>
Java并发指南6:Java内存模型JMM总结
查看>>
Java网络编程和NIO详解7:浅谈 Linux 中NIO Selector 的实现原理
查看>>
Java网络编程与NIO详解10:深度解读Tomcat中的NIO模型
查看>>