微机原理与接口技术实验指导书大纲.docx
《微机原理与接口技术实验指导书大纲.docx》由会员分享,可在线阅读,更多相关《微机原理与接口技术实验指导书大纲.docx(16页珍藏版)》请在冰点文库上搜索。
![微机原理与接口技术实验指导书大纲.docx](https://file1.bingdoc.com/fileroot1/2023-5/10/70bc2512-3cde-43a0-8ab0-a9ef801193f7/70bc2512-3cde-43a0-8ab0-a9ef801193f71.gif)
微机原理与接口技术实验指导书大纲
《微机原理与接口技术》
实验指导书
电气与自动化工程学院
常熟理工学院
二零一四年二月
实验一、AD转换实验
一、实验目的
1.了解ADC0809的AD转换原理;
2.了解ADC0809的硬件设计原理图;
3.自主设计ADC0809的AD转换程序以及显示程序。
二、实验设备
单片机实验箱一台;PC机一台;USB下载线一根;ADC0809模块;LCD12864液晶模块。
三、实验内容
通过ADC0809的IN0端口采集模拟量信号,然后进行AD转换,转换完成后的数字量在LCD12864液晶屏上显示出来。
模拟信号由0~5V的可调电位器提供,ADC0809的时钟频率由单片机定时器0提供。
四、实验原理
ADC0809是CMOS的8位A/D转换器,片内有8路模拟开关,可控制8个模拟量中的一个进入转换器中。
转换时间约100μs,含锁存控制的8路多路开关,输出有三态缓冲器控制,单电源5V供电。
主要时序信号如图2所示:
START是转换启动信号,高电平有效;ALE是3位通道选择地址(ADDC、ADDB、ADDA)信号的锁存信号。
当模拟量送至某一输入端(如IN1或IN2等),由3位地址信号选择,而地址信号由ALE锁存;EOC是转换情况状态信号,当启动转换约100μs后,EOC产生一个负脉冲,以示转换结束;在EOC的上升沿后,若使输出使能信号OE为高电平,则控制打开三态缓冲器,把转换好的8位数据结果输至数据总线,至此ADC0809的一次转换结束。
ADC0809通道的选择与工作时序图,如图1,2所示
图1:
ADC0809通道的选择
图2:
ADC0809工作时序图
五、实验步骤
1、连接硬件接线:
将ADC0809模块和LCD12864模块分别通过牛角插头连接至单片机对应接口,连接单片机电源。
2、ADC0809模块实验板说明:
该模块板自带电压表,显示IN0,IN1输入端电压,显示可以通过S1与S2波动开关选择,一次只能允许有一个开关拨到ON位置,严禁两个开关同时为ON。
模块实验板预留出IN2~IN7输入端口,可供扩展AD实验口使用。
3、理解硬件原理图:
理解ADC0809的硬件原理图,根据硬件原理图设计软件流程图。
ADC0809的硬件电路图如图3所示。
其中引脚分配为:
ADA=P1^0;//地址选择位
ADB=P1^1;//地址选择位
ADC=P1^2;//地址选择位
ST=P1^3;//转换启动信号
EOC=P1^4;//转换情况状态信号
CLK=P1^6;//转换时钟信号
EN=P1^5;//转换使能控制
ALE=P1^7;//转换地址锁存控制
图3:
ADC0809硬件电路图
4、画出程序流程图:
根据程序流程图,编写并调试软件程序。
图4:
软件流程图
实验程序如下:
/**
**@note:
需要建立LCD12864_ADC0832.h文件和LCD12864_ADC0832.c文件
**@note:
LCD12864_ADC0832.h文件声明LCD12864_ADC0832.c函数与变量
**@note:
以下为LCD12864_ADC0832.h文件程序
*/
/************************************************/
#ifndef_LCD12864_ADC0832_h_
#define_LCD12864_ADC0832_h_
#include
#include
#defineucharunsignedchar
#defineuintunsignedint
externvoidsys_init(void);//系统初始化
externvoiddisplay_ad(void);//显示AD转换结果
#endif
/************************************************/
/**
**@note:
需要建立LCD12864_ADC0832.h文件和LCD12864_ADC0832.c文件
**@note:
以下为LCD12864_ADC0832.c函数与变量
*/
/***************************************************/
#include"LCD12864_ADC0832.h"
sbitADA=P1^0;//地址选择位
sbitADB=P1^1;//地址选择位
sbitADC=P1^2;//地址选择位
sbitST=P1^3;//转换启动信号
sbitEOC=P1^4;//转换情况状态信号
sbitCLK=P1^6;//转换时钟信号
sbitEN=P1^5;//转换使能控制
sbitALE=P1^7;//转换地址锁存控制
//引脚定义
sbitCS=P0^0;//片选高电平有效单片LCD使用时可固定高电平
sbitPSB=P0^1;//低电平时表示用串口驱动,可固定低电平
sbitSCLK=P0^2;//时钟
sbitSID=P0^3;//数据
voidwrite(bitstart,unsignedcharddata);
voidsendbyte(unsignedcharbbyte);
voiddelaynms(unsignedintdi);
voidlcdinit(void);
voidlcdtest(void);
voidlcdcls(void);
unsignedcharcodema[]={"汉字显示LCD"};
unsignedcharcodema2[]={"AD转换的结果:
"};
unsignedcharcodema3[]={"控制IC:
ST7920"};
unsignedcharcodema4[]={"常熟理工学院"};
unsignedcharcodeDIS4[]={"0123456789"};
unsignedchartemp[3]=
{
0,0,0
};
unsignedcharad=0;
//ms延时函数
voidDelay_xms(uintx)
{
uinti,j;
for(i=0;ifor(j=0;j<112;j++);
}
voidlcdinit(void)//初始化LCD
{
delaynms(10);//启动等待,等LCM讲入工作状态
PSB=0;//串口驱动模式
//RESET=0;
delaynms
(1);
//RESET=1;//复位LCD
CS=1;
write(0,0x30);//8位介面,基本指令集
write(0,0x0c);//显示打开,光标关,反白关
write(0,0x01);//清屏,将DDRAM的地址计数器归零
}
voidwrite(bitstart,unsignedcharddata)//写指令或数据
{
unsignedcharstart_data,Hdata,Ldata;
if(start==0)start_data=0xf8;//写指令
elsestart_data=0xfa;//写数据
Hdata=ddata&0xf0;//取高四位
Ldata=(ddata<<4)&0xf0;//取低四位
sendbyte(start_data);//发送起始信号
delaynms(5);//延时是必须的
sendbyte(Hdata);//发送高四位
delaynms
(1);//延时是必须的
sendbyte(Ldata);//发送低四位
delaynms
(1);//延时是必须的
}
voidsendbyte(unsignedcharbbyte)//发送一个字节
{
unsignedchari;
for(i=0;i<8;i++)
{
SID=bbyte&0x80;//取出最高位
SCLK=1;
SCLK=0;
bbyte<<=1;//左移
}
}
voiddelaynms(unsignedintdi)//延时
{
unsignedintda,db;
for(da=0;dafor(db=0;db<10;db++);
}
voidlcdtest(void)//图形方式下屏幕全黑
{
unsignedchari,j;
for(i=0;i<32;i++)
{
write(0,0x80+i);write(0,0x80);
for(j=0;j<16;j++)write(1,0xff);
}
for(i=0;i<32;i++)
{
write(0,0x80+i);write(0,0x88);
for(j=0;j<16;j++)write(1,0xff);
}
}
voidlcdcls(void)//图形方式下清屏
{
unsignedchari,j;
for(i=0;i<32;i++)
{
write(0,0x80+i);write(0,0x80);
for(j=0;j<16;j++)write(1,0x00);
}
for(i=0;i<32;i++)
{
write(0,0x80+i);write(0,0x88);
for(j=0;j<16;j++)write(1,0x00);
}
}
voiddisplay_ad(void)
{
unsignedchari;
ADA=0;
ADB=0;
ADC=0;//选定IN0输入端口
ST=0;
ALE=0;
_nop_();
ALE=1;
ST=1;//根据时序图进行AD转换的初始化
_nop_();_nop_();//延时等待转换稳定
ALE=0;
ST=0;
while(!
EOC);//等待转换完成
EN=1;
ad=P2;//将转换结果赋值给变量用于显示
EN=0;
temp[0]=(unsignedchar)ad/100;//将变量数值拆分成单个数字用于显示
temp[1]=(unsignedchar)ad%100/10;
temp[2]=(unsignedchar)ad%10;
write(0,0x80);for(i=0;i<16;i++)write(1,ma2[i]);
write(0,0x90);for(i=0;i<3;i++)write(1,DIS4[temp[i]]);
}
voidsys_init(void)
{
Delay_xms(100);//上电,等待稳定
lcdinit();//初始化LCD
TMOD=0x01;
TH0=(65536-1)/256;
TL0=(65536-1)%256;//取余
EA=1;
TR0=1;
ET0=1;
ad=0x80;
temp[0]=(unsignedchar)ad/100%10;
temp[1]=(unsignedchar)ad/10%10;
temp[2]=(unsignedchar)ad%10;
}
voidmain(void)
{
sys_init();//系统初始化
while
(1)
{
display_ad();//显示AD转换值
}
}
/*********************************************************
*定时器0函数
*********************************************************/
voidtimer0()interrupt1
{
TH0=(65536-1)/256;
TL0=(65536-1)%256;
CLK=~CLK;
}
/*********************************************************/
六、思考题:
1)如何改用IN2为输入端口?
请修改程序并观察实验现象。
2)实验中出现哪些问题,如何解决的?
实验二、DAC0832转换实验
一、实验目的
1.了解DAC0832的DA转换原理;
2.了解DAC0832的硬件设计原理图;
3.自主设计DAC0832的DA转换程序。
二、实验设备
单片机实验箱一台;PC机一台;USB下载线一根;DAC0832模块;9V电源适配器一个。
三、实验内容
通过DAC0832的DI0-DI7输入端输入数字信号,经DA转换后将模拟电压显示到电压表上。
四、实验原理
DAC0832是具有两个输入数据寄存器的8位DAC,能直接与51单片机相连。
主要特性如下:
分辨率为8位;电流输出,稳定时间为1s;可双缓冲输入、单缓冲输入或直接数字输入;单一电源供电(+5~+15V)。
DAC0832的逻辑结构如图所示:
图1:
DAC0832的逻辑结构图
其引脚分布如图2所示:
图2:
DAC0832的引脚分布图
DAC0832各引脚说明:
DI0-DI7:
转换数据输入端;
CS:
片选信号输入端。
ILE:
数据锁存允许信号输入端,高电平有效。
WR1:
输入寄存器写选通控制端。
当CS=0、ILE=1、WR1=0时,数据信号被锁存在输入寄存器中。
Xfer:
数据传送控制信号输入端,低电平有效。
WR2:
DAC寄存器写选通控制端。
当XFER=0,WR2=0时,输入寄存器状态传入DAC寄存器中。
Iout1:
电流输出1端,当数据全为1时,电流输出最大;当数据全为0时,输出电流最小。
Iout2:
电流输出2端。
DAC0802具有Iout1+Iout2=常数的特性。
Rfb:
反馈电阻端。
Vref:
基准电压输入端,是外加的高精度电压源,它与芯片内的电阻网络相连接,该电压范围为-10V~10V;
VCC和GND:
芯片的电源和接地端。
DAC内部有两个寄存器,而这两个寄存器的控制信号有五个,输入寄存器有LIE、CS、WR1控制,DAC寄存器由WR2、Xref控制,用软件指令控制这五个控制端可以实现三种工作方式:
直通方式,单缓冲方式,双缓冲方式。
直通方式是将两个寄存器的五个控制端预先置为有效信号,两个寄存器都开通,只要有数字信号输入就立即进入DA转换。
单缓冲方式是使DAC0832的两个输入寄存器中有一个处于直通方式,另一个处于受控方式,可以将WR2和Xref相连接到地上,并把WR1接到80C51的WR上,LIE接高电平,CS接高位地址或地址译码的输出端上。
双缓冲方式把DAC0832的输入寄存器和DAC寄存器都接成受控方式,这种方式可以用于多路模拟量要求同时输出的情况下。
三种工作方式的区别是:
直通方式不需要选通,直接进行DA转换;单缓冲方式一次选通;双缓冲方式二次选通。
控制时序图:
图3:
DAC0832控制时序图
五、实验步骤
1、连接硬件接线:
将DAC0832模块通过牛角插头连接至单片机对应接口,连接单片机电源。
2、理解硬件原理图:
DAC0832的硬件原理图,根据硬件原理图设计软件流程图。
硬件电路图如图所示:
其中引脚分配为:
RW=P2^7;//输入端选通信号。
CS=P2^6;//片选信号输入端。
P1;//为数字信号输入口
图4:
DAC0832电路原理图
3、画出程序流程图:
根据程序流程图,编写并调试软件程序。
图5:
软件流程图
DA转换程序实例:
/**********************************
平台:
51最小系统板
单片机:
STC89C52RC
晶振:
12MHz
**********************************/
#include
#include
#defineucharunsignedchar
#defineuintunsignedint
sbitRW=P2^7;//输入端口选通信号
sbitCS=P2^6;//输入信号锁存信号
//功能:
延时1毫秒
voidDelay_xms(uintx)
{
uinti,j;
for(i=0;ifor(j=0;j<112;j++);
}
//功能:
12us延时
voidDelay_xus(uintt)
{
for(;t>0;t--)
{
_nop_();
}
}
voidDAC_init(void)//DA初始化
{
CS=0;//输入信号锁存信号
RW=0;//输入端口选通信号
}
voidDAC_start(void)
{
P1=0x80;//输入数字信号
}
voidmain(void)
{
DAC_init();
while
(1)
{
DAC_start();
}
}
观察实验结果。
六、思考题:
1、本硬件电路为单缓冲工作方式,运放采用的是单电源供电设计,如果运放采用双电源供电,单缓冲工作方式电路该怎样设计?
2、实验中遇到哪些问题?
是如何解决的?