51单片机数模转换

郭天祥的新编51C语言教程中关于D/A转换有一篇例题,例题是5.5.1程序内容为:#include<reg52.h>#defineucharunsignedchar#de... 郭天祥的新编51C语言教程中关于D/A转换有一篇例题,例题是5.5.1程序内容为:
#include<reg52.h>
#define uchar unsigned char
#define unit unsigned int
sbit dula=P2^6; //此处申明U1锁存器的锁存端
sbit wela=P2^7; //此处申明U2锁存器的锁存端
sbit dawr=P3^6; //此处定义DA 的WR端口
sbit dacs=P3^2; //此处定义DA 的CS端口
sbit beep=P2^3; //此处定义蜂鸣器
void delayms (unit xms) //延时程序
{
unit i,j;
for(i=xms;i>0;i--)
for(j=110;j>0;j--);
}
void main() //主函数
{
unchar val,flag;
dula=0; //此处关闭段选
wela=0; //此处关闭位选
dacs=0; //CS低电平有效
dawr=0; //WR低电平有效
P0=0; //不明白为什么P0=0????
while(1) //大循环开始
{
if(flag==0) //此处不明白...flag干嘛的.....
{
val+=5; //val又是干嘛的....
P0=val; //有什么关系吗...这两个....
if(val==255)
{
flag=1; //不懂
beep=0; //明白
delayms(100);
beep=1;
}
delayms(50);
}
else
{
val-=5; //不懂
P0=val; //不懂
if(val==0) //不懂
{
flag=0;
beep=0;
delayms(100);
beep=1;
}
delayms(50)
}
}
}
展开
 我来答
向少年拉飞驰
推荐于2016-11-07 · TA获得超过338个赞
知道小有建树答主
回答量:171
采纳率:0%
帮助的人:109万
展开全部
这个程序的效果是 电压值逐渐上升 然后逐渐下降 吗?
说下我的理解。
P0=0 // 初值呀, 这样转化到0V。
flag 是一个标志 当数字量(val)为255(最大转化值)时置1. 为0时清零。
val是一个待转化的数字量 。把val的值给P0口 ,再通过P0与数模转化芯片转化为模拟量。

注释如下:

P0=0; //P0付初值。也就是让val为0;
while(1) //大循环开始
{
if(flag==0) //当flag为0时 。
{
val+=5; // val=val+5;
P0=val; //把val送给P0口;
if(val==255) //如果 val=255;
{
flag=1; //flag=1
beep=0; // 蜂鸣器 汪汪叫 (0是叫还是不叫?)
delayms(100);
beep=1; // 跟前个状态相反。
}
delayms(50);
}
else //如果flag==1; (val=255)
{
val-=5; // 待转化的数字量-5;
P0=val; // val送给P0;
if(val==0) // 待转化val=0;
{
flag=0; // 标记flag =0;
beep=0; // 蜂鸣器不叫
delayms(100);
beep=1; /蜂鸣器叫
}
delayms(50)
}
}
}

以上是我的理解 。 不知道你用PROTUES仿真了没有 。
追问
beep=0是叫
P0口的话STC80C51
不应该是P0.0~P0.7八个口吗?如果把val赋给P0口是什么呀...
追答
去看看数模转化吧。
咔毛北鼻
2011-08-08 · TA获得超过133个赞
知道答主
回答量:196
采纳率:0%
帮助的人:150万
展开全部
看这一句 "unchar val,flag"
是定义的 val计数 flag是标记位
当flag为零 val值+5 然后把val给P0
因为是8位的DAC 所以当val为255时 把flag置1 因为256就溢出了

后面不懂的地方类似
追问
你好,为什么要把val赋给P0呢???
追答
那要看你的P0口接的是什么了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友7ecdbdad54
2011-08-09 · 超过13用户采纳过TA的回答
知道答主
回答量:48
采纳率:0%
帮助的人:40.5万
展开全部
P0接的是DA的D0到D7的数据口吧
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
HiCoastline
2012-07-01
知道答主
回答量:14
采纳率:0%
帮助的人:2.1万
展开全部
遇到过这样的问题,现在还不知道为什么,,val,flag 没有赋初值,缘何判断?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友9e6d11eef
2011-08-09 · TA获得超过1173个赞
知道小有建树答主
回答量:723
采纳率:0%
帮助的人:301万
展开全部
我看过这个程序 很多句子也不懂 unchar val,flag; 这句虽然定义了 但是没有赋初值,后面运行到if(flag==0)是怎么运行的呢?无法判断啊
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 2条折叠回答
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式