单片机/MCU论坛
直播中

wq

8年用户 224经验值
擅长:电源/新能源 嵌入式技术 接口/总线/驱动
私信 关注
[问答]

TLC2543芯片采集电压总是4.99V

我通过2543采集电压,然后通过串口发送到电脑上,一直显示4.9V左右,已经确定2543那边的A1端口是有电压的,求解原因,感激不尽。使用proteus调试,程序是可以运行的,可以正常采集电压。
uint read2543(uchar port) //读2543端口号的直
{
        uint dat=0;        //保留输出结果
        uchar i;
        cs=1;
        eoc=1;
        clock=0;
        cs=0;
        port<<=4;
        for(i=0;i<8;i++) //读高8位
        {
                if(out)
                        dat|=0x01;        //存放数据高-低
                in=(bit)(port&0x80); //高位先输入
                clock=1;
                _nop_();
                _nop_();
                _nop_();
                clock=0;
                _nop_();
                _nop_();
                _nop_();
                port<<=1;
                dat<<=1;
        }
        for(i=8;i<12;i++)
        {
                if(out)
                        dat|=0x01;
                clock=1;
                _nop_();
                _nop_();
                _nop_();
                clock=0;
                _nop_();
                _nop_();
                _nop_();
                dat<<=1;
        }
        cs=1;//开始转换
        while(!eoc); //等待转换完成
        dat>>=1;/////?
        return dat;
}

#include        "STC15Fxxxx.H"
#include  "ad2543.h"

#define MAIN_Fosc                11059200L        //定义主时钟
#define        BaudRate1                9600UL        //选择波特率
#define        timer2_Reload        (65536UL -(MAIN_Fosc / 4 /12 / BaudRate1))                //Timer 2 重装值, 对应300KHZ

***it RS485_enable = P3^5;
***it LED = P5^5;

u8 TX1_Buffer[8] = "abcdax";

void usart_init()
{
                       
                        SCON  = (SCON & 0x3f) | 0x40                        ;        //工作方式1   8位可变波特率
                        REN = 0;                                        //禁止接收                                        PCON不用管,自动置0
                        S1_USE_P36P37();                //UART1 使用P36 P37口
       
                        AUXR &= ~(1<<4);        //Timer stop                波特率使用Timer2产生
                        AUXR |= 0x01;                                // 选择定时器2作为波特率发生器       
                        AUXR |=  (0<<2);        //Timer2 set as 12T mode
                       
                        TH2 =        (u8)(Timer2_Reload >> 8);
                        TL2 = (u8)Timer2_Reload;
                        AUXR |=  (1<<4);        //Timer run enable
                        ES  = 1;        //允许串口中断

                        EA = 1;                //允许全局中断
}

void main ()
{
                u8 i = 0,j=0;
                long temp = 0 ;
                uint result = 0;
                P3M0 =  0X20;                                //强制推挽输出
                P3M1 =         0X00;
                RS485_enable = 1;
                LED = 0;
                       
                usart_init();
       
                while(1)
                {
                        i = 0;
                        //result = 0;
                       
                        {
                                       
                                AN3(1);                                //Y1这是一个通道选择,不影响,因在2543端口测到电压
                                j++;
                                if(j >= 7)
                                        j=0;
                                result = read2543(1);
                                temp = result;
                                //temp =(uint)(result*1.0/4095*5000);                //        此指令不再使用,因测试时无法进行运算
                                temp = (temp*122/100);                                                //
                               
                                delay_ms(100);

TX1_Buffer[0] = (u8)(temp>>24);
                                TX1_Buffer[1] = (u8)(temp>>16);
                                TX1_Buffer[2] = (u8)(temp>>8);
                                TX1_Buffer[3] = (u8)(temp);

                        }

while(TX1_Buffer[i] != 'x')
                        {
                                SBUF = TX1_Buffer[i];        //发一个字节
                                while(!TI);
                                        TI=0;
                                i++;
                               
                        }
                }
                       
}



  • 通道选择
  • 2543
已退回20积分

回帖(10)

chenwei6991627

2016-12-7 13:23:46
protues可以不代表实物就可以的
举报

一个人

2016-12-7 21:24:16
程序不对                                      
举报

wq

2016-12-8 09:14:13
引用: chenwei6991627 发表于 2016-12-7 13:23
protues可以不代表实物就可以的

昨天查出两个硬件问题,CLOCK的引脚电平输出不够,必须使用强推挽输出,还有一个是芯片的VCC和GND那里短路了,然而现在问题还是没有解决。。。
举报

wq

2016-12-8 09:14:48

请问程序那里错了,就是采集的程序那里,帮忙解决一下吧
举报

一个人

2016-12-8 09:55:41
引用: 小可乐cc 发表于 2016-12-8 09:14
请问程序那里错了,就是采集的程序那里,帮忙解决一下吧

你是要做什么    做设计还是           
举报

一个人

2016-12-8 09:55:41
引用: 小可乐cc 发表于 2016-12-8 09:14
请问程序那里错了,就是采集的程序那里,帮忙解决一下吧

你是要做什么    做设计还是           
举报

一个人

2016-12-8 09:55:48
引用: 小可乐cc 发表于 2016-12-8 09:14
请问程序那里错了,就是采集的程序那里,帮忙解决一下吧

你是要做什么    做设计还是           
举报

wq

2016-12-8 10:48:54
引用: ST_Lover 发表于 2016-12-8 09:55
你是要做什么    做设计还是

做的设计,就是一个电压采集,通过串口发送到电脑上
举报

wq

2016-12-8 10:49:49
引用: 小可乐cc 发表于 2016-12-8 10:48
做的设计,就是一个电压采集,通过串口发送到电脑上

就是做的很简单的一个,但是现在做的东西还是有错误,收到的数据一直是错误的
举报

一个人

2016-12-8 11:05:01
引用: 小可乐cc 发表于 2016-12-8 10:49
就是做的很简单的一个,但是现在做的东西还是有错误,收到的数据一直是错误的

我这里有2543 的程序  绝对可用              1002925094                 
举报

更多回帖

发帖
×
20
完善资料,
赚取积分