永发信息网

单片机C51中数模转换的小问题 望大虾指点

答案:3  悬赏:40  手机版
解决时间 2021-08-17 01:38
  • 提问者网友:玫瑰园
  • 2021-08-16 17:28

小弟初学单片机

下面这个程序看了半天  又做死的改了很多地方在实验板上试了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);
}
}

最佳答案
  • 五星知识达人网友:一把行者刀
  • 2021-08-16 18:01

#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--);

全部回答
  • 1楼网友:风格不统一
  • 2021-08-16 19:10
你们也学单片机?
  • 2楼网友:蓝房子
  • 2021-08-16 18:39

挺简单的,看看这篇文章“DA转换模块设计教程”

http://wenku.baidu.com/view/d5b97b6baf1ffc4ffe47ac84.html

我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