本科课件-单片机技术与项目实施(完整).ppt

本科课件-单片机技术与项目实施(完整).ppt

直通方式: 输入寄存器和DAC寄存器始终输出,输入数据在控制信号WR作用下(或与单片机并口直接联结,无需WR),直接进入DAC寄存器中; 适用:只有一路模拟信号输出或几路模拟信号非同步输出。 单缓冲方式: 输入寄存器和DAC寄存器共用一个地址,同时选通输出,输入数据在控制信号作用下,直接进入DAC寄存器中; WR1和WR2同时进行,并且与CPU的WR相连,CPU对0832执行一次写操作,将数据直接写入DAC寄存器中。 适用:只有一路模拟信号输出或几路模拟信号非同步输出。 双缓冲器方式: 输入寄存器和DAC寄存器分配有各自的地址,可分别选通用同时输出多路模拟信号。 适用:同时输出几路模拟信号的场合,可构成多个0832同步输出电路。 DAC0832用作波形发生器 源程序如下: #pragma db oe sb #includereg51.h #includeabsacc.h #define DAC0832 XBYTE[0x7fff] /* 定义DAC0832端口地址 */ #define uchar unsigned char void delay(uchar t) { /* 延时函数 */ while(t--); } 关键源程序 void saw(void) { /* 锯齿波发生函数 */ uchar i; for (i=0;i255;i++) { DAC0832=i; } } void square(void) { /* 方波发生函数 */ DAC0832=0x00; delay(0x10); DAC0832=0xff; delay(0x10); } 红外遥控器 案例三 波形发生器 案例描述: 利用单片机AT89S51与ADC0832设计完成一台三角波与方波可选的信号发生器;输出波的幅值为5V,频率自定。 #includereg51.h #includemath.h //使用正弦函数 unsigned char biao=0; void delay(unsigned char m) //延时程序 { while(--m!=0); } void bo() interrupt 0 //波形选择按键,中断处理 { if(++biao==4) biao=0;//0-三角波,1-方波,2-锯齿波,3-正弦波 } void main() { unsigned char i=0; float j=0.0; TCON=0X01; IE=0X81; //开启外部中断,下降沿触发 while(1) //无限循环 { switch(biao) { case 0: for(i=0;i255;i++)// 三角波 P0=i; for(i=255;i0;i--) P0=i; break; case 1: P0=0; //方波 delay(100); P0=0xff;delay(100); break; case 2: for(i=255;i0;i--)//锯齿波 P0=i; break; case 3: for(j=0;j6.28;j+=0.02) //正弦波 { P0=(1+sin(j))*(2*2*2*2*2*2*2); for(i=0;i200;i++) delay(20); } break; default: P0=0; //无输出 } }} 常用的波特率及计算器初值 MCS-51串行口初始化 在使用串行口之前,应对它进行编程初始化,主要是设置产生波特率的定时器1、串行口控制和中断控制。具体步骤如下: 1)确定定时器1的工作方式——编程TMOD寄存器; 2)计算定时器1的初值——装载TH1、TL1; 3)启动定时器1——编程TCON中的TR1位; 4)确定串行口的控制——编程SCON; 5)串行口在中断方式工作时,设置IE寄存器。 MCS-51的中断系统——中断寄存器 TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0 TC

您可能关注的文档

文档评论(0)

1亿VIP精品文档

相关文档