ImageVerifierCode 换一换
格式:DOCX , 页数:20 ,大小:170.10KB ,
资源ID:29676000      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/29676000.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(串行通信技术实验报告材料.docx)为本站会员(b****8)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

串行通信技术实验报告材料.docx

1、串行通信技术实验报告材料串行通信技术实验报告姓名 学号 实验班号 实验机位号 50一、 实验目的1. 了解异步串行通信原理2. 掌握MSP430异步串行通信模块及其编程方法二、 必做实验任务1.了解MSP430G2553实验板USB转串口的通信功能,掌握串口助手的使用拆下单片机的功能拓展板,将主板上的eZ430-FET板载仿真器的BRXD,BTXD收发信号端口连接,通过串口调试助手即可实现串口的自发自收功能。接线如下图:思考:异步串行通信接口的收/发双方是怎样建立起通信的?答:异步串行通信的收发双方进行通信,在硬件与软件方面都有要求。1在硬件方面需要两条线,分别从一方的发送端口到另一方的接收端

2、口,从而实现“异步”;2需要一个通信协议,确保通信正确;3在这个实验中由于是自发自收,因此收发两方均为PC机,所以两条线其实是同一条线,而且由于是自发自收所以信号格式也是统一的,因此可以实现自发自收功能。2.查询方式控制单片机通过板载USB转串口与PC机实现串行通信本实验通过编程实现单片机和PC机之间的通信,信号格式为波特率9600bps,无校验,8位数据,先低后高,1个停止位,字符串以结尾,单片机将接收到的字符保存在RAM中,收到字符之后再将所储存的字符发给PC机。连线方式如下图:实验程序如下:#include io430.hunsigned char string;int main( vo

3、id )/ Stop watchdog timer to prevent time out reset WDTCTL = WDTPW + WDTHOLD;void USCIA0_int()UCA0CTL1|=UCSWRST; /swrst=1;/置P1.1、P1.2为USCI_A0的收发引脚P1SEL|=BIT1+BIT2;P1SEL2|=BIT1+BIT2; /时钟SMCLK选择为1.0MHzif (CALBC1_1MHz!=0xff)BCSCTL1=CALBC1_1MHZ;DCOCTL=CALDCO_1MHZ;/设置控制寄存器UCA0CTL1|=UCSSEL_2+UCRXEIE;/设置波特

4、率寄存器,采用低频波特率方式UCA0BR1=0;UCA0BR0=104;UCA0MCTL=UCBRS_1;UCA0CTL1&=UCSWRST; /swrst=0While(1) unsigned int j; for (j=0;stringj!=;j+) while(IFG2&UCA0RXIFG)=0); stringj=UCA0RXBUF; unsigned i=j; for (j=0;j!=i+1;j+) while(IFG2&UCA0TXIFG)=0); UCA0TXBUF=stringj; 思考:如果在两个单片机之间进行串行通信,如何设计连线和编程? 答:a. 编程:其中一个单片机可以

5、继续采用本实验中所用的程序,另一个单片机则编程输出一串以结尾的字符,之后进入接收状态,初始化及寄存器的设置部分的程序不变;b. 连线:将一个单片机的P1.1、P1.2接口分别与另一个的P1.2、P1.1接口连接,控制两个单片机同时运行程序即可完成两个单片机之间的通信。3.利用PC机RS232通信接口与单片机完成串行通信编程采用下面数据格式,完成单片机与PC机之间的字符串传送。 1) 波特率9600bps,奇校验,8位数据,先低后高,1个停止位;本实验需要用到MSP430F149,进行PC机与单片机之间的电平信号转换。连线如下图:实验程序如下:#include io430.hunsigned c

6、har string;int main( void )/ Stop watchdog timer to prevent time out resetWDTCTL = WDTPW + WDTHOLD;void USCIA0_int()UCA0CTL1|=UCSWRST; /swrst=1;/置P1.1、P1.2为USCI_A0的收发引脚P1SEL|=BIT1+BIT2;P1SEL2|=BIT1+BIT2; /时钟SMCLK选择为1.0MHzif (CALBC1_1MHz!=0xff)BCSCTL1=CALBC1_1MHZ;DCOCTL=CALDCO_1MHZ;/设置时钟源采用SMCLK,1MHz

