菜鸟向高手求助TLC5615的问题--急--

[复制链接]
3234|12
 楼主| tf526641400 发表于 2011-5-14 01:53 | 显示全部楼层 |阅读模式
#include <htc.h>
#define uchar unsigned char
#define uint  unsigned int
#define DIN RC0
#define SCLK RC1
#define CS RC2
void init();
void TLC5615_write_byte(uint date);
void SPI_write_byte(uchar x);
uint date;
uchar x;
void main()
{
init();
while(1)
{ //TRISA1=0;
      //RA1=1;
   
   TLC5615_write_byte(date);   
}
}
void init()
{
   TRISC0=0;
   TRISC1=0;
   TRISC2=0;
   
}
void TLC5615_write_byte(uint date)
{   CS=1;
    SCLK=0;
    DIN=0;
    CS=0;
   date<<2;
   x=date;
   SPI_write_byte(x>>8);
   SPI_write_byte(x);
   CS=1;
}
void SPI_write_byte(uchar x)
{
   uchar i;
    for(i=0;i<8;i++)
       {
          DIN=x&&0x80;
          SCLK=1;
          x<<1;
          SCLK=0;
       }
     
}
请高手帮我看看我写的用IO口模拟SPI通过TLC5615输出电压的程序,不知道什么原因,给一个值,输出电压始终为零,调了很长时间也没弄出来,实在不知道是什么地方出问题了,向高手求助,谢谢
kvdong 发表于 2011-5-14 11:28 | 显示全部楼层
void SPI_write_byte(uchar x)
{
   uchar i;
    for(i=0;i<8;i++)
       {
          DIN=x&&0x80;  //这一行出现的问题。1,&&与&要分清;2,容易出现字符变量赋值给位变量
          SCLK=1;
          x<<1;
          SCLK=0;
       }
     
}
建议改为

DIN=0;
if(x&0x80)
DIN=1;
试试
kvdong 发表于 2011-5-14 11:30 | 显示全部楼层
另外,不知道你的通讯的速率用没有要求。
即单片机与外设之间速度是否匹配。
如果有的话,建议SCLK置位与清零之间加几个空指令
 楼主| tf526641400 发表于 2011-5-14 12:54 | 显示全部楼层
kvdong兄台,我按着你说的那个改了,可是还是没有输出,用Proteus仿真,数据线上都没有信号
兰天白云 发表于 2011-5-14 13:08 | 显示全部楼层
示波器不用?
kvdong 发表于 2011-5-14 13:24 | 显示全部楼层
你的date的赋值在哪里?
 楼主| tf526641400 发表于 2011-5-14 14:00 | 显示全部楼层
我用Proteus仿真了一下,sclk的时序时间间隔不连续[img][/img]
 楼主| tf526641400 发表于 2011-5-14 14:01 | 显示全部楼层
file:///C:/Documents
 楼主| tf526641400 发表于 2011-5-14 14:02 | 显示全部楼层

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
 楼主| tf526641400 发表于 2011-5-14 14:02 | 显示全部楼层
这个应该怎么解决呢
 楼主| tf526641400 发表于 2011-5-14 16:29 | 显示全部楼层
问题已解决,谢谢大家的关注
workants 发表于 2012-11-17 18:57 | 显示全部楼层
尼玛。你解决了咋不过来告诉大家怎么解决的啊
与时俱进 发表于 2012-11-17 19:21 | 显示全部楼层
楼上第一个帖子就骂人,不文明。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3

主题

87

帖子

2

粉丝
快速回复 在线客服 返回列表 返回顶部