2949|2

9

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

听人说这里高手入云?能出来帮下忙吗? [复制链接]


本帖最后由 ZHAOBAO511 于 2012-7-10 14:50 编辑 第一次发贴,TLC2543+ATMEGA16+PROTEUS,寻求帮助!!环境:ICCAVR. #include #include #define BIT0 0x01 #define BIT1 0x02 #define BIT2 0x04 #define BIT3 0x08 #define BIT4 0x10 #define BIT5 0x20 #define BIT6 0x40 #define BIT7 0x80 #define CLKH PORTB |=BIT1 //CLK高 #define CLKL PORTB &=~BIT1 //CLK低 #define DATAH PORTB |=BIT2 //DATA高 #define DATAL PORTB &=~BIT2 //DATA低 #define CSH PORTB |=BIT4 //CS高 #define CSL PORTB &=~BIT4 //CS低 #define uchar unsigned char #define uint unsigned int #define X 5 uchar zhuanhuan[24]; //采到2543的值放这里转换一下 //********************************************************************** //延时函数 void delay(unsigned int s){ while(s)s--; } //********************************************************************* void port_init(void) { PORTA = 0x00; DDRA = 0x3f; PORTB = 0x00; DDRB = 0xf6; PORTC = 0x00; //m103 output only DDRC = 0xff; //P3口设置为输出 PORTD = 0x00; DDRD = 0xff; } //********************************************************************* //本程序没有使用tlc2543的EOC(转换结束标志)信号,片选一直处于选中,也可以自己加入片选信号 unsigned int tlc2543(unsigned char senddata)//这里把senddate改成recdata传递 { unsigned int recdata = 0; unsigned int i = 0; recdata = 0;//接收到的转换结果数据 PORTB &= 0B11101111;//片选使能(可选)以前的CS片选是PB1那么就是0B11111101,这里的B是二进制,第二位为低的时候选中 //现在改成了PB4,那么这里要改成0B11101111 NOP(); NOP();NOP(); NOP(); for(i=0;i<12;i++)//转换12个字节 ,因为需要的是12位,所以转换12字节 { if(senddata & 0x80)//比如说吧,SENDDATA这个值现在是0x81,那么用0x81与上0X80肯定是1,那么就执行,PB5口高电平,否则就执行PB5口低电平。 //然后,1000 0001 也就是0X81,左移1位,变成,0000 0010 //就是0000 0010 和0X81再与,得的值应该是假,那么PB5口为低,这样重复八次,就得出八个PB5口的高低电 PORTB |= 0B00000100;//以前的PB5口是DIN,现改成PB2,那么0B00100000改为0B00000100 else PORTB &= 0B11111011;//准备发送控制字,同上面一样改0B11111011 senddata <<= 1; if(PINB & 0x08)//PB0口为高电平的话,那么recdata |= 0x01;这里的PB0为DO,那么改成现在应为PB3改为0x08 recdata |= 0x0001; else recdata &= 0xfffe; recdata <<= 1;//接收上次转换结果 PORTB |= 0B00000010;//时钟上升沿,这里是时钟动作,以前的时钟是PB2,现在为PB1,0B00000100改为0B00000010 NOP();NOP();NOP();NOP();//以前晶体8M PORTB &= 0B11111101;//时钟下降沿,同上0B11111011改为0B11111101 NOP();NOP();NOP();NOP(); } // PORTB |= 0B00000010;//片选禁止(可选) NOP();NOP();NOP();NOP(); recdata >>= 1; recdata &= 0x0fff;//截取低12位 return(recdata); } //********************************************************************* void main(void){ port_init(); while(1){ zhuanhuan[1]=tlc2543(0b00000000);//采到一个十二位的值,第0通道,12位选择,高位在前,无极性. PORTC = zhuanhuan[1]>>8;//高八位从C输出 PORTD = zhuanhuan[1]&0x00ff; //低四位从D输出 delay(65535);//延时 delay(65535); delay(65535); delay(65535); } } 搞了几天一直不成功,每次输出值都不一样.希望能得到帮助,谢谢! TLC2543输出到PC和PD口.rar (187.68 KB, 下载次数: 9)

最新回复

这个你总要说下有什么问题,啥现象吧。做好吧PROTEUS的图放出下?  详情 回复 发表于 2012-7-11 15:48
点赞 关注
 

回复
举报

1412

帖子

15

TA的资源

版主

沙发
 
这个你总要说下有什么问题,啥现象吧。做好吧PROTEUS的图放出下?
 
个人签名https://bbs.eeworld.com.cn/thread-471646-1-1.html
欢迎加入我的团队
 
 

回复

9

帖子

0

TA的资源

一粒金砂(中级)

板凳
 

多谢这位朋友,附件里面有,采样得到的数完全不对!

多谢这位朋友,附件里面有,采样得到的数完全不对!
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/6 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表