7、,波特率设置为9600,奇校验UCA0CTL0|=UCPEN;UCA0CTL1|=UCSSEL_2+UCRXEIE;/设置波特率寄存器,采用低频波特率方式UCA0BR1=0;UCA0BR0=104;UCA0MCTL=UCBRS_1;UCA0CTL1&=UCSWRST; /swrst=0While(1) unsigned int j; for (j=0;stringj!=;j+) while(IFG2&UCA0RXIFG)=0); stringj=UCA0RXBUF; unsigned i=j; for (j=0;j!=i+1;j+) while(IFG2&UCA0TXIFG)=0); UCA0

8、TXBUF=stringj; 思考:设计单片机与PC机进行串行通信时,硬件设计有哪些需要注意的事项?答:1正确的连线;2统一的通信协议;3统一的逻辑电平;4选取合适的信号输出方式,如USB、串口、并口等3、已完成的选做实验任务2. 查询方式控制单片机通过板载USB转串口与PC机实现串行通信 2) (选做) 串口时钟选用外部晶振32.768KHz 本实验与1)的实验的差别有两点:1波特率发生器的时钟源选择外部晶振,接线上应注意接入外部晶振2波特率的设置应随着时钟源的改变而改变,计算过程为:时钟频率和需要的波特率的比值是32768/9600=3.413,采用低频波特率方式,置UCOS16=0,所以

9、设UCA0BR1=0,UCA0BR0=3,0.41*83,所以设UCBRS=3。程序如下:#include io430.hunsigned char string;int main( void )/ Stop watchdog timer to prevent time out resetWDTCTL = WDTPW + WDTHOLD;void USCIA0_int()UCA0CTL1|=UCSWRST; /swrst=1;/置P1.1、P1.2为USCI_A0的收发引脚P1SEL|=BIT1+BIT2;P1SEL2|=BIT1+BIT2;/设置时钟源采用外部晶振,32768Hz,波特率设置

10、为9600,无校验UCA0CTL1|=UCSSEL_1+UCRXEIE;/设置波特率寄存器,采用低频波特率方式UCA0BR1=0;UCA0BR0=3;UCA0MCTL=UCBRS_3;UCA0CTL1&=UCSWRST; /swrst=0While(1) unsigned int j; for (j=0;stringj!=;j+) while(IFG2&UCA0RXIFG)=0); stringj=UCA0RXBUF; unsigned i=j; for (j=0;j!=i+1;j+) while(IFG2&UCA0TXIFG)=0); UCA0TXBUF=stringj; 3. 利用PC机R

11、S232通信接口与单片机完成串行通信2) (选做) 波特率115200bps,偶校验,8位数据,先低后高,2个停止位。 本实验与1)中实验的差别主要在时钟源以及寄存器设置上:1选用时钟SMCLK;2相应的波特率设置随之改变,计算过程:时钟频率和需要的波特率的比值是12000000/115200=104.17,采用过采样波特率方式,置UCOS16=1,因为104.17/16=6.51所以设UCA0BR1=0,UCA0BR0=6,0.51*168,所以设UCBRF=8。3USCI_A0串口寄存器中,设置偶校验,2个停止位程序如下:#include io430.hunsigned char stri

12、ng;int main( void )/ Stop watchdog timer to prevent time out resetWDTCTL = WDTPW + WDTHOLD;void USCIA0_int()UCA0CTL1|=UCSWRST; /swrst=1;/置P1.1、P1.2为USCI_A0的收发引脚P1SEL|=BIT1+BIT2;P1SEL2|=BIT1+BIT2; /时钟SMCLK选择为12.0MHzif (CALBC1_12MHz!=0xff)BCSCTL1=CALBC1_12MHZ;DCOCTL=CALDCO_12MHZ;/设置时钟源采用SMCLK,12MHz,波特

13、率设置为115200,偶校验,2个停止位UCA0CTL0|=UCPEN+UCPAR+UCSPB;UCA0CTL1|=UCSSEL_2+UCRXEIE;/设置波特率寄存器,采用过采样波特率方式UCA0BR1=0;UCA0BR0=6;UCA0MCTL=UCBRF_8+UCBRS_0+UCOS16;UCA0CTL1&=UCSWRST; /swrst=0While(1) unsigned int j; for (j=0;stringj!=;j+) while(IFG2&UCA0RXIFG)=0); stringj=UCA0RXBUF; unsigned i=j; for (j=0;j!=i+1;j+)

