lzl
lzl
驱动大牛
驱动大牛
  • 注册日期2001-09-11
  • 最后登录2010-06-22
  • 粉丝1
  • 关注0
  • 积分127分
  • 威望48点
  • 贡献值0点
  • 好评度14点
  • 原创分0分
  • 专家分0分
阅读:1571回复:3

lsn_061 请进,帮忙注释以下这个程序,我看不懂。

楼主#
更多 发布于:2005-01-17 16:40
我也刚学c51。
/**************************************
  名称:read2543
  功能:TLC2543驱动模块
  输入参数:port通道号
  输出参数:ad转换值
*************************************/
uint read2543(uchar port)
{
uint ad=0,i;
CLOCK=0;
_CS=0;
port<<=4;
for(i=0;i<12;i++)
{
  if(D_OUT) ad|=0x01;
  D_IN=(bit)(port&0x80);
  CLOCK=1;
  delay(3);
  CLOCK=0;
  delay(3);
  port<<=1;
  ad<<=1;
}
_CS=1;
ad>>=1;
return(ad);
}

l=z=l 我听说,灌水是使分数快速增长的有效方法
lsn_061
驱动老牛
驱动老牛
  • 注册日期2002-05-09
  • 最后登录2006-10-06
  • 粉丝0
  • 关注0
  • 积分1000分
  • 威望261点
  • 贡献值0点
  • 好评度169点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2005-01-17 18:23
不好意思....灌水去了,没看到
功能好像是一个处理器外连一个2543(没用过)12位的A/D器

我也刚学c51。
/**************************************
  名称:read2543
  功能:TLC2543驱动模块
  输入参数:port通道号
  输出参数:ad转换值
*************************************/
uint read2543(uchar port)
{
uint ad=0,i;                
CLOCK=0;                ;初始化
_CS=0;                  ;开始传数据
port<<=4;               ;好像是16个通道4位+12位AD值=16位
for(i=0;i<12;i++)       ;占用两个BYTE
{
  if(D_OUT) ad|=0x01;   ;D_OUT好像是定义了个I/O,就叫DATA吧
  D_IN=(bit)(port&0x80);;仿真一下看看结果,我一时半不明白
  CLOCK=1;              ;  
  delay(3);             ;
  CLOCK=0;              ;
  delay(3);             ;模拟一个低脉冲,周期6ms
  port<<=1;             ;得到12位数据中的一位
  ad<<=1;               ;左移一位那就是8个通道3位+12位AD了
}
_CS=1;
ad>>=1;                 ;结束
return(ad);             ;返回
}

 


瞎猜,指正.............嘻嘻

结论:8通道的12位A/D装换器

[编辑 -  1/17/05 by  lsn_061]
[img]http://bbs.zndev.com/image/medal/5.gif[/img]
lzl
lzl
驱动大牛
驱动大牛
  • 注册日期2001-09-11
  • 最后登录2010-06-22
  • 粉丝1
  • 关注0
  • 积分127分
  • 威望48点
  • 贡献值0点
  • 好评度14点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2005-01-17 19:58
哈哈,我不明白的你也不明白阿!

if(D_OUT) ad|=0x01; ;D_OUT好像是定义了个I/O,就叫DATA吧
D_IN=(bit)(port&0x80);;仿真一下看看结果,我一时半不明白

我就这两行不明白!
我没C语言仿真器!
l=z=l 我听说,灌水是使分数快速增长的有效方法
lsn_061
驱动老牛
驱动老牛
  • 注册日期2002-05-09
  • 最后登录2006-10-06
  • 粉丝0
  • 关注0
  • 积分1000分
  • 威望261点
  • 贡献值0点
  • 好评度169点
  • 原创分0分
  • 专家分0分
地板#
发布于:2005-01-17 20:30
哈哈,我不明白的你也不明白阿!

if(D_OUT) ad|=0x01; ;D_OUT好像是定义了个I/O,就叫DATA吧
D_IN=(bit)(port&0x80);;仿真一下看看结果,我一时半不明白

我就这两行不明白!
我没C语言仿真器!


赫赫.....我很少用c....你到www.manley.com.cn上下一个吧//

支持软件仿真//

if(D_OUT) ad|=0x01; ;D_OUT好像是定义了个I/O,就叫DATA吧
ad<<=1; ;左移一位那就是8个通道3位+12位AD了

这两条语句加起来就是封装数据了
因为D_IN刚开始比ad多移了4位,那最后应该是AD转换的最高位....代表数据的正负的意思,哥哥我没看spei.....为难了..给分吧
[img]http://bbs.zndev.com/image/medal/5.gif[/img]
游客

返回顶部