p1口实验_Zigbee-1-基础实验-1

内容列表

1.1 点亮一个LED

1.2 按键

1.3 外部中断

1.4 定时器T1(16位),采用查询方式,模模式

1.5 定时器1,采用中断方式,模模式

1.6 串口通讯

1.6.1 串口发送

1.6.2 串口发送和接收

1.6.3 UART0控制LED

基础实验就是在使用一款增强型的51单片机。通过寄存器的配置来使用CC2530内部的资源。

IO口中P1.0和P1.1内部不含上拉或下拉电阻

1.1 点亮一个LED

6bcd55bafc3793eb21985aae548b2ec3.png

硬件电路如图所示: P10--LED1 P14--LED3

可见,P10,P14输出高电平时,LED点亮。

CC2530的IO口配置相关的三个寄存器为:P1SEl(端口1功能选择寄存器),P1DIR(端口1方向寄存器),P1INP(端口1输入模式寄存器)。

97aa94bfa2e9e3db78417610c3f31900.png

a75f068a8b86bf9ff797fe3ff79ce212.png

b58bcf649bfb9a55c17d9416afdeecd9.png

LED为输出设备,所以根据硬件电路是要将P10和P14配置为输出口,下拉,因而,根据表格

P1SEL:关心第0位和第4位,对应P1.0和P1.4。配置为通用IO,对应位写0,因此,P1SEL的配置是让第0位和第4位置0,其余位保持不变。 1110 1110 P1SEL &= 0xEE ;

P1DIR:将P1.0和P1.4设置为输出,对应位为1。因此P1DIR的配置是让第0位和第4位置1,其余位保持不变。 0001 0001 P1DIR |= 0x11;

由于是输出模式,所以不用对P1INP进行配置

#include 

11bd1e50d98320bf90f10d39800aa878.png

84012fa2087d6fce3bf22f4aaefdb9fe.png

fa869340251f76a03b9c7aaa84e60e15.png

e0456cd983ca6dfe03e45f82141d6405.png

下载程序后,可以看到LED1和LED3同时点亮

1.2 按键

本次实验是用按键控制LED1的亮灭

硬件连接: S1--P01,按键按下时为高电平,放开时为低电平

cfba4f5b422edf426d047fa7b2048454.png

根据1.1 LED的硬件,这次配置是要将P1.0配置为输出,将P01配置为输入

P1SEL:关心第0位,让第0位置0,其余位保持不变。设置为通用IO模式 1111 1110 P1SEL &= 0xFE ;

P1DIR:将P1.0设置为输出,让第0位置1,其余位保持不变。 0000 0001 P1DIR |= 0x01;

P0SEL:让第1位置0,其余保持不变,设置为通用IO模式 1111 1101 P0SEL &=0xFD;

P0DIR:将P0.1设置为输入,让第1位置0,其余位保持不变。 1111 1101 P0DIR &=0xFD;

P0INP:将P0.1设置为上下拉模式,即第1位置为0,其余位保持不变1111 1101 P0INP &= 0xFD;

9cca8b4264ecde43a076c0a48bb897f5.png

P2INP:将P0口设置为上拉,即第5位为0,其余位保持不变。 1101 1111 P2INP &= 0xDF;

00a1007977cc1d5b34e98b3e544a5b20.png
#include 

1.3 外部中断

硬件连接:LED1--P10, Key1--P01

bac7160a48f7b35a6a64f5e0c161ddfe.png

外部中断相关的寄存器:P0IEN,PICTL,P0IFG,IEN1

183de51d5a26a772eebca400e6105b15.png

a0df22c2bc8c0aa5cf8b543024864b3a.png

99b6682891e8eb2e85d719463a3c4eda.png

P0IEN:使用P0.1中断,第1位置1,其余位保持不变 0000 0010 P0IEN |= 0x02;

PICTL:上升沿中断。按键按下时由低变高。端口0配置为上升沿。第0位置0,其余位保持不变。 1111 1110 PICTL &= 0xFE;

P0IFG:端口0对应位发生中断时,对应的标志位会置1

IEN1:第5位置1,使能端口0中断。 0010 0000 IEN1 |=0x20;

#include 

1.4 定时器T1(16位),采用查询方式,模模式

需要配置T1CTL,T1CC0H,T1CC0L,IRCON,T1CCTL0

93f18d73b37464b119a6fa7e91b47764.png

d305fe4033a1d1f81a5335e493cca267.png

ac019861367ea23fd6d8b2200d5fb353.png

