一:實驗目的
- 利用CC2530 的GPIO讀取按鍵值并相應對進行LED發光二極管的亮滅操作;
- 利用CC2530的序列槽0進行資料收發通訊。
二:實驗環境
1.硬體:通用節點、USB仿真器、USB電纜、PC機;
2.軟體:IAR Embedded Workbench for MCS-51、序列槽調試工具。
三:實驗内容及原理
1.了解有關實驗内容的知識點
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsICM38FdsYkRGZkRG9lcvx2bjxiNx8VZ6l2cs0TPR5kMnpXT1kleNBDOsJGcohVYsR2MMBjVtJWd0ckW65UbM5WOHJWa5kHT20ESjBjUIF2X0hXZ0xCMx81dvRWYoNHLrdEZwZ1Rh5WNXp1bwNjW1ZUba9VZwlHdssmch1mclRXY39CXldWYtlWPzNXZj9mcw1ycz9WL49zZuBnL5QzMyEjMxQTM2ETMxgTMwIzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
2.硬體設計
此圖為USB轉序列槽部分原理圖;
此圖為按鍵部分的電路圖;
3.軟體設計
花式流水燈:
奇數偶數交錯燈:
序列槽:
#include "ioCC2530.h"
#include <string.h>
#define uint unsigned int
#define uchar unsigned char
//定義控制燈的端口
#define led1 P1_0
#define led2 P1_1
void InitIO(void); //IO初始化
void InitUart(void); //序列槽初始化
void SendString(char*string,uint legth); //發送字元串
uchar temp; // 存放接受的資料
char wch[] = "Welcome to test this program!\n";
void DelayXms(unsigned int Count)
{
unsigned int i;
unsigned int j;
for(i = 0; i < Count; i++)
{
for( j=10000; j>0; j--);
}
}
void InitIO(void)
{
SLEEPCMD &= ~0X04;
CLKCONCMD = 0X10; //32k和32M時鐘使用外部晶體,timer分頻8M
while(CLKCONSTA!=0X10); //等待時鐘切換
SLEEPCMD = 0X04;
P2DIR = 0x00; //高兩位零 若設則最高優先USART0
P1DIR|= 0X03; //P1.0 P1.1 LEDs 燈端口配置
P0DIR|= 0X00; //input
PERCFG = 0x00; //UART0 預設端口
P1SEL = 0X00;
P0SEL = 0X0c; //P0<3:2>設定成外圍應用
}
void InitUart(void)
{
U0CSR |= 0x80; //UART方式
U0GCR = 11; //baud_e 波特率設為115200
U0BAUD |= 216; //baud_m = BaudRate*2^(28-buad_e)/32M-256
//BaudRate=(256+baud_m)/2^(28-buad_e)x32MHz
UTX0IF = 1; //接收中斷标記
U0CSR |= 0X40; //允許接收
URX0IE = 1; //接收中斷使能
EA =1; //總中斷開關打開
}
void SendString(char*string,uint lenth)
{
uint j;
for (j=0; j<lenth; j++)
{
U0DBUF = *string++; //将要發送字元送入U0DBUF發送寄存器
while(UTX0IF == 0); //等待發送完成
UTX0IF = 0; //清0标志位
}
}
void main(void)
{
InitIO();
InitUart();
DelayXms(10);
led1=1; //點亮2個LED燈
led2=1;
SendString(wch,sizeof(wch));
while(1)
{
; //進入無限循環等待中斷函數被處觸發
}
}
#pragma vector = URX0_VECTOR
__interrupt void UART0_ISR(void)
{
URX0IF = 0; //清中斷标志
temp = U0DBUF;
U0DBUF = temp; //将收到的字元發送回去
while(UTX0IF == 0); //等待發送
UTX0IF = 0; //清發送标志
led1 = ~led1; //訓示中斷活動
led2 = ~led2;
}
按鍵驅動:
五:實驗結果
LED:花式流水燈:先兩次亮滅後燈依次亮。
奇數偶數交錯燈:先一次亮滅後偶數亮接着奇數亮。
序列槽:電腦接收到資料
按鍵驅動:
使用USB 仿真器連接配接電腦和通用傳感器節點子產品并在IAR環境下運作程式後可發現兩個發光二極管滅,後進行第一次按鍵可以發現其中一個發光二極管亮,再進行第二次按鍵可以發現前一個發光二極管滅後一個發光二極管亮,再進行第三次按鍵可以發現兩個同時亮,再按鍵可以發現兩個發光二極管都滅,再繼續按鍵則是循環這四次按鍵。長按按鍵可循環這個過程,改變延時數值可以發現,若改成大于之前的數字,則長按按鍵時可以發現發光二極管狀态改變時間變長,反之改成小于之前的數字則狀态改變時間變短。