小弟初学单片机
下面这个程序看了半天 又做死的改了很多地方在实验板上试了N久 还是没弄明白
大虾能帮忙看看不?
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
sbit SPI_CLK = P1^1;
sbit SPI_DATA = P1^0;
sbit CS_DA = P1^2;
void Delay_1ms(uint i)//1ms延时
{
uchar x,j;
for(j=0;j<i;j++)
for(x=0;x<=148;x++);
}
void da5615(uint da)
{
uchar i;
da<<=6;
CS_DA=0;
SPI_CLK=0;
for (i=0;i<12;i++)
{
SPI_DATA=da|0x8000;
SPI_CLK=1;
da<<=1;
SPI_CLK=0;
}
CS_DA=1;
SPI_CLK=0;
for (i=0;i<12;i++);
}
void main()
{
uint i=0;
while(1)
{
da5615(i);
i = i + 10;
Delay_1ms(10);
}
}
#include <reg51.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit SPI_CLK = P1^1;
sbit SPI_DATA = P1^0;
sbit CS_DA = P1^2;
void Delay_1ms(uint i)//1ms延时
{
uchar x,j;
for(j=i;j>0;j--)
for(x=125;x>0;x--);
}
void da5615(uint da)
{
uchar i;
da<<=6;
CS_DA=0;
SPI_CLK=0;
for(i=0;i<12;i++)
{
SPI_DATA=da&0x8000;
SPI_CLK=1;
da<<=1;
SPI_CLK=0;
}
CS_DA=1;
SPI_CLK=0;
_nop_();
}
void main()
{
uint i;
while(1)
{
for(i=0; i<0x3ff; i+=4)
{
da5615(i);
Delay_1ms(200);
}
Delay_1ms(2000);
}
}
在你程序上修改的,你试试看吧!
你程序里这句SPI_DATA=da|0x8000;这样写的结果是SPI_DATA永远都为1。
不知道你用的晶振是多少的,如果是12MHZ的, 就不用该;
如果是11.0592MHZ的,要把延时函数里for(x=125;x>0;x--);改为r(x=110;x>0;x--);
挺简单的,看看这篇文章“DA转换模块设计教程”
http://wenku.baidu.com/view/d5b97b6baf1ffc4ffe47ac84.html