T1CTL:分频倍数选择和定时模式选择。128分频(3:2为11),自动重装载(1:0为01) 0000 1101 T1CTL=0x0D;

T1STAT:通道0中断有效。

2cb039e6e1b49c966bf3111c6038a6b9.png

【模模式】

当定时器运行在模模式,16位计数器从0x0000开始,每个活动时钟边沿增加1。当计数器达到T1CC0(溢出),寄存器T1CC0H:T1CC0L保存的最终计数值,计数器将复位到0x0000,并继续递增。如果定时器开始于T1CC0以上的一个值,当达到最终计数值(0xFFFF)时,设置标志IRCON.T1IF和T1CTL.OVFIF。如果设置了相应的中断屏蔽位TIMIF.OVFIM以及IEN1.T1EN,将产生一个中断请求。模模式可以用于周期不是0xFFFF的应用程序。

//采用定时器查询方式,使用模模式

1.5 定时器1,采用中断方式,模模式

在查询方式的基础上,开启中断

//采用定时器中断方式,使用模模式

1.6 串口通讯

1.6.1 串口发送

硬件连接:P02--ch340TxD P03--ch340RxD,使用UART0

cd0fe591783a1af4def65d1a5833aa54.png

配置串口的步骤:

  • 配置IO,使用外部设备功能
  • 配置相应的串口控制和状态寄存器
  • 配置串口工作的波特就绪。

相关的寄存器或标志位有:U0CSR(控制和状态寄存器),U0GCR(通用控制寄存器),U0BAUD(波特率控制寄存器),U0DBUF(收发数据缓冲器),UTX0IF(发送中断标志,IRCON2的第1位),PERCFG(设置UART0的引脚为1区),P2DIR(将P0优先配置为UART0)

76c557d90cb22f61ba01787921df21d8.png

7a2e1af9c24044d491d2e11f1d5623b0.png

b1ee8e52b39ab1ed562f13c2a7b7adcf.png

波特率公式:

0cd06f0793ee055cf12be78d3b76fa54.png

实际中只需要查表即可,并不用代公式。下表中是32MHz频率时波特率对应的数字

365c88635488522ad854318cbed6d9c1.png

在此要设置为115200,所以可以查出UxBAUD.BAUDM=216, UxGCR.BAUDE=11

dbc96235c05750a96673c6bc6bdb5dc0.png

PERCFG:配置串口0 位置,位于1区还是2区, PERCFG &= 0xFE; 第0位为0表示选择1区,即P02和P03为USART0的Rx和Tx

从下面这个表可以看出,此时USART0的引脚是P02--Rx P03--Tx

c89c33f7b43999e617740304859e2f4b.png

P2DIR:将P0优先作为UART0,第7,6位设置为00 P2DIR &= 0x3F;

5a6d7e01711aa2340d34afc500e60886.png

U0CSR:设置为UART,第7位置为1 U0CSR |=0x80;

根据波特率表,要设置为115200,U0GCR的第4到第0为设置为11,则U0GCR |=11 U0BAUD =216

UTX0IF = 0; 将UART0 TX 中断标志位置为0

下面是将系统时钟配置为32MHz的过程:

03006b8b6242efe455c99d304b0293f1.png

CLKCONCMD的第6位置为0,表示32MHz 晶振源,1011 1111 CLKCONCMD &= ~0x40;

efd9e5ab85eb2bf13ea2f87ca1b043d4.png

CLKCONSTA:0100 0000 第6位为0表示当前为32MHz

while(CLKCONSTA & 0x40) ; //等待晶振稳定为32MHz

0100 0111取反为 1011 1000,CLKCONCMD &= ~0x47 即将第6位,第2,1,0位置0

CLKCONCMD &= ~0x47; //设置系统主时钟频率为32MHz

//串口通讯,波特率115200,使用UART0

1.6.2 串口发送和接收

接收在1.6.1 基础上添加允许接收

00ce8a1a316d3e64e6852067cd1210e4.png

U0CSR:第6位置1表示允许接收 0100 0000

U0CSR |=0x40; //允许接收

ff3db6170bc8a99415f9a134593968a9.png

IEN0:第7位置1表示总中断EA, 第2位置1表示开USART0中断 1000 0100

IEN0 |= 0x84; //开总中断,开接收中断

//串口通讯,波特率115200,使用UART0

1.6.3 UART0控制LED

接收和发送与1.6.2中相同

发送L1ON#亮灯,L1OFF#灭灯,L3ON#亮LED3,L3OFF#灭LED3

//串口通讯,波特率115200,使用UART0
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值