智能仪表试验.doc_第1页
智能仪表试验.doc_第2页
智能仪表试验.doc_第3页
智能仪表试验.doc_第4页
智能仪表试验.doc_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

#include exp3_2407.hvoid sys_ini() /系统初始化子程序 /*关总中断*/ asm( setc INTM); /*抑制符号位扩展*/ asm( clrc SXM); /*累加器中结果正常溢出*/ asm( clrc OVM); /*禁止看门狗*/ * WDCR=0x00E8; /*CLKIN=10M,CLKOUT=40M*/ * SCSR1=0x0000; void delay() unsigned int k; for(k=0;k60000;k+);/*中断服务子程序声明与定义*/interrupt void nothing() /哑中断子程序 return; /*主程序*/void main(void) sys_ini(); for(;) delay(); /*xf管脚置低*/ asm( clrc xf); delay(); /*xf管脚置高*/ asm( setc xf); /*结束*/实验一2#include exp3_2407.h/*函数、子程序声明与定义*/void sys_ini() /系统初始化子程序 /*关总中断*/ asm( setc INTM); /*抑制符号位扩展*/ asm( clrc SXM); /*累加器中结果正常溢出*/ asm( clrc OVM); /*禁止看门狗*/ * WDCR=0x00E8; /*CLKIN=10M,CLKOUT=40M*/ * SCSR1=0x0000; /*中断服务子程序声明与定义*/interrupt void nothing() /哑中断子程序 return; /*主程序*/void main(void) int i; volatile unsigned int *room= (volatile unsigned int *)0x0060; volatile unsigned int *room2= (volatile unsigned int *)0x006F; sys_ini(); /*将0xAAAA写入从数据空间的地址0x0060开始的8个单元中*/ for(i=0;i8;i+) *room=0xAAAA; room+; /*从0x0060开始的8个空间读出数据依次写入从0x0068开始的8个单元中*/ for(i=0;i6); /读出ad结果 point1i=(* RESULT16); i+; if(i=256) i=0; * ADCTRL2|=0x0200; /清除ad中断标志 return;/*主程序*/void main(void) sys_ini(); adc_ini(); * ADCTRL2|=0x2000; /软件启动ad转换 for(;) /*结束*/程序7#include exp3_2407.h/*全局变量定义与初始化*/ioport unsigned port8008; /定义AD7822的地址unsigned int data256;unsigned int j=0;/*函数、子程序声明与定义*/void sys_ini() /系统初始化子程序 /*关总中断*/ asm( setc INTM); /*抑制符号位扩展*/ asm( clrc SXM); /*累加器中结果正常溢出*/ asm( clrc OVM); /*禁止看门狗*/ * WDCR=0x00E8; /*配置时钟锁相为4倍频CLKOUT=4*10M=40M*/ * SCSR1=0x0041; /*io、ram、program都设为1等待读写*/ WSGR=0x0649; /*清除所有中断标志,写1清0*/ * IFR=0xFFFF; /*中断服务子程序声明与定义*/interrupt void nothing() /哑中断子程序 return; /*主程序*/void main(void) sys_ini(); for(;) /*启动ad7822*/ asm( clrc xf); asm( setc xf); /*等待转化完成*/ asm( nop); dataj=port8008&0x00FF; /读取数据 j+; if(j=255) j=0; /*结束*/程序8/*文件预处理*/#include exp3_2407.h#include math.h#define pi 3.1415926/*全局变量定义与初始化*/unsigned int data=0;unsigned int curve128; unsigned int curve1128; unsigned int curve2128;/*函数、子程序声明与定义*/void sys_ini() /系统初始化子程序 /*关总中断*/ asm( setc INTM); /*抑制符号位扩展*/ asm( clrc SXM); /*累加器中结果正常溢出*/ asm( clrc OVM); /*禁止看门狗*/ * WDCR=0x00E8; /*CLKIN=10M,CLKOUT=40M,使能spi外围模块*/ * SCSR1=0x0021; /*使能spi引脚*/ * MCRB=0xFE3F; /*io、ram、program都设为0等待读写*/ WSGR=0x0649; /*清除所有中断标志,写1清0*/ * IFR=0xFFFF; void spi_ini() /spi初始化子程序 /*复位spi*/ * SPICCR&=0x007F; /*CLOCK POLARITY=0,16位数据格式*/ * SPICCR=0x000F; /*禁止溢出中断,CLOCK PHASE=1,禁用spi中断,主模式,使能数据发送*/ * SPICTL=0x000E; /*清除接收溢出中断标志*/ * SPISTS=0x0080; /*波特率为40/4=10M*/ * SPIBRR=0x0000; /*启动spi工作*/ * SPICCR|=0x0080; void delay() /延时子程序 unsigned int k; for(k=0;k5;k+);/*中断服务子程序声明与定义*/interrupt void nothing() /哑中断子程序 return; /*主程序*/void main() int i,p,data; sys_ini(); spi_ini(); for(i=0; i128;i+) /*产生128个点的正弦信号波形*/ data=(int)(127.5*(1+sin(2*pi*i/127); curvei=data; /*将数据打包成“从移位寄存器到DAC A数据寄存器*/ curve1i=data&0x00ff|0x0100; /*将数据打包成“从移位寄存器到DAC B数据寄存器 且用数据寄存器同时更新A和B两个DA的值*/ curve2i=data&0x00ff|0x2500; for(;) for(p=0;p128;p+) /*将数据写入AD7303*/ * SPITXBUF=curve1p; delay(); /*将数据写入AD7303*/ * SPITXBUF=curve2p; delay(); /*结束*/程序9#include exp3_2407.h/*全局变量定义与初始化*/unsigned int p;char send_buff=0x00;char rece_buff=0x00;unsigned int data_buff=0x0000;/*函数、子程序声明与定义*/void sys_ini() /系统初始化子程序 /*关总中断*/ asm( setc INTM); /*抑制符号位扩展*/ asm( clrc SXM); /*累加器中结果正常溢出*/ asm( clrc OVM); /*禁止看门狗*/ * WDCR=0x00E8; /*CLKIN=10M,CLKOUT=40M,使能evb外围模块*/ * SCSR1=0x0008; /*将iope1,2,3配置为输出脚 ,且iope3初始值为0,iope1,iope2初始值为1*/ * PEDATDIR=0x0E06; /*将iopf6配置为输出脚,且iopf6初始值为1*/ * PFDATDIR=0x4040; /*清除所有中断标志,写1清0*/ * IFR=0xFFFF; void pdpintb_ini() /int1中断初始化子程序 /*清除所有中断标志*/ * IFR=0xFFFF; /*使能中断1*/ * IMR=0x0001; /*清除pdpintb中断标志*/ * EVBIFRA=0xFFFF; /*使能pdpintb中断*/ * EVBIMRA=0x0001; /*开总中断*/ asm( clrc INTM); void delay_8us() /延时8us子程序 unsigned int i; for(i=0;i2;i+); void delay_50us() /延时50us子程序 unsigned int j; for(j=0;j25;j+);void delay_25ms() /延时25ms子程序 unsigned int k; for(k=0;k12500;k+);void delay_long() unsigned int n; for(n=0;n60000;n+); for(n=0;n60000;n+);void cs_high() * PFDATDIR|=0x0040; /7279cs高 void cs_low() * PFDATDIR&=0xFFBF; /7279cs低void send() unsigned int m; cs_low(); delay_50us(); /延时50us; for(m=0;m8;m+) switch(send_buff&0x80) case 0x00:* PEDATDIR&=0xFFFB;break; /7279data低 case 0x80:* PEDATDIR|=0x0004; /7279data高 * PEDATDIR|=0x0008; /7279clk高 delay_8us(); * PEDATDIR&=0xFFF7; /7279clk低 delay_8us(); send_buff=1; void receive() unsigned int s; /*将iope2配置为输入脚,7279发数据*/ * PEDATDIR&=0xFBFD; delay_50us(); for(s=0;s8;s+) * PEDATDIR|=0x0008; /7279clk高 delay_8us(); data_buff=data_buff|(* PEDATDIR&0x0004)8; data_buff=0x0000; /清除data_buff * PEDATDIR|=0x0402; /将iope2配置为输出脚,7279收数据/*中断服务子程序声明与定义*/interrupt void nothing() /哑中断子程序 return; interrupt void pdpintb() send_buff=0x15; /读键值指令 send(); receive(); send_buff=0xA1; /数据左移指令 send(); send_buff=0xC8; send(); send_buff=rece_buff;/将接收到的键值送显示 send(); * EVBIFRA=0xFFFF; /清除PDPINTB中断标志 return;/*主程序*/void main() sys_ini(); pdpintb_ini(); delay_25ms(); send_buff=0xBF; /测灯指令 send(); delay_long(); delay_long(); send_buff=0xA4; /清除指令 send(); for(p=0;p16;p+) /送出数据0x000x0F send_buff=0xC8; send(); send_buff=p; send(); delay_long(); send_buff=0xA1; /数据左移指令 send(); send_buff=0xA4; /清除指令 send(); /cs_high(); for(;) /*结束*/程序10/*文件预处理*/#include exp3_2407.h#define N 256#define pi 3.1415926/*全局变量定义与初始化*/int i;unsigned int data;unsigned int y1N+1;unsigned int y2N+1;double x0,x1,x2,x3;double x,r,xx,yN+1;/*函数、子程序声明与定义*/void sys_ini() /系统初始化子程序 /*关总中断*/ asm( setc INTM); /*抑制符号位扩展*/ asm( clrc SXM); /*累加器中结果正常溢出*/ asm( clrc OVM); /*禁止看门狗*/ * WDCR=0x00E8; /*CLKIN=10M,CLKOUT=40M,使能spi外围模块*/ * SCSR1=0x0021; /*使能spi引脚*/ * MCRB=0xFE3F; /*io、ram、program都设为0等待读写*/ WSGR=0x0649; /*清除所有中断标志,写1清0*/ * IFR=0xFFFF; void spi_ini() /spi初始化子程序 /*复位spi*/ * SPICCR&=0x007F; /*CLOCK POLARITY=0,16位数据格式*/ * SPICCR=0x000F; /*禁止溢出中断,CLOCK PHASE=1,禁用spi中断,主模式,使能数据发送*/ * SPICTL=0x000E; /*清除接收溢出中断标志*/ * SPISTS=0x0080; /*波特率为40/4=10M*/ * SPIBRR=0x0000; /*启动spi工作*/ * SPICCR|=0x0080; void delay() /延时子程序 unsigned int k; for(k=0;k5;k+);/*中断服务子程序声明与定义*/interrupt void nothing() /哑中断子程序 return; /*主程序*/void main() sys_ini(); spi_ini(); r=2*pi/N; for (i=0; i=N; i+) x=i*r-pi; xx = x*x; x0 = 1-xx/(8*9); x1 = 1-x0*xx/(6*7); x2 = 1-x1*xx/(4*5); x3 = 1-x2*xx/(2*3); yi = x * x3; data=127.5*(1+yi); /*将数据打包成“从移位寄存器到DAC A数据寄存器*/ y1i=data&0x00ff|0x0100; /*将数据打包成“从移位寄存器到DAC B数据寄存器 且用数据寄存器同时更新A和B两个DA的值*/ y2i=data&0x00ff|0x2500; for(;) for (i=0; i=N; i+) * SPITXBUF=y1i; delay(); * SPITXBUF=y2i; delay(); /*结束*/程序11#include exp3_2407.h/*函数、子程序声明与定义*/void sys_ini() /系统初始化子程序 /*关总中断*/ asm( setc INTM); /*抑制符号位扩展*/ asm( clrc SXM); /*累加器中结果正常溢出*/ asm( clrc OVM); /*禁止看门狗*/ * WDCR=0x00E8; /*CLKIN=10M,CLKOUT=40M,使能EVA模块*/ * SCSR1=0x0005; /*使能spi引脚*/ * MCRB=0xFE3F; /*io、ram、program都设为0等待读写*/ WSGR=0x0600; /*清除所有中断标志,写1清0*/ * IFR=0xFFFF; void pwm_ini() /pwm初始化子程序 /*使能pwm16引脚*/ * MCRA|=0x0FC0; /*pwm6,4,2高有效,pwm5,3,1低有效*/ * ACTRA=0x0666; /*禁用死区控制*/ * DBTCONA=0x0000; /*设定比较器周期寄存器CMPR13*/ * CMPR1=0x0100; /*确定不同的占空比*/ * CMPR2=0x0300; * CMPR3=0x0500; /*设置定时器1的周期寄存器,确定载波频率*/ * T1PER=0x0600; /*使能比较器操作*/ * COMCONA=0x8200; /*定时器1为连续增计数模式*/ * T1CON=0x1000; /*中断服务子程序声明与定义*/interrupt void nothing() /哑中断子程序 return; /*主程序*/void main() sys_ini(); pwm_ini(

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论