单片机学习|单片机学习专栏——实验四4.1串口实验
【单片机学习|单片机学习专栏——实验四4.1串口实验】
步骤
- 系列文章
- 前言
-
- 1.main.c
- 2.sys_init.c
- 3.sys_init.h
- 总结
系列文章 提示:单片机与接口技术专栏,观看更多内容!
点我直达–>单片机与接口技术专栏
前言 编写程序实现CC2530每2秒钟周期性地发送字符串“Hello,this is *********” 到串口终端软件,其中*********表示学号。在发送字符串的同时LED3灯亮300ms然后熄灭。要求串口波特率为38400,无奇偶校验位,1位停止位。要求给出源代码及注释。
选做1: 要求用定时器实现上述2秒钟周期发送。
选做2: 可以利用按键进行控制发送,即按键按下时开始发送,再次按下时停止发送。
1.main.c
#include //引入CC2530所对应的头文件(包含各SFR的定义)
#include "sys_init.h" /*******************************************************
函数名称:主函数
*******************************************************/
uint counter = 0;
//全局变量
char message[ ]={
"Hello,this is,miao ze hao,19145120"};
//定义字符串数组
void main(void)
{xtal_init();
//初始化系统时钟
time1_init();
//初始化t1
led_init();
//初始化led灯
initUARTtest();
//初始化串口
ext_init();
// 按键初始化以及中断配置while(1)
{////选做1 定时器
//if(counter>=2000){//此处数字5根据实际需要设定0.250MS *2000=2000ms
//D6=0;
//开灯
//counter=0;
//UartTX_Send_String(message,strlen(message));
//这里使用strlen函数实现获取字符数组长度
//}
//else if(counter>=300){//D6=0;
//关灯
//}
//
////基础
//MyWait(2000);
//间隔两秒
//UartTX_Send_String(message,strlen(message));
//这里使用strlen函数实现获取字符数组长度}
}//串口发送字符串函数
void UartTX_Send_String(char *Data,int len)
{int j;
for(j=0;
j
2.sys_init.c
#include //引入CC2530所对应的头文件(包含各SFR的定义)
#include "sys_init.h"/*系统时钟初始化
-------------------------------------------------------*/
void xtal_init(void)
{SLEEPCMD &= ~0x04;
//都上电
while(!(CLKCONSTA & 0x40));
//晶体振荡器开启且稳定
CLKCONCMD &= ~0x47;
//选择32MHz晶体振荡器
SLEEPCMD |= 0x04;
}/*led初始化
-------------------------------------------------------*/
void led_init(void)
{P1SEL &= ~0x11;
//P1.0为普通 I/O 口 P1.1为普通 I/O 口
P1DIR |= 0x11;
//输出 D6 = 1;
//关LED
D7 = 1;
//关LED
}/*按键初始化
-------------------------------------------------------*/
void ext_init(void)
{P0SEL &= ~0x10;
//P0.0 和 P0.1为普通 I/O 口
P0DIR |= ~0x10;
//P0.0 和 P0.1输出
P0INP &= ~0x10;
//P0.0 和 P0.1上拉
D7 = 1;
//关LEDKEY1 P0_1
D6 = 1;
//关LEDKEY2 P0_0P0IFG &=~0X10;
//P0 4中断标志清0P0IEN|=0X10;
//开P0端口使能中断
P0IE=1;
//P0中断使能PICTL |=0x01;
//P0下降沿产生中断EA=1;
//总中断使能
}/*c串口初始化
-------------------------------------------------------*/
void initUARTtest(void)
{ //使用串口备用位置1 P0口
PERCFG = 0x00;
//P0用作串口
P0SEL = 0x3c;
//UART方式
U0CSR |= 0x80;
//波特率baud_e的选择,书本p99页表5.6
U0GCR |= 10;
//波特率设为38400
U0BAUD |= 59;
}/*******************************************************
函数名称: time1_init
功能:初始化定时器1
入口参数:无
出口参数:无
返回值:无
*******************************************************/
void time1_init()
{int value=https://www.it610.com/article/125;
//此处数值根据实际需要设定2500==20毫秒一次125==1毫秒一次T1CTL = 0x0E;
//T1定时器 128 分频,模模式 ;
//此处分频系数根据实际需要设定T1CCTL0 |= 0x04;
//设定timer1通道0输出比较模式
//设定计数溢出值
T1CC0H = value/256;
T1CC0L= value %256;
//定时器1中断使能
IEN1|=0X02;
//开总中断
EA=1;
}/*延时函数
-------------------------------------------------------*/
void halWait(unsigned char wait)
{unsigned long largeWait;
if(wait == 0)
{
return;
}
largeWait = ((unsigned short) (wait << 7));
largeWait += 114*wait;
largeWait = (largeWait>> CLKSPD);
while(largeWait--);
return;
}/*延时函数2
-------------------------------------------------------*/
void MyWait(unsigned short wait)
{unsigned char a,b,i;
a= wait % 250;
//表示余数
b= wait / 250;
//表示有几个整的
for(i=0;
i
3.sys_init.h
#include //引入CC2530所对应的头文件(包含各SFR的定义)/*----------------------------------------------------------------------------*/
/*macro declaration*/
/*----------------------------------------------------------------------------*/
#define D6P1_0//定义D6为P1_0口控制
#define D7P1_1//定义D6为P1_0口控制 #define uintunsignedint
#define ucharunsignedchar#define CLKSPD( CLKCONCMD & 0x07 )//getting the clock division factor
#define KEY2 P0_0
#define KEY1 P0_1
void xtal_init(void);
void led_init(void);
//初始化led灯
void initUARTtest(void);
void halWait(unsigned char wait);
void MyWait(unsigned short wait);
void UartTX_Send_String(char *Data,int len);
void ext_init(void);
// 按键初始化以及中断配置
void time1_init(void);
总结 大家喜欢的话,给个,点个关注!继续跟大家分享敲代码过程中遇到的问题!
推荐阅读
- 由浅入深理解AOP
- 继续努力,自主学习家庭Day135(20181015)
- python学习之|python学习之 实现QQ自动发送消息
- 一起来学习C语言的字符串转换函数
- 定制一套英文学习方案
- 漫画初学者如何学习漫画背景的透视画法(这篇教程请收藏好了!)
- 《深度倾听》第5天──「RIA学习力」便签输出第16期
- 如何更好的去学习
- 【韩语学习】(韩语随堂笔记整理)
- 焦点学习田源分享第267天《来访》