版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、微机原理与应用实验报告6实验9串行通信技术实验10A模拟信号转换接口实验报告实验九串行通信技术、实验目的1 .了解异步串行通信原理;2 .掌握MSP430异步串行通信模块及其编程方法;二、实验任务1) 了解MSP430G2553实验板USB转串口的通信功能,掌握串口助手的使用(1)利用PC机的串口助手程序控制串口,实现串口的自发自收功能为实现PC串口的自发自收功能,须现将实验板上的扩展板去下,并将单片机板上的BRXDF口BTXD用杜邦线进行短接,连接图如下所示:EZVCC10SBWTCK3SBWTDIO6BTXD4P1.129VCC7TEST/SBWTCK5RSI/SBWTDIO3P1.21B
2、RXD由此可以实现PC串口的自收自发功能。(2)思考题:异步串行通信接口的收/发双方是怎么建立起通信的首先在异步通信中,要求接收方和发送方具有相同的通信参数,即起始位、停止位、波特率等等。在满足上面条件的情况下,发送方对于每一帧数据按照起始位数据位停止位的顺序进行发送,而接收方则一直处于接受状态,当检测到起始位低电平时,看是采集接下来发送方发送过来的数据,这样一帧数据(即一个字符)传送完毕,然后进行下一帧数据的接受。这样两者之间就建立起了通信。2.查询方式控制单片机通过板载USB转串口与PC机实现串行通信(1)硬件连接图/通信设置/时钟设置/循环等待接受缓冲器满/读接受缓冲器并保存/检测发送完
3、毕信号/接受完毕信号/检测接受完毕信号2) )C语言程序采用SMCLK=1.0MHz时,程序如下:#include"io430.h"#include"in430.h"unsignedinti,j,done,count;charstring32;voidUSCIA0_int();voidCLOCK_int();intmain(void)/StopwatchdogtimertopreventtimeoutresetWDTCTL=WDTPW+WDTHOLD;USCIA0_int();CLOCK_int();while(1)done=0;count=0;for(
4、i=0;i<32;i+)while(IFG2&UCA0RXIFG)=0);stringi=UCA0RXBUF;if(stringi='')done=1;break;count=i;if(done=1)for(j=0;j<=count;j+)while(IFG2&UCA0TXIFG)=0);UCA0TXBUF=stringj;done=0;voidUSCIA0_int()UCA0CTL1|=UCSWRST;P1SEL|=BIT1+BIT2;P1SEL2|=BIT1+BIT2;UCA0CTL1|=UCSSEL_2+UCRXEIE;UCA0BR1=0;UC
5、A0BR0=104;UCA0MCTL=UCBRS_1;UCA0CTL1&=UCSWRST;端口设置时钟选择设置(SMCLK)/波特率设置voidCLOCK_int()if(CALBC1_1MHZ!=0xff)BCSCTL1=CALBC1_1MHZ;DCOCTL=CALDCO_1MHZ;设置时钟为1MHz采用smclklMHZ其中SMCLK=1MHz,波特率采用的是9600,采用低频波特方式,则N=1000000/9600=104.1666;故UCA0BR1=0UCA0BR0=104,UCBRS=1;当采用外部晶振时,时钟采用默认设置即可,程序如下:#include"io430
6、.h"#include"in430.h"unsignedinti,j,done,count;charstring32;voidUSCIA0_int();intmain(void)/StopwatchdogtimertopreventtimeoutresetWDTCTL=WDTPW+WDTHOLD;USCIA0_int();while(1)done=0;count=0;for(i=0;i<32;i+)while(IFG2&UCA0RXIFG)=0);stringi=UCA0RXBUF;if(stringi='')done=1;break
7、;/通信设置/循环等待接受缓冲器满/读接受缓冲器并保存/检测发送完毕信号/接受完毕信号/检测接受完毕信号端口设置时钟选择设置(SMCLK)/波特率设置)count=i;if(done=1)(for(j=0;j<=count;j+)(while(IFG2&UCA0TXIFG)=0);UCA0TXBUF=stringj;)done=0;)voidUSCIA0_int()(UCA0CTL1|=UCSWRST;P1SEL|=BIT1+BIT2;P1SEL2|=BIT1+BIT2;UCA0CTL1|=UCSSEL_1+UCRXEIE;UCA0BR1=0;UCA0BR0=3;UCA0MCTL
8、=UCBRS_3;UCA0CTL1&=UCSWRST;)也是采用了低频波特率方式,所以关于波特率设置的相关计算和上面是一样的。(3)思考:如果在两个单片机之间进行串行通信,应该如何设计连线和编程?由于在上面的连线中将单片机上的P1.2和BRXD相连,P1.1和BTXD相连,所以若要在两个单片机之间进行通信,首先应该将两个单片机的P1.2和P1.1交叉相连,并根据上面的程序进行相同的关于端口和波特率相关的设置即可实现两个单片机之间的通信。3 .(提高)利用PC机RS232通信接口与单片机之间完成串行通信(1)硬件连接图在实验时,采用了将PC机的串口com1直接连接至MSP430F149的
9、孔型D9连接器上,G2553单片机的输出引脚P1.1和P1.2分别与F149单片机上的URXD1和UTXD1相连接,连接图如下所示:Fl小板电平转换电路PC机D9计型连接器M5P430G2553(2)C语言程序当采用波特率9600bps、无校验、8位数据位、先低后高、一个停止位时,所采用的程序和任务2中相同,这里不再赘述。当采用波特率38400bps、无校验、8位数据位、先低后高、一个停止位时,由于采用外部晶振已经不能够产生这样高的波特率,所以采用SMCK=1MHz的时钟,所采用的程序只需将任务二中关于时钟选择和时钟设置的相关部分进行修改即可,具体程序见下面所示:#include"i
10、o430.h"#include"in430.h"unsignedinti,j,done,count;charstring32;voidUSCIA0_int();voidCLOCK_int();intmain(void)/StopwatchdogtimertopreventtimeoutresetWDTCTL=WDTPW+WDTHOLD;USCIA0_int();CLOCK_int();while(1)done=0;count=0;for(i=0;i<32;i+)/循环等待接受缓冲器满/读接受缓冲器并保存/检测发送完毕信号/接受完毕信号while(IFG2&a
11、mp;UCA0RXIFG)=0);stringi=UCA0RXBUF;if(stringi='')done=1;break;count=i;if(done=1)/检测接受完毕信号(for(j=0;j<count;j+)(while(IFG2&UCA0TXIFG)=0);UCA0TXBUF=stringj;done=0;voidUSCIA0_int()(UCA0CTL1|=UCSWRST;P1SEL|=BIT1+BIT2;P1SEL2|=BIT1+BIT2;/端口设置UCA0CTL1|=UCSSEL_2+UCRXEIE;/时钟选择设置UCA0BR1=0;UCA0BR
12、0=1;/波特率设置UCA0MCTL=UCBRF_10+UCBRS_0+UCOS16;UCA0CTL1&=UCSWRST;voidCLOCK_int()(if(CALBC1_1MHZ!=0xff)(BCSCTL1=CALBC1_1MHZ;/采用smclk1MHZDCOCTL=CALDCO_1MHZ;(3)思考题:设计单片机与PC机进行串行通信时,硬件设计有哪些需要注意的事项?首先最基本的是,单片机和PC机上所选择的通信协议应该是一致的,然后可以选择多种路径,其中包括USB,串口等。另外需要注意的是要统一两者之间的逻辑电平,如果电平不同,则需要在中间加入电平转换电路。4 .(提高)中断方
13、式控制串行通信的收发(1)硬件连接图由于只是将接收和发送改为了中断实现,其他功能并没有改变,所以这里的硬件连接图和任务2中的是相同的,这里不再重复。(2)C语言程序#include"io430.h"#include"in430.h"unsignedinti,j,done,count;charstring32;voidUSCIA0_int();intmain(void)/StopwatchdogtimertopreventtimeoutresetWDTCTL=WDTPW+WDTHOLD;USCIA0_int();i=0;j=0;done=0;IE2|=UC
14、A0RXIE;_EINT();while(1)if(done=1)IE2|=UCA0TXIE;elseIE2&=UCA0TXIE;voidUSCIA0_int()UCA0CTL1|=UCSWRST;P1SEL|=BIT1+BIT2;P1SEL2|=BIT1+BIT2;/端口设置UCA0CTL1|=UCSSEL_1+UCRXEIE;/时钟选择设置UCA0BR1=0;UCA0BR0=3;/波特率设置UCA0MCTL=UCBRS_3;UCA0CTL1&=UCSWRST;#pragmavector=USCIAB0RX_VECTOR/接收中断子程_interruptvoidUCA0RX_
15、ISR()stringi=UCA0RXBUF;if(stringi='')done=1;count=i;i=0;)i+;)#pragmavector=USCIAB0TX_VECTOR/发送中断子程_interruptvoidUCA0TX_ISR()if(j<count)UCA0TXBUF=stringj;j+;)elsedone=0;j=0;)(3发送中断的允许位不能够一直处于打开状态,因为当发送缓冲器为空时,发送中断标志位就会被置位,向系统发出中断请求,从而转去执行发送中断子程。而当无法送内容时和刚发送完内容后发送缓冲器都处于空的状态,若发送中断允许位一直打开,在没有接
16、受完毕进入发送时就会不断地向系统发出中断请求,从而导致系统不能正常。所以,发送中断允许为应该在接受完毕准备发送时打开,发送完毕后立即关闭。三、实验中遇到的问题和解决办法1 .在任务二中使用SMCLK完成通信时,最开始始终无法完成通信,后来发现是由于SMCLK的时钟频率并不是刚好的1MHz,所以后来通过利用示波器测量实际的频率,重新计算产生波特率的相关的参数解决了问题;2 .对于利用中断完成任务二的要求中,起初无法完成通信,后来发现是中断中由于在赋值完一次之后,先使i进行了加1,然后才判断对应的字符是否是'',所以单片机一直没有发送到PC机上内容。实验十模拟信号转换接口一、实验目
17、的1,了解模/数转换的工作原理,掌握MSP430单片机内ADC10*H/数转换模块的控制和应用。二、实验任务1.卞H/数转换器ADC10的编程控制(1)硬件连接图(2)程序设计思路首先需要利用示波器测量单片机板上的Vcc的大小,确定数/模转换公式中的参考电压的取值。在编程时,由于测量的是稳恒电压,所以ADC的一些设置采用默认值即可,通过几次采样得到的值进行平均减小误差,然后转换为模拟值,利用得到的结果跟2.2和2.8进行比较,然后通过比较结果控制L1灯的亮灭。(3)C语言程序#include"io430.h"#include"in430.h"unsign
18、edbuffer32;unsignedinti,sum;floatvin;intmain(void)/StopwatchdogtimertopreventtimeoutresetWDTCTL=WDTPW+WDTHOLD;P1SEL&=BIT1;P1SEL2&=BIT1;P1DIR|=BIT1;P1OUT|=BIT1;ADC10AE0|=BIT0;ADC10CTL0&=ENC;ADC10CTL1|=INCH_0;ADC10CTL0|=ADC10ON+ENC;while(1)/P1.1设置为GPIO用来控制L1/允许A0管脚模拟输入/禁止ADC10转换采样通道为A0给内核供
19、电允许转换主循环sum=0;for(i=0;i<4;i+)/软件启用采样ADC10CTL0|=ADC10SC;while(ADC10CTL0&ADC10IFG)=0);bufferi=ADC10MEM;sum=sum+bufferi;/通过公式计算出测量的电压值vin=(sum/4)*3.5/1023);if(vin>2.80)P1OUT&=BIT1;if(vin<2.20)P1OUT|=BIT1;(4)思考题:如果模拟信号从P1.5输入,应该如何编程?若模拟信号从P1.5输入只需将允许管脚模拟输入和采样通道的选择进行修改即可,其他的不用改变。并在硬件上使模拟
20、信号从P1.5输入即可。需要修改的指令如下所示:ADC10AE0|=BIT0;/允许A0管脚模拟输入ADC10CTL1|=INCH_0;/采样通道为A02.(提高)改用中断的方式实现任务1(1)硬件连接图硬件连接图任务一中相同,所以在这里不再给出。(2)C语言程序#include"io430.h"#include"in430.h"unsignedbuffer32;unsignedinti=0,sum;floatvin;intmain(void)/StopwatchdogtimertopreventtimeoutresetWDTCTL=WDTPW+WDTH
21、OLD;P1SEL&=BIT1;P1SEL2&=BIT1;P1DIR|=BIT1;P1OUT|=BIT1;ADC10AE0|=BIT0;ADC10CTL0&=ENC;ADC10CTL1|=INCH_0;ADC10CTL0|=ADC10ON+ENC;ADC10CTL0|=ADC10IE;_EINT();ADC10CTL0|=ADC10SC;sum=0;while(1)/允许A0管脚模拟输入/禁止ADC10转换采样通道为A0给内核供电允许转换/打开总控位/软件启动转换if(vin>2.80)P1OUT&=BIT1;if(vin<2.20)P1OUT|=B
22、IT1;ADC10CTL0|=ADC10SC;/软件启动转换#pragmavector=ADC10_VECTOR/中断子程_interruptvoidADC10_ISR()bufferi=ADC10MEM;sum=sum+bufferi;i+;if(i=4)vin=(sum/4)*3.5/1023);sum=0;i=0;3.(提高)制作数字电压表(1)硬件连接图(2)程序设计思路其中最基本的任务和上面两个任务中完成方式相同,在这里需要改进的就是将测得的电压值进行数码管显示,只需要利用之前实验中设计的数码管显示模块就可以了。(3)C语言程序#include"io430.h"#
23、include"in430.h"unsignedbuffer32;unsignedinti=0,sum;unsignedcharNUMtab10=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90;intvin;floatvinl;voidseg(intnumber);intmain(void)(/StopwatchdogtimertopreventtimeoutresetWDTCTL=WDTPW+WDTHOLD;P1SEL&=(BIT0+BIT1+BIT2+BIT3);P1SEL2&=(BIT0+BIT1+B
24、IT2+BIT3);P1DIR|=(BIT0+BIT1+BIT2+BIT3);P2SEL=0;P2SEL2=0;P2DIR=0xff;ADC10AE0|=BIT5;允许A0管脚模拟输入(改为BIT5)ADC10CTL0&=ENC;/禁止ADC10转换ADC10CTL1|=INCH_5;采样通道为A0(改为INCH_5)ADC10CTL0|=ADC10ON+ENC;/给内核供电允许转换ADC10CTL0|=ADC10IE;_EINT();ADC10CTL0|=ADC10SC;sum=0;while(1)(seg(vin);ADC10CTL0|=ADC10SC;#pragmavector=ADC10_VECTOR_interruptvoidADC10_ISR()(bufferi=ADC10MEM;sum=sum+bufferi;i+;if(i=4)(vin1=100*(sum/4)*3.4962/1023);vin=(int)vin1;sum=0;i=0;voidseg(intnumber
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年物业管理服务采购合同
- 17 爬天都峰 说课稿-2024-2025学年语文四年级上册统编版
- 专业绘画合作合同2024版版B版
- 19 怀疑与学问2024-2025学年九年级语文上册同步说课稿(河北专版)
- 【呼吸内科】为了患者健康的呼吸
- 福建省南平市武夷山上梅中学2021-2022学年高二化学上学期期末试题含解析
- 2025年度国际工程项目承包合同5篇
- 2024年鱼池生态旅游租赁合同3篇
- 七夕运动情缘盛宴
- 外墙瓷砖采购合同(2篇)
- 2024年海南公务员考试申论试题(A卷)
- 人教版三年级上册万以内的数加减法竖式计算300道及答案
- 2024年1月辽宁省普通高中学业水平合格性考试物理试题(含答案解析)
- 网络安全中的量子密码学与未来安全技术考核试卷
- 海堤工程施工组织设计
- 走进创业学习通超星期末考试答案章节答案2024年
- 2024年石油石化技能考试-钻井液工考试近5年真题附答案
- 世界经典神话与传说故事阅读测试(四)
- 2024年第五届插花花艺行业技能竞赛理论考试题库(含答案)
- 军事理论(2024年版)学习通超星期末考试答案章节答案2024年
- 二年级下册混合计算题100道及答案
评论
0/150
提交评论