单片机实验--实验指导书

上传人:飞*** 文档编号:4258947 上传时间:2017-08-17 格式:DOC 页数:22 大小:826KB
返回 下载 相关 举报
单片机实验--实验指导书_第1页
第1页 / 共22页
单片机实验--实验指导书_第2页
第2页 / 共22页
单片机实验--实验指导书_第3页
第3页 / 共22页
单片机实验--实验指导书_第4页
第4页 / 共22页
单片机实验--实验指导书_第5页
第5页 / 共22页
点击查看更多>>
资源描述

《单片机实验--实验指导书》由会员分享,可在线阅读,更多相关《单片机实验--实验指导书(22页珍藏版)》请在金锄头文库上搜索。

1、1实验项目 AD-DA 转换实验【实验目的】1、 学习 I2C 串行总线的工作原理2、 学习 A/D 芯 片 PCF8591 的工作原理3、 学习 C51 编 写 程 序 控 制 AD-DA 转 换【实验内容】1、 学习 I2C 总线的工作方式、寻址方式和数据传输过程;2、 学习 A/D 芯 片 PCF8591 的引脚、电路图及其控制字节的使用;3、 实现给定的程序,学习 AD-DA 转 换 程 序 的 编 写 。4、 完成实习报告【实验原理】1. 连线: JP10 (P0 )与 JP12 用 8PIN 排线连接。2. I2C 串行总线的工作原理(参考教材第九章第一节) 。3. PCF8591

2、 工作原理:PCF8591 是具有 I2C 总线的接口的 8 位 A/D 及 D/A 转换器。有 4 路 A/D 转换输入,1 路 D/A 模拟输出。也即既可以做 A/D 转换,也可以做 D/A 转换。A/D 转换为逐次比较型。3.1 PCF8591 电路图图 5-1 PCF8591 电路图3.2 引脚说明2图 5-2 PCF8591 引脚图引脚说明:AIN0AIN3:模拟输入信号端A0A2:硬件地址端;Vss、 VDD:输入电压端(2.56V) ;SDA:I 2C 总线输入 /输出端;SCL:I 2C 总线时钟信号输入端;OSC:外部时钟输入/内部时钟输出端;EXT:内部/外部时钟选择输入端

3、;AGND:模拟信号接地端;AOUT:模拟量输出端;VREF:电压参考输入端。3.3 器件总地址PCF8591 采用典型的 I2C 总线接口器件寻址方式,即总线地址由器件地址、引脚地址和方向组成。飞利浦公司规定 A/D 器件的地址都是 1001。引脚地址为 A0、A 2、A 2,其值由用户选择。因此 I2C 总线最多可以连接 222=8 个具有 I2C 总线接口的 A/D 器件。地址的最后一位是方向位,当主控器对A/D 器件进行读操作时为 1,进行写操作时为 0。总线操作时,由器件地址、引脚地址和方向位组成的从地址为主控器发送的第一个字节。3.4 控制字节3图 5-3 PCF8591 控制字节

4、说明控制字节用于实现器件的各种功能。控制字节存放在控制寄存器中。总线操作时,为主控器发出的第二个字节。在进行 A/D 转换数据操作时,首先是主控器发出起始信号,然后发出读寻址字节,被控器做出应答后,主控器从被控器读出第一个数据字节,主控器发出应答,主控器从被控器读出第二个数据字节,主控器发出应答;.,一直到主控器从被控器中读出第 n 个数据字节,主控器发出非应答信号,最后主控器发出停止信号。当进行 D/A 转换时,【实验步骤】1. 单片机开发板的电源与 PC 的 USB 口相连,且在 PC 机上安装必要的软件。具体步骤参见文件夹“软件及其安装说明”中的“单片机实验-软件安装说明书.doc” 。

5、42. 在 KEIL 环境中编写和调试程序,具体操作步骤,请参见附录“步骤一:在 KEIL 环境中编写和调试程序” ;3. 用程序烧录软件,具体操作步骤,请参见附录“实验步骤二:烧录 HEX 程序到单片机开发板中” ;4. 完成实习报告填写工作;【附录】实验步骤一:在 KEIL 环境中编写和调试程序1. 单击桌面上的图标 ,则显示如下的窗口:2. 单击菜单中的“Project”项,则显示如下的弹出菜单:3. 选择其中的“New Project”菜单项,则弹出如下的窗口:54. 在该窗口中,在“保存在(I):”中选择保存项目的文件夹,同时,在“文件名(N ) ”中键入项目名(注意:项目名最好是英

6、文,而不是汉字;其次,项目名中不能加空格) ,键入项目名后,单击“保存(S) ”按钮,则显示如下的窗口:5. 在“Data base”中选择“ Atmel”项,单击其前面的“+” ,显示如下的选择项,从中选择“AT89C51”,如下图所示:66. 单击上图中的“确定”按钮,显示如下的弹出窗口:7. 选择其中的“是(Y) ”按钮。则新的项目创建成功,如下图显示:8. 单击菜单项中的“FileNew” ,如下图:9. 显示如下的文件编辑框,如下图所示:710. 点击菜单中的“FileSave” ,如下图:11. 则显示如下的对话框:12. 在“文件名(N) ”中键入文件名 ADC.c,然后单击“保

