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);
}
一般像这种情况把延时函数改成STC8A8K64D4适配的看看 xxxevery 发表于 2024-6-17 16:32
一般像这种情况把延时函数改成STC8A8K64D4适配的看看
改了延时了,数据只是波动的慢一点,但还是在波动的 xxxevery 发表于 2024-6-17 16:32
一般像这种情况把延时函数改成STC8A8K64D4适配的看看
单片机与TLC1549连接方式都是一样的 STC8A8K64D4自带ADC为什么还要用外置的呢? STC8A8K64D4的速度比STC89C51快多了,你把ADConvert函数中模拟CK时钟的程序中也加上几个_nop_()试试呢 wnagming 发表于 2024-6-17 16:56
除了延时,软件方面应该没有什么需要注意的吧
好的,我试一下,谢谢了 xxxevery 发表于 2024-6-17 21:47
STC8A8K64D4的速度比STC89C51快多了,你把ADConvert函数中模拟CK时钟的程序中也加上几个_nop_()试试呢 ...
好的,我试一下,谢谢了 soma 发表于 2024-6-17 18:00
STC8A8K64D4自带ADC为什么还要用外置的呢?
自带是12位的,占用12个IO口,这个只用1个IO口 欢迎哈哈哈3 发表于 2024-6-19 18:07
好的,我试一下,谢谢了
可以了,{:5_332:}谢谢了
页:
[1]
2