步骤

  • 系列文章
  • 前言
    • 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 <ioCC2530.h>                                          //引入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();//初始化t1led_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<len;j++){U0DBUF = *Data++;   // 每次循环发送1个字符while(UTX0IF == 0); // 等待发送完毕UTX0IF = 0;}
}/*******************************************************
函数名称:中断
功能:中断函数
入口参数:无
出口参数:无
返回值:无
*******************************************************/
#pragma vector = T1_VECTOR      __interrupt void T1_ISR(void)            {       EA=0;//关总中断//要求每隔500+120ms亮灭//此处补充时间控制和亮灭代码counter=counter+1;T1IF=0;  // 清除中断标志EA=1;                           //开总中断 }/*******************************************************
函数名称:P0_ISR
功能:中断函数
入口参数:无
出口参数:无
返回值:无
*******************************************************/
#pragma vector = P0INT_VECTOR
__interrupt  void P0_ISR (void)
{EA = 0; //关中断,这也意味着 同时只能有一个中断操作UartTX_Send_String(message,strlen(message));//这里使用strlen函数实现获取字符数组长度//开中断P0IEN |= 0x10;P0IEN |=0x10;EA = 1; //开中断
}

2.sys_init.c

#include <ioCC2530.h>             //引入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;                //关LED  KEY1 P0_1D6 = 1;                //关LED  KEY2 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.6U0GCR |= 10;   //波特率设为38400U0BAUD |= 59;  }/*******************************************************
函数名称: time1_init
功能:初始化定时器1
入口参数:无
出口参数:无
返回值:无
*******************************************************/
void time1_init()
{int value=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<b;i++){halWait(250); //取整数的halWait延时}halWait(a); //取余数的halWait延时return;
}

3.sys_init.h

#include <ioCC2530.h>             //引入CC2530所对应的头文件(包含各SFR的定义)/*----------------------------------------------------------------------------*/
/*                            macro declaration                           */
/*----------------------------------------------------------------------------*/
#define D6    P1_0              //定义D6为P1_0口控制
#define D7    P1_1              //定义D6为P1_0口控制 #define uint   unsigned  int
#define uchar  unsigned  char#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);

总结

大家喜欢的话,给个

单片机学习专栏——实验四4.1串口实验相关推荐

  1. (实验4)单片机,STM32F4学习笔记,代码讲解【串口实验】【正点原子】【原创】

    文章目录 其它文章链接,独家吐血整理 实验现象 主程序 串口中断程序 代码讲解 其它文章链接,独家吐血整理 (实验3)单片机,STM32F4学习笔记,代码讲解[按键输入实验][正点原子][原创] (实 ...

  2. 《Python程序设计》实验四 Python综合实践实验报告

    <Python程序设计>实验四 Python综合实践实验报告 1.实验内容 Python综合应用:爬虫.数据处理.可视化.机器学习.神经网络.游戏.网络安全等. 在华为ECS服务器(Ope ...

  3. 在c语言如何对拨码开关编程,实验四 指示灯和拨码开关实验_百度文库(15页)-原创力文档...

    实验四 指示灯和拨码开关实验 一.实验目的 1.了解F2812-A 评估板在TMS320F2812DSP 外部扩展存储空间上的扩展. 2.了解F2812-A 评估板上指示灯扩展原理. 3.了解F281 ...

  4. 实验四:存储器扩展实验(Yanlz+Unity+XR+实验课+字位扩展+片选信号+RAM+ROM+磁盘阵列+RAID+立钻哥哥+==)

    计算机组成原理 实验四:存储器扩展实验 1.实验目的 1.了解存储器字位扩展基本原理: 2.掌握片选信号设计方法: 3.掌握存储器字位扩展电路设计方法: 2.实验操作 选择芯片: 设计片选信号: 组装 ...

  5. 计算机系统(2) 实验四 缓冲区溢出攻击实验

    计算机系统(2) 实验四 缓冲区溢出攻击实验 一. 实验目标: 二.实验环境: 三.实验内容 四.实验步骤和结果 (一)返回到smoke (二)返回到fizz()并准备相应参数 (三)返回到bang( ...

  6. 网络协议实验四 ARP 协议分析实验

    实验四 ARP 协议分析实验 2.2 ARP 协议分析实验 1.ARP 协议介绍 ARP 是地址解析协议 (Reverse Address Resolution Protocol)的缩写,负责实现从I ...

  7. 南航计算机硬件实验,南航计硬实验四数据块移动实验报告.doc

    南航计硬实验四数据块移动实验报告 电工电子实验中心 课程名称: 计算机硬件技术基础实验 实验名称: 实验四 数据块移动 姓名: 学号: 评定成绩: 审阅教师: 实验时间: 2020.5.7 南京航空航 ...

  8. 实验四 OR指令设计实验【计算机组成原理】

    实验四 OR指令设计实验[计算机组成原理] 前言 推荐 实验四 OR指令设计实验 一.实验目的 二.实验环境 三.实验原理 四.实验任务 五.实验思考 实验四 代码 修改代码 define ID EX ...

  9. cmi码型变换matlab程序_实验四 码型变换实验.doc

    实验四 码型变换实验 一.实验要求 1.了解几种常见的数字基带信号. 2.掌握常用数字基带传输码型的编码规则. 3.掌握用FPGA实现码型变换的方法. 二.实验内容 1.观察NRZ码.RZ码.BRZ码 ...

最新文章

  1. 关于Synchronized研伸扩展
  2. JSP利用servlet上传文件时的中文乱码问题
  3. python中函数的调用_慢步python,编程中函数的概念,python中函数的声明和调用
  4. Java Byte类的hashCode()方法及示例
  5. Mac OS X 下文件名乱码出现的原因和解决方法
  6. Python入门-散点图绘制
  7. 企业管理系统原型、HRM、工作报告统计、0A、商机、合同、客户管理、产品管理、企业oa、行政办公系统、数据报表、销售分析、客户分析、产品管理、人力资源管理系统、crm、axure原型、rp源文件
  8. 前端每日实战:62# 视频演示如何用纯 CSS 创作一只蒸锅
  9. css 属性名 查询表
  10. 第二次作业:硬币游戏——代码分析与改进
  11. Oracle 中session和processes的初始设置
  12. origin函数绘图_资料|史上最全10套Origin科研必备绘图教学,无需代码
  13. x9此计算机上没有hasp_中琅条码打印软件安装后弹出HASP错误代码处理方法
  14. web全栈前端学习路线-20个真实web开发项目集合
  15. 如何用AutoRunner进行脚本手工编写
  16. 深度学习GPU最全对比,到底谁才是性价比之王?
  17. 敏感字符的识别+处理
  18. 声音采样率对声音事件分类的简单探究
  19. js json数据去重。json数据如何将相邻的一条数据的重复数据删掉,通过key判断值相等的
  20. sql盲注二分法注入脚本

热门文章

  1. WIN7定时开关机命令
  2. Android权限系统(一):开机获取权限信息
  3. 用Python解六年级数学题,求阴影面积
  4. vuejs中路由的传参以及路由props配置
  5. 11分钟解决“世界性”难题!百度生物计算研究成果登顶《Nature》正刊
  6. js判断pc端还是移动端
  7. 【PAT乙级】有几个PAT
  8. Cartographer 使用配置
  9. java lcs_Java算法之最长公共子序列问题(LCS)实例分析
  10. 【Android 10 源码】MediaRecorder 录像流程:MediaRecorder 配置