- 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
《电子系统设计与工程实践2》实验讲义(AW60)(实验2_串口通信)
《电子系统设计与工程实践 2》实验讲义(AW60 版)
实验二 串口通信实验
一、实验目的
了解 AW60 单片机串口通信基本原理。
了解中断的基本原理。
掌握基于构件库的串口编程基本方法。
掌握基于轮询和中断方式的串口接收数据编程方法。
二、实验仪器
自制 AW60 单片机开发板 V1;BPM 调试器;PC 机
三、预习练习
为使实验能顺利地进行,课前对教材相关内容进行复习,对实验原理、内容、 步骤、方法要做充分预习,编写相关实验程序(电子版)。
在预习报告中写出所编写的程序思路、画出主函数和中断处理函数流程图、
列出全局变量、主函数、中断处理等主要函数的程序代码。
四、实验原理
1. AW60 串口编程基本流程
AW60 对串口的编程主要涉及的寄存器有:
SCI 波特率寄存器:SCIxBDH、SCIxBDL。
SCI 控制寄存器:SCIxC1、SCIxC2、SCIxC3,其中 SCIxC1 主要控制串口的工作 方式,SCIxC2 主要控制发送器/接收器使能、发送和中断允许。
SCI 状态寄存器:SCIxS1、SCIxS2,其中 SCIxS1 包含发送和接收标志位,可用
于查询。 串口数据寄存器:SCIxD,用于缓存发送数据和接收数据。 编写 SCI 程序主要包括三部分:
(1)SCI 初始化
设置波特率:根据通信双方的波特率,设定 SCI 波特率寄存器 SCIxBD 中分频
因子。需要先写 SCIxBDH,再写 SCIxBDL。
设置工作模式(帧格式):更新 SCI 控制寄存器 1(SCIxC1),设定环路模式、 8 位还是 9 位数据位、是否允许硬件奇偶校验等,如无特别需求,可取其初始值 而不做设定。
《电子系统设计与工程实践 2》实验讲义(AW60 版)
使能接收和发送器工作:更新 SCI 控制寄存器 2(SCIxC2)来允许发送、接 收,以及是否允许发送中断和接收中断等。
如需要,更新 SCI 控制寄存器 3(SCIxC3),再对发送数据是否取反、是否允 许错误中断等进行设定。
(2)数据发送
允许 SCI 发送之后,通过读 SCI 状态寄存器 1(SCIxS1)判断其中的“TDRE 位” 是否为 1 来判断发送数据寄存器是否为空;当发送数据寄存器为空时,可以写发 送数据到发送数据寄存器 SCIxD。
写发送数据到 SCIxD 之后,通过查询或中断方式判断 SCIxS1 中的“发送完成 标志位 TC”是否为 1 来判断当前数据是否发送完成;当前字符发送完成后,可以 回到上一步继续下一个数据的发送。
(3)数据接收
允许 SCI 接收之后,通过查询或中断方式判断 SCIxS1 中的“接收数据寄存器 满标志位 RDRF”是否为 1 来判断是否接收到了新数据;当接收到新数据时,读寄 存器 SCIxD 来保存新数据,RDRF 自动清零。
2. SCI 构件中常用函数说明
(1)void SCIInit(uint8 SCINo, uint8 sysclk, uint16 baud);
功能:初始化 SCIx 模块,x 代表 1、2;
参数:uint8 SCINo: 第 SCINo 个 SCI 模块,其中 SCINo 取值为 1、2;如果 SCINo
大于 2,则认为是 2;
uint8 sysclk:系统总线时钟,以 MHz 为单位;
uint16 baud: 波特率,如 4800、9600、19200、38400;
(2)void SCISendN(uint8 SCINo, uint16 n, uint8 ch[]);
功能:串行发送 N 个字节; 参数:uint16 n:发送的字节数;
uint8 ch[]: 待发送的数据;
(3)uint8 SCIReN(uint8 SCINo, uint16 n, uint8 ch[]);
功能:从串口接收 N 个字节的数据;
参数:uint8 SCINo: 第 SCINo 个 SCI 模块,其中 SCINo 取值为 1、2;
uint16 n: 要接收的字节数;
uint8 ch[]: 存放接收数据的数组;
返回值:接收标志= 0 接收成功= 1 接收失败;
3. 基于构件库的中断编程方法
《电子系统设计与工程实践 2》实验讲义(AW60 版)
(1)在main.c 中编写中断初始化程序,允许相应中断(模块中断和总中断 ); 开放总中断:
#define E nableInterrupts() asm(“CLI”)
关闭总中断:
#define DisableInterr upts() asm(“SEI”)
(2)在 isr.c 中定义中断处理函数,用 in terrupt 声明所定义的函数为 IS R; interrupt void ISR_N ame(void)
文档评论(0)