14、 while(IFG2&UCA0TXIFG)=0); UCA0TXBUF=stringj; 4. (选做)中断方式控制串行通信的收发 编程:采用中断方式接收和发送完成任务2的内容。 1) 串口时钟选用 SMCLK=1.0MHz 2) (选做) 串口时钟选用外部晶振32.768KHz 答:与实验2相比,本实验的不同在于:1采用中断方式;2寄存器相关设置不同;1)程序如下: #include io430.h #include in430.h void USCIA0_init( ); void Clock_int(); unsigned char string; unsigned int j,i;

15、int main( void ) WDTCTL = WDTPW + WDTHOLD; Clock_int(); /时钟初始化 USCIA0_init( ); /串口初始化 IE2 |=UCA0RXIE; /开串口接收中断允许 _EINT(); /开总中断 while(1); #pragma vector=USCIAB0RX_VECTOR _interrupt void UCA0RX_isr( ) stringj=UCA0RXBUF; /将接收到的数据存至存储器 j+; if (stringj=) IE2 &= UCA0RXIE; /关闭串口0接收中断允许 IE2|=UCA0TXIE; i=j;

16、 #pragma vector=USCIAB0TX_VECTOR _interrupt void UCA0TX_isr() UCA0TXBUF=stringj;/将接收到的数据存至存储器 j+; if (j=i)IE2&= UCA0TXIE; /关闭串口发送中断允许 void USCIA0_init( ) UCA0CTL1 |= UCSWRST; /swrst=1 /置P1.1P1.2为USCI_A0的收/发引脚 P1SEL |= BIT1+BIT2; P1SEL2 |= BIT1+BIT2; /时钟选择SMCLK, 不论数据对均收 UCA0CTL1|= UCSSEL_2+UCRXEIE ;

17、/设置波特率寄存器 UCA0BR1=0; UCA0BR0=104; UCA0MCTL=UCBRS_1; UCA0CTL1 &=UCSWRST ; /swrst=0 void Clock_int() BCSCTL1=CALBC1_1MHZ; DCOCTL=CALDCO_1MHZ;2)程序如下: #include io430.h #include in430.h void USCIA0_init( ); unsigned char string; unsigned int j,i; int main( void ) WDTCTL = WDTPW + WDTHOLD; USCIA0_init( );

18、 /串口初始化 IE2 |=UCA0RXIE; /开串口接收中断允许 _EINT(); /开总中断 while(1); #pragma vector=USCIAB0RX_VECTOR _interrupt void UCA0RX_isr( ) stringj=UCA0RXBUF; /将接收到的数据存至存储器 j+; if (stringj=) IE2 &= UCA0RXIE; /关闭串口0接收中断允许 IE2|=UCA0TXIE; i=j; #pragma vector=USCIAB0TX_VECTOR _interrupt void UCA0TX_isr() UCA0TXBUF=string

19、j;/将接收到的数据存至存储器 j+; if (j=i) IE2&= UCA0TXIE; /关闭串口发送中断允许 void USCIA0_init( ) UCA0CTL1|=UCSWRST; /swrst=1;/置P1.1、P1.2为USCI_A0的收发引脚P1SEL|=BIT1+BIT2;P1SEL2|=BIT1+BIT2;/设置时钟源采用外部晶振,32768Hz,波特率设置为9600,无校验UCA0CTL1|=UCSSEL_1+UCRXEIE;/设置波特率寄存器,采用低频波特率方式UCA0BR1=0;UCA0BR0=3;UCA0MCTL=UCBRS_3;UCA0CTL1&=UCSWRST;

20、 /swrst=0 2-1#include io430.hunsigned char string;int main( void )/ Stop watchdog timer to prevent time out resetWDTCTL = WDTPW + WDTHOLD;UCA0CTL1|=UCSWRST; /swrst=1;/置P1.1、P1.2为USCI_A0的收发引脚P1SEL|=BIT1+BIT2;P1SEL2|=BIT1+BIT2; /时钟SMCLK选择为1.0MHzBCSCTL1=CALBC1_1MHZ;DCOCTL=CALDCO_1MHZ;/设置控制寄存器UCA0CTL1|=

