版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、 如何实现W7100A的UART通信版本 1.0 How to use UART in W7100A 目录1简介 (32模式0, 8位UART, 固定波特率 (43模式1, 8位UART, 可变波特率 (53.1定时器1(Timer1 时钟源 (53.2定时器2(Timer2时钟源 (64模式2, 9位UART, 固定波特率 (85模式3, 9位UART, 可变波特率 (95.1定时器1(Timer1时钟源 (95.2定时器2(Timer2时钟源 (106运行实例 (126.1创建一个Keil工程 (126.2编译生成HEX文件 (126.3下载HEX文件到iMCU7100EVB (136.4
2、串行终端程序 (136.5运行UART示例代码 (16文档历史信息 (17 How to use UART in W7100A 1简介这篇文档主要介绍W7100A实现UART通信的基本示例程序。所有的这些示例代码都是基于C语言和Keil编译器完成的。更多的详细信息,请参阅W7100A数据手册第6章UART中关于UART、寄存器、中断等的介绍。图表1为设置UART波特率所用到的各个寄存器。与定时器1(Timer1相关的寄存器是SMOD和TH1,与定时器2(Timer2相关的寄存器是RLDH和RLDL。图表1 波特率设置例子 在一些UART通信的示例中,UART通信有固定的波特率(模式0和模式2。
3、如果是这种波特率固定的情况,请参考W7100A数据手册第6章UART中关于波特率的计算方法。所有的程序都是实现回送(Echo-back的例子,即回送串行通信接收到的信息。W7100A中UART有4个模式,从UART模式0到UART模式3。每个模式下具体的代码实现将在后面进行详细介绍。void PutByte(unsigned char byDataSBUF = byData; /向串行缓存器中写入数据while(!TI; /等待直到所有的数据记录完成TI = 0; /清除发送中断unsigned char GetByte(voidunsigned char byData; / 等待直到数据接收
4、完成while(!RI;RI = 0; /清除RIbyData = SBUF; /读取数据return byData;void main(Init_iMCU(; /调用Init_iMCU(函数while(1 PutByte(GetByte(; /回送(Echo-back接收到的数据关于UART模式0下的波特率,选择内部时钟12分频(f os c/12。考虑到W7100A的内部时钟将产生了一个高速的大小为7.3MHz的波特率时钟。对于这种固定且高速的波特率,通常不会选择模式0。因为模式0使用同步传输,没有起始位和停止位。在所有的这些示例代码中,在Init_iMCU(函数中将SCON寄存器设置为0
5、x10。PutByte(函数可以将串行输入值写入到串行缓存器中,然后等待所有的数据发送完成后清除TI位。GetByte(函数则返回接收到的串行数据,等待直到所有的数据接收完成再清除RI位。Main(函数则是通过调用Init_iMCU(、PutByte(、GetByte(函数输出所有接收到的数据。void Init_iMCU(voidSCON = 0x50; / 串行模式1, SM00 = 0, SM01 =1, REN=1TMOD |= 0x20; / 定时器1(Timer1模式2PCON |= 0x80; / SMOD0 = 1TL1 = 0xFC; / 波特率设定为115200bpsTH1
6、 = 0xFC;/ 参考W7100A数据手册TR1 = 1;/启动定时器1(Timer1void PutByte(unsigned char byDataSBUF = byData; / 向串行缓存器中写入数据while(!TI; / 等待数据记录完成TI = 0; / 清除传输中断unsigned char GetByte(voidunsigned char byData; /等待直到数据接收while(!RI;RI = 0; /清除RIbyData = SBUF; / 读取数据return byData;void main(Init_iMCU(; /调用Init_iMCU函数while(1
7、 PutByte(GetByte(; /回送(Echo-back接收到的数据 How to use UART in W7100A 在UART模式1下可以交换使用定时器1(Timer1和定时器2(Timer2来设定波特率。在这一章,我们使用定时器1(Timer1来设定波特率的值。详细信息请参考W7100A数据手册波特率的设置。示例程序中,将SCON寄存器的值设定为0x50,同时设定Timer1为模式2方式。如果要设置波特率的值,还要将SMOD位置1,TH1寄存器的值设定为0xFC。此时,波特率的值为115200bps。其它用来输出的代码程序也与第2章的接收程序大致相同。3.2定时器2(Timer
8、2时钟源void Init_iMCU(voidSCON = 0x50; / 串行模式1, SM00 = 0, SM01 =1, REN=1T2CON = 0x30; / 定时器2(Timer2波特率发生器模式TH2 = 0xFF;/ 波特率设置为115200bpsTL2 = 0xE8; / 请参考W7100A数据手册RLDH = 0xFF; / 重新重载波特率为115200bpsRLDL = 0xE8;/ 重新重载波特率为115200bpsTR2 = 1;/ 启动定时器2(Timer2void PutByte(unsigned char byDataSBUF = byData; / 向串行缓存
9、器中写入数据while(!TI; / 等待直到所有的数据记录完成TI = 0; / 清除传输中断unsigned char GetByte(voidunsigned char byData; / 等待数据接收while(!RI;RI = 0; /清除RIbyData = SBUF; / 读取数据return byData;void main(Init_iMCU(; /调用Init_iMCU函数while(1 PutByte(GetByte(; /回送(Echo-back接收到的数据 How to use UART in W7100A UART在模式1下可以交换使用定时器1(Timer1和定时器
10、2(Timer2来设定波特率的值。在这一章节,利用定时器2(Timer2来设定波特率。详细信息请参考W7100A数据手册。在这些示例程序中,将SCON寄存器设置为0x50,选择定时器2(Timer2为波特率发生器模式。为了能够正确的设定波特率,还需要将TH2和TL2分别设为0xFF和0xE8。这样设置完成后,波特率就是115200bps。RLDH和RLDL的值可以重新加载,分别定义为0xFF和0xE8。其它用于输出的代码程序和第2章的接收程序相同。void PutByte(unsigned char byDataSBUF = byData; / 向串行缓存器中写入数据while(!TI; /
11、等待所有的数据记录完成TI = 0; / 清除传输中断unsigned char GetByte(voidunsigned char byData; / 等待数据接收while(!RI;RI = 0; /清除RIbyData = SBUF; /读取数据return byData;void main(Init_iMCU(; /调用Init_iMCU函数while(1 PutByte(GetByte(; /回送(Echo-back接收到的数据UART模式2的波特率固定内部时钟fosc/32或fosc/64。具体选择f os c/32还是f os c/64 要根据SMOD0位来确定。根据W7100A
12、的内部时钟的大小,将产生的高速波特率时钟范围为2.7 1.4MHz。如同模式0的情况类似,在实际情况中一般不使用模式3,因为波特率固定且为高速波特率时钟。在这些示例程序中,将SCON寄存器设定为0x90。为了能够正确的设定波特率,还需要设置PCON寄存器的最高位SMOD0 (波特率= f os c/32。其它用于输出的代码和第2章中的接收过程的程序相同。TMOD |= 0x20; / 定时器1(Timer1模式2PCON |= 0x80; / SMOD0 = 1TL1 = 0xFC; / 波特率115200bpsTH1 = 0xFC;/请参考W7100A数据手册TR1 = 1;/ 启动定时器1
13、(Timer1void PutByte(unsigned char byDataSBUF = byData; / 向串行缓存器中写入数据while(!TI; / 等待数据记录完成TI = 0; / 清除传输中断unsigned char GetByte(voidunsigned char byData; /等待数据接收while(!RI;RI = 0; /清除RIbyData = SBUF; / 读取数据return byData;void main(Init_iMCU(; /调用Init_iMCU函数while(1 PutByte(GetByte(; /回送(Echo-back接收到的数据在
14、UART模式3下,可以交换使用定时器1(Timer1和定时器2(Timer2来设定波特率。在这一章节,我们使用定时器1(Timer1来设置波特率, 详细信息请参考W7100A数据手册。与模式1不同的是,停止位比之前多了1位。这一位可以用作奇偶校验或者多重处理器通信, 详情请参考W7100A数据手册。在这些示例程序中,将SCON寄存器设置为0xD0,定时器1(Timer1选择模式2。为了能正 How to use UART in W7100A 确设置波特率,需要设置PCON寄存器的SMOD位,同时TH1寄存器的值设为0xFC。这样设置完成后,波特率的值为115200bps。其它用于实现输出信息的
15、代码和第2章中的接收过程的程序相同。5.2定时器2(Timer2时钟源void Init_iMCU(voidSCON = 0xD0; / 串行模式3, SM00 = 1, SM01 =1, REN=1T2CON = 0x30; /定时器2(Timer2波特率发生器模式TH2 = 0xFF;/波特率设定为115200bpsTL2 = 0xE8; / 请参考W7100A数据手册RLDH = 0xFF; / 波特率重载值设为115200bpsRLDL = 0xE8;/ 波特率重载值设为115200bpsTR2 = 1;/ 启动定时器2(Timer2void PutByte(unsigned char
16、 byDataSBUF = byData; / 向串行缓存器中写入数据while(!TI; / 等待数据记录完成TI = 0; / 清除传输中断unsigned char GetByte(voidunsigned char byData; /等待数据接收while(!RI;RI = 0; /清除RIbyData = SBUF; /读取数据return byData;void main(Init_iMCU(; /调用Init_iMCU函数while(1 PutByte(GetByte(; /回送(Echo-back接收到的数据 How to use UART in W7100A 在UART模式3
17、下,可以交换使用定时器1(Timer1和定时器2(Timer2来设置波特率。在这一章节,利用定时器2(Timer2来设置波特率。更多的详细信息请参考W7100A数据手册。与模式1不同的是,在停止位之前多了1位,此位可以用于奇偶校验或者多重处理器通信。具体的详细信息可以参考W7100A数据手册。在上面的程序中,将SCON寄存器设为0xD0,定时器2(Timer2设定为波特率发生器模式。为了能够设定波特率,还需要将TH2和TL2的值分别设为0xFF和0xE8。设置完成后,波特率就变成115200bps。重载值RLDH和RLDL也必须相应的设置为0xFF和0xE8。其它实现输出信息的代码也和第2章中
18、介绍的接收过程的程序类似。 How to use UART in W7100A 6运行实例本章介绍了如何下载并且运行iMCU7100EVB应用手册中UART通信的示例代码程序。所有的代码都是用C语言编写并且在Keil环境下实现的。用户可以使用两个程序来下载Keil工程中生成的HEX文档。一种方法是使用WizISP程序,另外一种是利用W7100A Debugger程序。更多的详细信息,请参考iMCU7100EVB用户指南、WizISP程序指南和W7100ADebugger指南。在iMCU7100EVB开发板上运行示例代码过程如下(这些代码在文档如何实现W7100A的UART通信中可以找到:1.创
19、建一个Keil工程,写入UART示例代码2.由Keil编译器编进行编译,并生成HEX文件3.利用WizISP程序或者W7100A Debugger程序下载已经生成的HEX文件4.运行串行终端程序,设置端口、波特率等等5.在开发板上运行程序,确认能接收到来自终端程序的串行消息下面的章节将会显示每一步的操作过程。6.1创建Keil工程用户可以创建一个新的Keil工程,或者打开附件中的Keil工程,如图6.1所示。 <图6.1>打开UART的Keil工程6.2编译生成HEX文件输入示例代码,并且进行编译,然后生成HEX文件。 How to use UART in W7100A <图
20、6.2> 通过Keil编译器生成HEX文件6.3下载HEX文件到iMCU7100EVB利用WizISP程序或者W7100A Debugger程序将HEX文件下载到iMCU7100EVB开发板。如下图所示为利用WizISP程序进行下载的界面。由于WizISP程序支持二进制文件下载,所以WizISP程序可以将HEX文件转换成BIN文件。 <图6.3>下载HEX文件到iMCU7100EVB6.4串行终端程序利用串行终端程序来确认UART的示例代码是否能够正常运行。超终端是MS Windows提供的最基本的应用程序。用户根据自己需要的处理环境来相应的设定串行端口、波特率和其 How to u
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 近视常见症状及护理培训
- 线上消防活动课件大纲
- 生物多样性介绍
- 口服激素健康宣教
- 2025版肥胖症症状辨析与护理技巧指导
- 精神科焦虑症药物治疗规范
- 传染病常见症状及护理技巧
- 财务软件应用实训总结
- 重症医学科创伤性休克急救要点
- 模切加工工艺介绍
- 医保工作各小组和医保相关制度
- 2023年江苏泰州现代农业发展集团有限公司招聘笔试题库含答案解析
- 第五章 亲核取代反应
- 医院医疗设备购置申请表(采购单)
- 从业人员健康管理制度完整版
- 2022年中交营口液化天然气有限公司招聘笔试题库及答案解析
- 《消防安全技术实务》课本完整版
- B2B业务的破 局之道??数字化重塑营销服体系
- 县级结核病定点医院设置规范 T∕CHATA 007-2020
- 北师大版确定位置教案.
- LTD-2100探地雷达使用手册模板
评论
0/150
提交评论