下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、AD转换实验一、转换原理MSP430F149勺A/D转换器原理请参考相关书籍。 实验板上与AD相关的硬件电路:RV310K33J6P61S:ICAl)输入电路RV4III-10Kf>|1 1|3EF1P50编程工作实际就是对以下寄存器的操作:寄存器类型寄存器缩写寄存器的含义转换控制奇存器ADC12CTL0转换控制寄存器0ADC12CTL1转换控制寄存器1中断 控制 寄存器ADC12IFG中断标志奇存器ADC12IE中断使能寄存器ADC12IV中断向量寄存器存储及其 控制寄存器ADC12MCTL ADC12MCTL存储控制寄存器015ADC12MEM0 -ADC12MEM15存储寄存器01
2、5设计主程序和中断服务程序。二、转换程序1、程序1:转换结果发送到 PC主程序中进行 A/D初始化,中断服务程序读A/D转换结果,主程序过串口发送结果。“main.c ”主程序与中断程序:/*程序功能:将ADC对P6.0端口电压的转换结果按转换数据和对应的 模拟电压的形式通过串口发送到PC机屏幕上显示通信格式:9600测试说明:打开串口调试精灵,正确设置通信格式,观察接收数据*/#i nclude <msp430.h>#include "allfunc.h"#i nclude "UARTO_Fu nc.c"#in clude "AD
3、C_Fu nc.c"#defi ne Num_of_Results 32uint resultsNum_of_Results; /保存 ADC转换结果的数组uint average;uchar tent = 0;主函数 */*void mai n( void )uchar i;uchar buffer5;WDTCTL = WDTPW + WDTHOLD; / 关狗/*下面六行程序关闭所有的10 口 */P1DIR =0XFF;P1OUT =0XFF;P2DIR =0XFF;P2OUT =0XFF;P3DIR =0XFF;P3OUT =0XFF;P4DIR =0XFF;P4OUT =0
4、XFF;P5DIR =0XFF;P5OUT =0XFF;P6DIR =0XFF;P6OUT =0XFF;关闭电平转换关闭数码管显示P6DIR |= BIT2;P6OUT |= BIT2; /P6DIR|=BIT6;P6OUT&=BIT6;/Ini tUART();Ini t_ADC(); _EINT();buffer4 = '0'while(1)LPM1;Hex2Dec(average,buffer);for(i = 0; i < 4; i+) bufferi += 0x30;PutStri ngO("The digital value is:"
5、;);PutStri ng(buffer);Tran s_val(average,buffer); buffer3 = buffer2; buffer2 = buffer1;buffer1 = 0x2e - 0x30;for(i = 0; i < 4; i+) bufferi += 0x30;PutStri ng0("The an alog value is:");PutStri ng(buffer);/*函数名称:ADC12ISR功能: ADC中断服务函数,在这里用多次平均的计算P6.0 口的模拟电压数值参数:无返回值:无*/#pragma vector=ADC_V
6、ECTOR_in terrupt void ADC12ISR (void)/ Move resultsstatic uchar in dex = 0;results" ndex+ = ADC12MEM0; if(in dex = Num_of_Results) uchar i;average = 0;for(i = 0; i < Num_of_Results; i+) average += resultsi;average >>= 5;/除以32in dex = 0;ten t+;if(tc nt = 250)/主要是降低串口发送速度LPM1_EXIT;tent =
7、 0;“ADC_Func.c” A/D转换相关程序:#in elude <msp430.h> typedef un sig ned int uint;/*函数名称:Ini t_ADC功能:初始化ADC参数:无返回值:无*void In it_ADC(void)使能ADC通道打开ADC设置采样时间 使用采样定时器使能ADC中断使能转换开始转换P6SEL |= 0x01;/ADC12CTL0 = ADC12ON+SHT0_15+MSC; /ADC12CTL1 = SHP+CONSEQ_2;/ADC12IE = 0x01;/ADC12CTL0 |= ENC;/ADC12CTL0 |= A
8、DC12SC;/*函数名称:Hex2Dec功能:将16进制ADC转换数据变换成十进制表示形式参数:Hex_Val-16进制数据ptr-指向存放转换结果的指针返回值:无*/void Hex2Dec( uint Hex_val,uchar *ptr)ptr0 = Hex_val / 1000;ptr1 = (Hex_val - ptr0*1000)/100;ptr2 = (Hex_val - ptr0*1000 - ptr1*100)/10;ptr3 = (Hex_val - ptr0*1000 - ptr1*100 - ptr2*10);/*函数名称:Tran s_val功能:将16进制ADC转
9、换数据变换成三位10进制真实的模拟电压数据,并在液晶上显示参数:Hex_Val-16 进制数据返回值:无*/void Tran s_val(u int Hex_Val,uchar *ptr)un sig ned long caltmp;ui nt Curr_Volt;uchar t1;caltmp = Hex_Val;caltmp = (caltmp << 5) + Hex_Val; /caltmp = Hex_Val * 33caltmp = (caltmp << 3) + (caltmp << 1); /caltmp = caltmp * 10Curr_
10、Volt = caltmp >> 12;Curr_Volt = caltmp / 25变换ptr0 = Curr_Volt / 100;Hex->Dect1 = Curr_Volt - (ptr0 * 100);ptr1 = t1 / 10;ptr2 = t1 - (ptr1 * 10);“ UART0_Fu nc.c” 串口程序:#i nclude <msp430.h> typedef un sig ned char uchar;/*函数名称:In itUART功能:初始化UART端 口参数:无返回值:无* void In itUART(void)/ P3.4,
11、5 = USART0 TXD/RXD/ En able USART0 T/RXD/ 8-bit character/ UCLK = ACLK/ 32k/9600 - 3.41/P3SEL |= 0x30;ME1 |= URXE0 + UTXE0;UCTL0 |= CHAR;UTCTL0 |= SSEL0;UBR00 = 0x03;UBR10 = 0x00;UCTLO &= SWRST;/Initialize USART state machine/*函数名称:Sen d1Char功能:向PC机发送一个字符参数:sendchar-要发送的字符返回值:无* Jvoid Sen d1Char
12、(uchar sen dchar)while (!(IFG1 & UTXIFGO); /TXBUF0 = sen dchar;等待发送寄存器为空/*函数名称:PutSt ing功能:向PC机发送字符串并换行指令参数:ptr-指向发送字符串的指针返回值:无*/void PutStri ng(uchar *ptr)while(*ptr != '0')Sen d1Char(*ptr+);/while (!(IFG1 & UTXIFGO);TXBUF0 = 'n'/*函数名称:PutSti ngO功能:向PC机发送字符串,无换行参数:ptr-指向发送字符
13、串的指针返回值:无*/void PutStri ng0(uchar *ptr)while(*ptr != '0')Sen d1Char(*ptr+);/发送数据发送换行指令发送数据2、程序2:转换结果显示在 1602显示模块上/*#defi ne DataDir#defi ne DataPort#defi ne Busy#defi ne CtrlDir#defi ne CLR_RS P6OUT&=BIT3;#defi ne SET_RS P6OUT|=BIT3;#defi ne CLR_RW P6OUT&=BIT4;#defi ne SET_RW P6OUT|=
14、BIT4;#defi ne CLR_EN P6OUT&=BIT5; #defi ne SET_EN P6OUT|=BIT5;/*/RS = P6.3RW = P6.4EN = P6.5“ ma in .c ”程序#in clude <msp430x14x.h>#in clude "cry1602.h" typedef un sig ned char uchar; typedef un sig ned int uint;定义 */P2DIRP2OUT0x80P6DIR函数名称:DispNchar功能:让液晶从某个位置起连续显示参数:x-位置的列坐标y-位置
15、的仃坐标n-字符个数ptr-指向字符存放位置的指N个字符返回值:无*/void DispNChar(uchar x,uchar y, uchar n, uchar *ptr) uchar i;for (i=0;i <n ;i+)Disp1Char(x+,y,ptri);if (x = 0x0f)x = 0;y A= 1;LocateXY向液晶输入显示字符位置的坐标信息X-位置的列坐标/* 函数名称: 功 能:参 数:y-位置的行坐标返回值:无*void LocateXY(uchar x,uchar y)uchar temp;temp = x&OxOf;y &= 0x01;
16、if(y) temp |= 0x40; /如果在第 2 行temp |= 0x80;LcdWriteComma nd(temp,1);/*函数名称:Disp1Char功 能:在某个位置显示一个字符参 数:X-位置的列坐标 y- 位置的行坐标 data-显示的字符数据返回值:无*/void Disp1Char(uchar x,uchar y,uchar data) LocateXY( x, y ); LcdWriteData( data );/*函数名称:LcdReset功能:对1602液晶模块进行复位操作参数:无返回值:无*/void LcdReset(void)控制线端口设为输出状态 数据端
17、口设为输出状态规定的复位操作CtrlDir |= 0x07;/DataDir = 0xFF;/LcdWriteComma nd(0x38, 0);/Delay5ms();LcdWriteComma nd(0x38, 0);Delay5ms();LcdWriteComma nd(0x38, 0);Delay5ms();LcdWriteComma nd(0x38, 1);LcdWriteComma nd(0x08, 1);LcdWriteComma nd(0x01, 1);LcdWriteComma nd(0x06, 1);LcdWriteComma nd(0x0c, 1);/* 函数名称:Lcd
18、WriteComma nd 功能:向液晶模块写入命令参数:cmd-命令,chk-是否判忙的标志,返回值:无/显示模式设置/显示关闭/ 显示清屏/写字符时整体不移动/显示开,不开游标,不闪烁1:判忙,0:不判*/void LcdWriteComma nd(uchar cmd,uchar chk)if (chk) WaitForE nable(); /检测忙信号?CLR_RS;CLR_RW;_NOP();_NOP();SET_EN;_NOP();_NOP(); CLR_EN;/DataPort = cmd;/将命令字写入数据端口产生使能脉冲信号/*函数名称:LcdWriteData功能:向液晶显示
19、的当前地址写入显示数据参数:data-显示字符数据返回值:无*/void LcdWriteData( uchar data )WaitForE nable();/等待液晶不忙SET_RS;CLR_RW;_NOP();DataPort = data; /将显示数据写入数据端口_NOP();SET_EN;/产生使能脉冲信号_NOP();_NOP();CLR_EN;/*函数名称:WaitForE nable功能:等待1602液晶完成部操作参 数:无 返回值:无*/void WaitForE nable(void)P2DIR &= 0x00; / 将P4 口切换为输入状态CLR_RS;SET_
20、RW;_NOP();SET_EN;_NOP();_NOP();检测忙标志while(P2IN & Busy)!=0); /CLR_EN;P2DIR |= 0xFF; /将P4 口切换为输出状态 /*函数名称:Delay5ms功能:延时约5ms参数:无返回值:无*void Delay5ms(void)uint i=40000;while (i != 0)I-;/*函数名称:Delay400ms功能:延时约400ms参数:无返回值:无*void Delay400ms(void)uchar i=50;uint j;while(i-)j=7269; while(j-);“ cry1602 .c
21、 ”程序#in clude <msp430x14x.h>#in clude "cry1602.h" typedef un sig ned char uchar; typedef un sig ned int uint;/*定义 */#defi ne DataDirP2DIR#defi ne DataPortP2OUT#defi ne Busy#defi ne CtrlDir0x80P6DIR#defi ne CLR_RS P6OUT&=BIT3;#defi ne SET_RS P6OUT|=BIT3;#defi ne CLR_RW P6OUT&=
22、BIT4;#defi ne SET_RW P6OUT|=BIT4;#defi ne CLR_EN P6OUT&=BIT5; #defi ne SET_EN P6OUT|=BIT5;/*/RS = P6.3RW = P6.4EN = P6.5函数名称:DispNchar功 能:让液晶从某个位置起连续显示N个字符参 数:X-位置的列坐标y- 位置的行坐标n-字符个数ptr-指向字符存放位置的指针返回值:无*/void DispNChar(uchar x,uchar y, uchar n, uchar *ptr) uchar i;for (i=0;i <n ;i+)Disp1Char(
23、x+,y,ptri);if (x = 0x0f)x = 0;y A= 1;未*函数名称:LocateXY功能:向液晶输入显示字符位置的坐标信息参数:x-位置的列坐标y-位置的仃坐标返回值:无*/void LocateXY(uchar x,uchar y)uchar temp;temp = x&OxOf;y &= 0x01;if(y) temp |= 0x40; /如果在第 2 行temp |= 0x80;LcdWriteComma nd(temp,1);/* 函数名称:DispIChar功 能:在某个位置显示一个字符 参 数:X-位置的列坐标y- 位置的行坐标data-显示的字
24、符数据返回值:无void Disp1Char(uchar x,uchar y,uchar data) LocateXY( x, y ); LcdWriteData( data );/*函数名称:LcdReset功能:对1602液晶模块进行复位操作参数:无返回值:无*Ivoid LcdReset(void)CtrlDir |= 0x07;/DataDir = 0xFF;/LcdWriteComma nd(0x38, 0);Delay5ms();LcdWriteComma nd(0x38, 0); Delay5ms();LcdWriteComma nd(0x38, 0); Delay5ms();LcdWriteComma nd(0x38, 1);LcdWriteComma nd(0x08, 1);LcdWriteComma nd(0x01, 1);LcdWriteComma nd(0x06, 1);LcdWriteComma nd(0x0c, 1);/* 函数名称:LcdWriteComma nd 功能:向液晶模块写入命令参数:cmd-命令,chk-是否判忙的标志,返回值:无控制线端口设为输出状态 数据端口设为输出状态/ 规定的复位操作/显示模式设置/显示关闭/
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 微创三叉神经微血管减压术的术后早期活动指导
- 影像学评分系统对职业性哮喘的严重度评估
- 康复辅助技术适配的培养策略创新优化
- 康复机器人与传统康复疗法的联合疗效对比
- 序贯免疫联合治疗在AEGC中的策略优化
- 干细胞治疗长期评估方法
- 小儿丹毒课件
- 干细胞多能性鉴定的质控体系优化策略
- 帕金森病非运动症状改善
- 寝室消防用电安全培训内容课件
- 向世界讲述中国 知到智慧树网课答案
- 《跟上兔子》绘本三年级第1季One-Day教学课件
- 概率论与数理统计练习题-概率论与数理统计试题及答案
- 娱乐场所安全风险分级管控表
- 语文-江苏省南京市、盐城市2023-2024学年高三上学期期末调研测试试题和答案
- 启动子在农业生产中的应用
- 宁波工程学院2022年计算机C语言期末及答案
- 矿山项目的投资与融资策略
- 道路运输企业安全生产标准化考评
- 2024年内蒙古能源集团有限公司招聘笔试参考题库含答案解析
- 物业客服培训课件PPT模板
评论
0/150
提交评论