打印

proteus 产生锯齿波

[复制链接]
1601|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
lyk_12266|  楼主 | 2010-6-5 11:22 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include<reg52.h>

sbit    SPI_SI=P1^0;
sbit    SPI_SCL=P1^1;
sbit    TLC5615_CS=P1^2;

unsigned char bdata dat;//dat是可位寻址的变量
sbit dat7=dat^7;
sbit dat6=dat^6;
sbit dat5=dat^5;
sbit dat4=dat^4;
sbit dat3=dat^3;
sbit dat2=dat^2;
sbit dat1=dat^1;
sbit dat0=dat^0;

unsigned int value=0,aa=0;

/************************************************
功能描述:IO模拟SPI,发送一个字节
隶属模块:SPI模块
函数属性:外部,供用户调用
参数说明 :x,要发送的字节
返回说明:无返回值
注:很多情况下,SPI是需要有较高的速度的,此函数中不使用任何循环结构,如for(;;),while等等,使用了位寻址就是为了提高速度
*******************************************/
void SPI_WriteByte(unsigned char x)  
{                                                         

dat=x; //将x的值赋给可位寻址的变量dat,以便取出各个位

SPI_SI=dat7; //取出第7个位,写到数据线上
SPI_SCL=0;
SPI_SCL=1;   //时钟线产生上升沿,数据被写入

SPI_SI=dat6;
SPI_SCL=0;
SPI_SCL=1;

SPI_SI=dat5;
SPI_SCL=0;
SPI_SCL=1;

SPI_SI=dat4;
SPI_SCL=0;
SPI_SCL=1;

SPI_SI=dat3;
SPI_SCL=0;
SPI_SCL=1;

SPI_SI=dat2;
SPI_SCL=0;
SPI_SCL=1;

SPI_SI=dat1;
SPI_SCL=0;
SPI_SCL=1;

SPI_SI=dat0;
SPI_SCL=0;
SPI_SCL=1;
}
/********************************************
功能描述:向TLC5615中写入数据
隶属模块:TLC5615(DAC)模块
函数属性:外部,供用户调用
参数说明:da,写入到TLC5615中的数据,有效数据10位(TLC5615是10位                DAC,即有效值是0~1023)
返回值:无注:数据写入后,TLC5615将在模拟输出端产生相应的电压,电压值为2*(da/1024)Vref,如写入500,基准电压时2.5V,则产生电压为2.4V
***************************************************/

void TLC5615_SetValue(unsigned int da)
{
      
     
     da<<=2;   
     TLC5615_CS=0;

     SPI_WriteByte(da>>8);
     SPI_WriteByte(da);
     TLC5615_CS=1;
  
}



void delay(del)
{
   unsigned char  x;
    while(x--);
}


void main()
{

    while(1)
        {
     
         if(value==1023)
    value=0;
        TLC5615_SetValue(value++);
delay(50);
            }
}


锯齿波的产生周期大约为32mm,我在程序中写的可能不对

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

4

帖子

1

粉丝