7.思考题
利用单片机的串行口向PC机发送数据0x55,运行结果可以通过在PC的接收软件上看见,验证接收数据是否正确。
实验七 AD转换器实验
一、实验目的
学会用51单片机模拟I2C总线接口,实现与PCF8591 8位AD转换器的接口,学会用单片机实现数据采集的方法。 二、实验设备及器件
PC机 一台
51单片机实验板一台(含PCF8951芯片) 万用表、示波器 三、实验内容
编写一段程序,采集PCF8591 AD通道的模拟信号值,将采集的电压值用四位数码管显示出来。
四、实验电路原理图
AIN0-AIN3为4路模拟输入信号,时钟信号SCL接至单片机P36,数据线SDA接至P37。 五、参考例程
#include \#include
#define PCF8591 0x90 //PCF8591 地址 #define THCO 0xf8 //11.0592MHZ晶振 #define TLCO 0xcb //定时2ms时间常数值 unsigned char Data_Buffer[4]={1,2,3,4};
33/39
uchar code
Duan[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x76};
sbit P24=P2^4; sbit P25=P2^5; sbit P26=P2^6; sbit P27=P2^7; bit flag=0;
bit DACconversion(unsigned char sla,unsigned char c, unsigned char Val); bit ISendByte(unsigned char sla,unsigned char c); unsigned char IRcvByte(unsigned char sla); /******************************/ void main(void) //主程序 {
unsigned int v;
unsigned char AD_CHANNEL=1; unsigned int D[5]={0,0,0,0,255};
TMOD=0x11; TH0=THCO; TL0=TLCO; TR0=1; ET0=1; EA=1;
//四个数码管的位码口定义
//设置定时器0工作模式,16位计数模式
//启动定时器
//使能定时器中断 //开总中断
while(1) {
if(flag==1) {flag=0;
ISendByte(PCF8591,0x41);
v=IRcvByte(PCF8591);
Data_Buffer[0]=0; Data_Buffer[1]=v/100;
34/39
Data_Buffer[2]=v/10;
Data_Buffer[3]=v; }
} }
void timer0() interrupt 1 //定时器中断服务子程序 {
static unsigned int count=0;//软计时变量定义
static unsigned char Bit=0; //静态变量,退出程序后,值保留
TH0=THCO; TL0=TLCO; Bit++; if(Bit>=4)Bit=0; P2|=0xf0;
//先关位码 //开段码
P0=Duan[Data_Buffer[Bit]]; if(Bit==0)P0|=0x80; switch(Bit) {
case 0: P24=0;break; case 1: P25=0;break; case 2: P26=0;break; case 3: P27=0;break; }
count++; if(count>=250) {
count=0; flag=1; } }
//送位码
//半S时间到
六、思考题
35/39
1.将PCF8591的4个模拟输入通道的采样值轮流在数码管上显示出来。
实验八DA转换器实验
一、实验目的
学会用51单片机模拟I2C总线接口,实现与PCF8591的8位AD转换器的接口,学会用单片机实现波形发生器的方法。 二、实验设备及器件
PC机 一台
51单片机实验板一台(含PCF8951芯片) 万用表、示波器 三、实验内容
编写一段程序,用单片机控制PCF8591 DA转换器输出方波,用示波器观察PCF8591输出的方波。
四、实验电路原理图
时钟信号SCL接至单片机P36,数据线SDA接至P37。 五、参考例程
#include \#include
#define uchar unsigned char #define uint unsigned int
#define PCF8591 0x90 //PCF8591 地址
#define THCO 0xf8 //11.0592MHZ晶振 #define TLCO 0xcb //定时2ms时间常数值
36/39