西南科技大学计算机工业控制实验

  • 格式:doc
  • 大小:1.23 MB
  • 文档页数:23

西南科技大学 学 生 实 验 报 告 实验课程名称 计算机工业控制技术 开课实验室 CAD/CAM计算机实验室 学 院 制造学院 专业 工业工程 班级 班 学 生 姓 名 学 号 开 课 时 间 2014 至 2015 学年第 一 学期

总 成 绩 教师签名

制造科学与工程学院制 1

《 AD和DA接口实验 》实验报告 开课实验室:CAD/CAM计算机实验室 2014 年 10 月 日 学院 制造学院 年级、专业、班 姓名 成绩 课程 名称 计算机工业控制 实验项目 名 称 AD和DA接口实验 指导教师 李鹏

一、实验目的 通过ADC0804模/数转换接口的剖析及示教,掌握ADC0809模/数转换接口的一些基本概念, 了解ADC0804模/数转换接口的组成、分类、工作原理、坐标系统等。

二、实验内容 1. ADC0804模/数转换接口部件示教。 2. ADC0804模/数转换接口进给运动部件示教。 3. ADC0804模/数转换接口基本操作示教。 4. ADC0804模/数转换接口的坐标系统示教。

三、实验仪器设备 1. 单片机实验板 一块 2. 计算机 一台 2

四、实验步骤 1、打开Keil uVision3或者Keil uVision4 2、新建工程

在弹出的对话框中新建工程的文件夹,譬如“ad”

打开工程的文件夹,创建一个工程名,如“ad”

点击保存确定,确定后会弹出一个对话框: 3

这一步是选择单片机的型号,实验中选择“Atmel”下的“AT89C52”,

点击确定,会弹出如下对话框: 4

步是给工程添加启动单片机的启动代码,选择“是”。 工程属性,点击如下图所示的快捷按钮:

如下的对话框:

将晶振的频率修改为实验板上的频率11.0592MHz,然后选择“OUTPUT”选项卡,勾选“Create HEX Files”,如下图所示:

新建程序文件,File-New,然后将新建的文件保存为*.c文件,然后将该文件加入到工程中,具体操作如下: 5

在Source Groups上点击右键,并选择“Add Files to Group ‘Source Group 1’”,在弹出的对话框中选择上面保存的*.c文件。 然后在*.c文件中编写程序。 程序编辑完成后,编译程序,如下图所示:

编译后如有错误,根据错误指示修改程序;如无错误,则会生成HEX文件。

四、程序下载 程序完成后,将程序下载到单片机后才能运行; 1、打开STC-ISP下载程序“STC-ISP.exe” 6

安装2.安装驱动 用USB连接实验板和PC机,实验板上有2个USB接口,实验中使用USB2接口和PC机相连。 如果PC上没有安装驱动,则会提示安装驱动,驱动在实验资料文件下的“2、步骤2 安装USB驱动程序”目录下,安装XP驱动。驱动安装后,在设备管理器下查看串口的端口号:

如上图中,串口编号为“COM4”,。 3、下载程序 7

首先选择单片机型号,型号是STC89C52,然后选择程序文件,即之前生成的HEX文件”,选择相应的端口号,最后点击下载。 点击下载后,需要将实验板重新上电才能下载程序。程序下载完毕后,会显示下载成功,已经加密等。

按下实验板上的复位按钮,即可观察程序是否已经在运行。 8

五、实验程序流程图 AD基本流程图: DA转换流程:

启动AD 等待AD转换完成

数据处理

转换结果显示 结束

初始化定 开始 开始 初始化定 启动DA转换

延时 9

六、实验程序(源程序) #include /*将52单片机的特殊功能寄存器包含文件到程序中来*/ #include /*包含移位函数的头文件*/ #define uchar unsigned char /*宏定义无符号字符型变量*/ #define uint unsigned int /*宏定义无符号整型变量*/ sbit SEG_S = P2^6; /*定义位寻址*/ sbit BIT = P2^7; sbit CS_AD = P0^7; sbit WR_AD = P3^6; sbit RD_AD = P3^7; /***************全局变量定义*************************/ uchar temp0=0; uchar adc_data=0; uint vol_data=0; uchar vol_h=0; uchar vol_m=0; uchar vol_l=0; uchar display_ct=0; uchar tab[11]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00}; /******************************************** *函数名称:延时函数 *参 数:延时ms ************************************************/ void delay(unsigned int a) { unsigned m,n; for(m=a;m>0;m--) for(n=125;n>0;n--); } /*************************************** *函数功能:数码管显示 *参 数:无 ******************************************/ void data_display(void) { P0= 0xFE; BIT = 1; _nop_(); BIT = 0; P0 = tab[vol_h]+0x80; SEG_S = 1; _nop_(); SEG_S = 0; delay(5); 10

P0=0xFD; BIT = 1; BIT = 0;

SEG_S = 1; P0 = tab[vol_m]; SEG_S = 0; delay(5);

P0=0xFB; BIT = 1; BIT = 0;

SEG_S = 1; P0 = tab[vol_l]; SEG_S = 0; delay(5); } /************************************** *函数名称:AD转换开始 *参 数:无 ******************************************************/ void adc_start(void) { BIT = 1; //锁存器打开,AD0804的CS信号是经过锁存器输出的,所以先打开锁存器 CS_AD = 0; //P0.7=0,输出CS信号给AD0804,选择ADC0804 WR_AD = 1; WR_AD = 0; WR_AD = 1; //以上三行代码产生一个正确的起始位时序,开始AD转换 } /**************************************** *函数名称:AD读数据 *参 数:无 ********************************************/ void adc_read(void) { delay(20); //延时等待转换完成 RD_AD = 0; //开始读取 RD_AD = 1; //读取完成 adc_data = P1; //读取转换的数据 CS_AD = 1; //片选信号无效 BIT = 0; //关锁存器 } //**************************************** void data_process(void) 11

{ vol_data=0; //P2 =0x00; vol_l=0; vol_m=0; vol_h=0;

temp0=adc_data&0x0f; for(;temp0!=0;temp0--) { vol_data=vol_data+2; } temp0=(adc_data&0xf0)>>4; for(;temp0!=0;temp0--) { vol_data=vol_data+32; } vol_h=vol_data/100; vol_m=(vol_data%100)/10; vol_l=(vol_data%100)%10; } int main() { SEG_S = 0; BIT = 0; CS_AD = 1; WR_AD = 1; RD_AD = 1; while(1) { adc_start(); adc_read(); data_process(); data_display(); // delay(5); /* cs_da = 0; P1=adc_data; wr_da= 0; wr_da = 1; cs_da = 1; delay(10); */ } return 1; }