21、UCSSEL_2+UCRXEIE;/设置波特率寄存器,采用低频波特率方式UCA0BR1=0;UCA0BR0=104;UCA0MCTL=UCBRS_1;UCA0CTL1&=UCSWRST; /swrst=0while(1) unsigned int j; for (j=0;stringj!=;j+) while(IFG2&UCA0RXIFG)=0); stringj=UCA0RXBUF; unsigned i=j; for (j=0;j!=i+1;j+) while(IFG2&UCA0TXIFG)=0); UCA0TXBUF=stringj; 2-2#include io430.hunsigne

22、d char string;int main( void )/ Stop watchdog timer to prevent time out resetWDTCTL = WDTPW + WDTHOLD;/USCI_A0初始化UCA0CTL1|=UCSWRST; /swrst=1;/置P1.1、P1.2为USCI_A0的收发引脚P1SEL|=BIT1+BIT2;P1SEL2|=BIT1+BIT2;/设置时钟源采用外部晶振,32768Hz,波特率设置为9600,无校验UCA0CTL1|=UCSSEL_1+UCRXEIE;/设置波特率寄存器,采用低频波特率方式UCA0BR1=0;UCA0BR0=3

23、;UCA0MCTL=UCBRS_3;UCA0CTL1&=UCSWRST; /swrst=0/初始化结束while(1) unsigned int j; for (j=0;stringj!=;j+) while(IFG2&UCA0RXIFG)=0); stringj=UCA0RXBUF; unsigned i=j; for (j=0;j!=i+1;j+) while(IFG2&UCA0TXIFG)=0); UCA0TXBUF=stringj; ;3-1#include io430.hunsigned char string;int main( void )/ Stop watchdog time

24、r to prevent time out resetWDTCTL = WDTPW + WDTHOLD;UCA0CTL1|=UCSWRST; /swrst=1;/置P1.1、P1.2为USCI_A0的收发引脚P1SEL|=BIT1+BIT2;P1SEL2|=BIT1+BIT2; /时钟SMCLK选择为1.0MHzBCSCTL1=CALBC1_1MHZ;DCOCTL=CALDCO_1MHZ;/设置时钟源采用SMCLK,1MHz,波特率设置为9600,奇校验UCA0CTL0|=UCPEN;UCA0CTL1|=UCSSEL_2+UCRXEIE;/设置波特率寄存器,采用低频波特率方式UCA0BR1=0

25、;UCA0BR0=104;UCA0MCTL=UCBRS_1;UCA0CTL1&=UCSWRST; /swrst=0while(1) unsigned int j; for (j=0;stringj!=;j+) while(IFG2&UCA0RXIFG)=0); stringj=UCA0RXBUF; unsigned i=j; for (j=0;j!=i+1;j+) while(IFG2&UCA0TXIFG)=0); UCA0TXBUF=stringj; ;3-2#include io430.hunsigned char string;int main( void )/ Stop watchdo

26、g timer to prevent time out resetWDTCTL = WDTPW + WDTHOLD;UCA0CTL1|=UCSWRST; /swrst=1;/置P1.1、P1.2为USCI_A0的收发引脚P1SEL|=BIT1+BIT2;P1SEL2|=BIT1+BIT2; /时钟SMCLK选择为12.0MHzBCSCTL1=CALBC1_12MHZ;DCOCTL=CALDCO_12MHZ;/设置时钟源采用SMCLK,12MHz,波特率设置为115200,偶校验,2个停止位UCA0CTL0|=UCPEN+UCPAR+UCSPB;UCA0CTL1|=UCSSEL_2+UCRXEIE;/设置波特率寄存器,采用过采样波特率方式UCA0BR1=0;UCA0BR0=6;UCA0MCTL=UCBRF_8+UCBRS_0+UCOS16;UCA0CTL1&=UCSWRST; /swrst=0while(1) unsigned int j; for (j=0;stringj!=;j+) while(IFG2&UCA0RXIFG)=0); stringj=UCA0RXBUF; unsigned i=j; for (j=0;j!=i+1;j+) while(IFG2&UCA0TXIFG)=0); UCA0TXBUF=stringj; ;

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1