单片机学习专栏——实验四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 <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串口实验相关推荐
- (实验4)单片机,STM32F4学习笔记,代码讲解【串口实验】【正点原子】【原创】
文章目录 其它文章链接,独家吐血整理 实验现象 主程序 串口中断程序 代码讲解 其它文章链接,独家吐血整理 (实验3)单片机,STM32F4学习笔记,代码讲解[按键输入实验][正点原子][原创] (实 ...
- 《Python程序设计》实验四 Python综合实践实验报告
<Python程序设计>实验四 Python综合实践实验报告 1.实验内容 Python综合应用:爬虫.数据处理.可视化.机器学习.神经网络.游戏.网络安全等. 在华为ECS服务器(Ope ...
- 在c语言如何对拨码开关编程,实验四 指示灯和拨码开关实验_百度文库(15页)-原创力文档...
实验四 指示灯和拨码开关实验 一.实验目的 1.了解F2812-A 评估板在TMS320F2812DSP 外部扩展存储空间上的扩展. 2.了解F2812-A 评估板上指示灯扩展原理. 3.了解F281 ...
- 实验四:存储器扩展实验(Yanlz+Unity+XR+实验课+字位扩展+片选信号+RAM+ROM+磁盘阵列+RAID+立钻哥哥+==)
计算机组成原理 实验四:存储器扩展实验 1.实验目的 1.了解存储器字位扩展基本原理: 2.掌握片选信号设计方法: 3.掌握存储器字位扩展电路设计方法: 2.实验操作 选择芯片: 设计片选信号: 组装 ...
- 计算机系统(2) 实验四 缓冲区溢出攻击实验
计算机系统(2) 实验四 缓冲区溢出攻击实验 一. 实验目标: 二.实验环境: 三.实验内容 四.实验步骤和结果 (一)返回到smoke (二)返回到fizz()并准备相应参数 (三)返回到bang( ...
- 网络协议实验四 ARP 协议分析实验
实验四 ARP 协议分析实验 2.2 ARP 协议分析实验 1.ARP 协议介绍 ARP 是地址解析协议 (Reverse Address Resolution Protocol)的缩写,负责实现从I ...
- 南航计算机硬件实验,南航计硬实验四数据块移动实验报告.doc
南航计硬实验四数据块移动实验报告 电工电子实验中心 课程名称: 计算机硬件技术基础实验 实验名称: 实验四 数据块移动 姓名: 学号: 评定成绩: 审阅教师: 实验时间: 2020.5.7 南京航空航 ...
- 实验四 OR指令设计实验【计算机组成原理】
实验四 OR指令设计实验[计算机组成原理] 前言 推荐 实验四 OR指令设计实验 一.实验目的 二.实验环境 三.实验原理 四.实验任务 五.实验思考 实验四 代码 修改代码 define ID EX ...
- cmi码型变换matlab程序_实验四 码型变换实验.doc
实验四 码型变换实验 一.实验要求 1.了解几种常见的数字基带信号. 2.掌握常用数字基带传输码型的编码规则. 3.掌握用FPGA实现码型变换的方法. 二.实验内容 1.观察NRZ码.RZ码.BRZ码 ...
最新文章
- 关于Synchronized研伸扩展
- JSP利用servlet上传文件时的中文乱码问题
- python中函数的调用_慢步python,编程中函数的概念,python中函数的声明和调用
- Java Byte类的hashCode()方法及示例
- Mac OS X 下文件名乱码出现的原因和解决方法
- Python入门-散点图绘制
- 企业管理系统原型、HRM、工作报告统计、0A、商机、合同、客户管理、产品管理、企业oa、行政办公系统、数据报表、销售分析、客户分析、产品管理、人力资源管理系统、crm、axure原型、rp源文件
- 前端每日实战:62# 视频演示如何用纯 CSS 创作一只蒸锅
- css 属性名 查询表
- 第二次作业:硬币游戏——代码分析与改进
- Oracle 中session和processes的初始设置
- origin函数绘图_资料|史上最全10套Origin科研必备绘图教学,无需代码
- x9此计算机上没有hasp_中琅条码打印软件安装后弹出HASP错误代码处理方法
- web全栈前端学习路线-20个真实web开发项目集合
- 如何用AutoRunner进行脚本手工编写
- 深度学习GPU最全对比,到底谁才是性价比之王?
- 敏感字符的识别+处理
- 声音采样率对声音事件分类的简单探究
- js json数据去重。json数据如何将相邻的一条数据的重复数据删掉,通过key判断值相等的
- sql盲注二分法注入脚本