欢迎哈哈哈3 发表于 2024-6-17 16:23:36

TLC1549 AD转换问题

大佬们,我用STC89C51单片机读取TLC1549的数据很稳定,但是,我换成STC8A8K64D4单片机用同样的程序读取TLC1549的数据,就一直不停的变化呢,能不能帮我看看是哪儿的问题,谢谢了

主程序

#include "main.h"
#include <intrins.h>
#include "lcd1602.h"
#include "tlc1549.h"
#include "math.h"
#defineSUM50
#defineVREF4933
unsigned char aa={0,0,0,0,0,0,0};
void setport()
{
      P0M1=0X00;P0M0=0X00;
      P2M1=0X00;P2M0=0X00;
      P1M1=0X00;P1M0=0X00;
      P3M1=0X00;P3M0=0X00;
}
void delay(unsigned long t)
{
      while(t--);
}
void main()
{
      unsigned char i=0;
unsigned long int temp1,buff;
      setport();
      LCD_Initial();      
      i=SUM;
      temp1=0;
      CS = 1;
      for(;;)
      {
                  temp1+=ADConvert();               
            i--;      
                        if(i==0)
                        {
                        temp1=temp1/SUM;
                        temp1=temp1*VREF;
                        temp1=temp1/1024;
                        
                        buff=(temp1*100)/3271;
                         display(temp1,buff);
                        i=SUM;
                        temp1=0;
                        }
                        delay(100);
      }
}
void display(unsigned long int d,unsigned long int y)
{
      aa=d/1000;
      aa=d%1000/100;
      aa=d%100/10;
      aa=d%10;//电压值
      
      aa=y/100;
      aa=y%100/10;
      aa=y%10;//百分比
      
      Print(0,0,aa+'0');
      LCD_write(1,0,".");
      Print(2,0,aa+'0');
      Print(3,0,aa+'0');
      Print(4,0,aa+'0');
      LCD_write(5,0,"v");
      Print(2,1,aa+'0');
      Print(3,1,aa+'0');
      Print(4,1,aa+'0');
      LCD_write(5,1,"%");
}


TLC1549读数程序

#include "stc8.h"
#include "intrins.h"
//接口定义
sbit CS = P2^4;
sbit DA = P2^3;
sbit CK = P2^2;

//读取ADC结果函数
unsigned int ADConvert(void)
{
unsigned char ii;
unsigned int temp = 0;
CS = 0;   //开启控制电路,使能DA和CK IO引脚;
for(ii=0;ii<10;ii++)//采集10次 ,即10bit
{
    CK = 0;      
    temp <<= 1;
    if(DA) temp++;
    CK = 1;
}
CS = 1;
return(temp);
}

xxxevery 发表于 2024-6-17 16:32:44

一般像这种情况把延时函数改成STC8A8K64D4适配的看看

欢迎哈哈哈3 发表于 2024-6-17 16:42:47

xxxevery 发表于 2024-6-17 16:32
一般像这种情况把延时函数改成STC8A8K64D4适配的看看

改了延时了,数据只是波动的慢一点,但还是在波动的

欢迎哈哈哈3 发表于 2024-6-17 16:43:57

xxxevery 发表于 2024-6-17 16:32
一般像这种情况把延时函数改成STC8A8K64D4适配的看看

单片机与TLC1549连接方式都是一样的

soma 发表于 2024-6-17 18:00:52

STC8A8K64D4自带ADC为什么还要用外置的呢?

xxxevery 发表于 2024-6-17 21:47:59

STC8A8K64D4的速度比STC89C51快多了,你把ADConvert函数中模拟CK时钟的程序中也加上几个_nop_()试试呢

欢迎哈哈哈3 发表于 2024-6-19 18:07:17

wnagming 发表于 2024-6-17 16:56
除了延时,软件方面应该没有什么需要注意的吧

好的,我试一下,谢谢了

欢迎哈哈哈3 发表于 2024-6-19 18:07:51

xxxevery 发表于 2024-6-17 21:47
STC8A8K64D4的速度比STC89C51快多了,你把ADConvert函数中模拟CK时钟的程序中也加上几个_nop_()试试呢 ...

好的,我试一下,谢谢了

欢迎哈哈哈3 发表于 2024-6-19 18:29:48

soma 发表于 2024-6-17 18:00
STC8A8K64D4自带ADC为什么还要用外置的呢?

自带是12位的,占用12个IO口,这个只用1个IO口

欢迎哈哈哈3 发表于 2024-6-19 18:31:09

欢迎哈哈哈3 发表于 2024-6-19 18:07
好的,我试一下,谢谢了

可以了,{:5_332:}谢谢了
页: [1] 2
查看完整版本: TLC1549 AD转换问题