文章目录:
实验要求
代码实现
#include "ioCC2530.h"
#define D4 P1_1
#define D6 P1_4
unsigned char temp=0;//接收命令变量
//系统时钟切换函数从16M——32M
void Set_Clock_32M()
{
CLKCONCMD &=~0x40;
while(CLKCONSTA &0X40)
{
}
CLKCONCMD &=~0x47;
}
//端口初始化函数
void Init_Prot()
{
//配置4个LED灯的引擎
//选择端口的功能
P1SEL &=~0x1B;//设置通用io端口
//配置端口的方向
P1DIR |=0x1B;
//关闭LED灯
P1 &=~0x1B;
}
//串口初始化函数
void Init_Uart0()
{
//1.设置串口的引脚功能,将P0_2和P0_3设置为外设功能
PERCFG &=~0X01;
P0SEL |=0x0C; //0000 1100
//2.设置串口的波特率:32M——9600
U0BAUD = 59;
U0GCR = 8;
//3.设置一个UART控制寄存器 U0UCR
U0UCR |=0x80;
//4.设置控制与状态寄存器 U0CSR
U0CSR |=0xc0; //1100 0000
//5.清除中断标志
//发送
UTX0IF = 0;
//接收
URX0IF = 0;
//6.使能串口数据接收完成中断和总中断
URX0IE = 1;
EA = 1;
}
//串口字节发送函数
void URD_SendByte(unsigned char dat)
{
U0DBUF =dat;
while(UTX0IF==0);
UTX0IF=0;
}
//串口字符串发送函数
void URD_SendString(unsigned char *str)
{
while(*str !='\0')
{
URD_SendByte(*str++);
}
}
//串口数据接受完成中断服务函数
#pragma vector = URX0_VECTOR //起始语句
//中断服务函数
__interrupt void Service_UR0Recv()
{
temp=U0DBUF;
}
//命令控制灯光开关函数
void Control_LED()
{
switch(temp)
{
case 0xA1:
D4=1;
URD_SendString("D4 is open\r\n");
break;
case 0xA2:
D4=0;
URD_SendString("D4 is closed\r\n");
break;
case 0xB1:
D6=1;
URD_SendString("D6 is open\r\n");
break;
case 0xB2:
D6=1;
URD_SendString("D6 is closed\r\n");
break;
}
temp=0;
}
void main(void)
{
Set_Clock_32M();
//端口初始化
Init_Prot();
Init_Uart0();
while(1)
{
if(temp!=0)
{
Control_LED();
}
}
}