7、存”按钮,返回文件编辑界面,并编辑如下的 AD转换程序:8#include#include#define uint unsigned int#define uchar unsigned char#define Delay4us() _nop_();_nop_();_nop_();_nop_();sbit SCL=P21;sbit SDA=P20;sbit LS138A=P22; sbit LS138B=P23;sbit LS138C=P24;uchar code tab1=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f;bit bdata I

8、Ic_ERROR;uchar temp;void iic_start()SDA=1;SCL=1;Delay4us();SDA=0;Delay4us();SCL=0;void iic_stop()SDA=0;SCL=1;Delay4us();SDA=1;9Delay4us();SCL=0;void slave_ACK(void)SDA=0;SCL=1;Delay4us();SCL=0;SDA=1;void slave_NOACK(void)SDA=1;SCL=1;Delay4us();SDA=0;SCL=0;SDA=0;void check_ACK()SDA=1;SCL=1;IIc_ERROR=

9、0;Delay4us();if(SDA=1)IIc_ERROR=1;SCL=0;10void IICSendByte(unsigned char indata)unsigned char n=8;while(n-)SDA=(bit)(indata&0x80);SCL=1;Delay4us();SCL=0;indata=indata0;x-)for(y=110;y0;y-);void disply(uchar count)uchar bai,shi,ge;bai=count/100;shi=count%100/10;ge=count%10;P0=tab1bai;LS138A=1; LS138B=

10、0;12LS138C=1; delay(5);P0=tab1shi;LS138A=0; LS138B=1;LS138C=1; delay(5);P0=tab1ge;LS138A=1; LS138B=1;LS138C=1; delay(5);void main()P1=0x00;while(1)ADC_PCF8591(0x04);disply(temp);13. 程序输入完成后保存,选中左边窗口中的“Source Group 1”,然后单击鼠标右键,弹出如下的弹出菜单,然后单击其中的“Add Files to Group “Source Group 1 ”,如下图所示:1314. 则显示如下的对

11、话框:15. 选中刚才创建的 ADC.c 文件,然后单击 “Add”按钮。则文件添加成功,显示如下图:16. 然后单击“Close”按钮,关闭添加文件窗口。然后,单击程序编译按钮,如下图显示:1417. 编译结果显示在界面下方的子窗口中,如果程序有错误,则请修改程序直到无误,如下图:18. 选中左边“Project Workspace”窗口中的“Target 1”并单击右键,显示如下的弹出菜单:1519. 选中其中的“Options for Target “Target 1” ,在显示如下图窗口:20. 单击标签页“Output” ,则显示如下:21. 其中, “Name of Excutab

12、le”中是可执行程序的名称;将“Create Hex File”项打勾,然后单击“确定”按钮,并单击图标重新编译文件:22. 则生成 HEX 文件,如下图所示:16实验步骤二:烧录 HEX 程序到单片机开发板中1. 单击文件“PZISP 自动下载软件.exe” ,则显示如下:2. 选择如图所示的芯片类型、波特率;并且单击“打开文件”按钮,选择生成的 HEX 文件,然后单击上图中的“下载程序”按钮,如下图所示:173. 则可执行程序烧录到单片机开发板中。注意:在程序下载前,必须将单片机的电源打开。步骤三,重复上面的步骤一和步骤二,编辑程序完成模数转换程序,C51 源程序名为 DAC.c,程序内容

13、如下:#include#include#define uint unsigned int#define uchar unsigned char#define Delay4us() _nop_();_nop_();_nop_();_nop_();#define PCF8591 0x90 /PCF8591 地址sbit SCL=P21;sbit SDA=P20;sbit LS138A=P22; sbit LS138B=P23;sbit LS138C=P24;uchar code tab1=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f;bit b

14、data IIc_ERROR;sbit beep=P15;void iic_start()18SDA=1;SCL=1;Delay4us();SDA=0;Delay4us();SCL=0;void iic_stop()SDA=0;SCL=1;Delay4us();SDA=1;Delay4us();SCL=0;void slave_ACK(void)SDA=0;SCL=1;Delay4us();SCL=0;SDA=1;void slave_NOACK(void)SDA=1;SCL=1;Delay4us();19SDA=0;SCL=0;SDA=0;void check_ACK()SDA=1;SCL=

15、1;IIc_ERROR=0;Delay4us();if(SDA=1)IIc_ERROR=1;SCL=0;void IICSendByte(unsigned char indata)unsigned char n=8;while(n-)SDA=(bit)(indata&0x80);SCL=1;Delay4us();SCL=0;indata=indata0;x-)for(y=110;y0;y-);void disply(uchar count)uchar bai,shi,ge;bai=count/100;shi=count%100/10;ge=count%10;P0=tab1bai;LS138A=1; LS138B=0;LS138C=1; delay(50);P0=tab1shi;LS138A=0; LS138B=1;21LS138C=1; delay(50);P0=tab1ge;LS138A=1; LS138B=1;LS138C=1; delay(50);void main()uchar flag,val;while(1)disply(val);if(flag=0)val+=5;DACconversion(val);if(val=255)flag=1;elseval-=5;DACconversion(val);if(val=0)flag=0;

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 研究报告 > 技术指导

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号