欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標(biāo)題:
PCF8591+單片機測光強程序哪里有問題,串口得到的數(shù)據(jù)全是255
[打印本頁]
作者:
892494590
時間:
2019-4-24 16:02
標(biāo)題:
PCF8591+單片機測光強程序哪里有問題,串口得到的數(shù)據(jù)全是255
大家好,我是個小白,然后這個問題也是問了很多次了,我這邊這個程序?qū)懲曛蟠诘玫降臄?shù)據(jù)一直是255,另外我使用的芯片是PCF8591,一路輸入模擬信號用來測光強,請大家看看我的程序看看我的問題究竟出在哪里,謝謝各位大佬了,各位覺得有任何問題都可以提出來,我這邊真的想不出來辦法了。
單片機源程序如下:
#include "reg52.h"
#include <intrins.h>
#define unchar unsigned char
#define uint unsigned int
sbit scl=P2^1;
sbit sda=P2^0;
unchar dat[4]={'0','0','0','0'};
void delay_4us()
{
_nop_();
_nop_();
_nop_();
_nop_();
}
void delay(uint i)
{
while(i--);
}
void i2c_init()
{
scl=0;
sda=1;
delay_4us();
scl=1;
delay_4us();
scl=0;
}
void i2c_start()
{
scl=0;
delay_4us();
sda=1;
delay_4us();
scl=1;
delay_4us();
sda=0;
delay_4us();
scl=0;
}
void i2c_stop()
{
scl=0;
delay_4us();
sda=0;
delay_4us();
scl=1;
delay_4us();
sda=1;
delay_4us();
scl=0;
delay_4us();
}
void i2c_ack(unchar ackbit)
{
if(!ackbit)
{
sda=0;
}
else
{
sda=1;
}
delay_4us();
scl=1;
delay_4us();
scl=0;
delay_4us();
sda=1;
delay_4us();
scl=1;
delay_4us();
scl=0;
}
bit i2c_waitack()
{
sda=1;
delay_4us();
scl=1;
delay_4us();
if(sda)
{
scl=0;
i2c_stop();
return 0;
}
else
{
scl=0;
return 1;
}
}
void i2c_send(unchar byte)
{
unchar i;
for(i=0;i++;i<8)
{
if(byte&0x80)
{
sda=1;
}
else
{
sda=0;
}
delay_4us();
byte<<=1;
delay_4us();
scl=0;
}
}
unchar i2c_receive()
{
unchar dat,i;
for(i=0;i<8;i++)
{
scl=1;
delay_4us();
dat <<=1;
if(sda)
{
dat|=0x01;
}
scl=0;
delay_4us();
}
return dat;
}
void ustart_init()
{
PCON= 0x80; //????????SMOD
SCON= 0x50; //8???,?????
TMOD= 0x20; //?????1?8???????
TL1 = 0xF3; //??????
TH1 = 0xF3;
ET1 = 0; //?????1??
TR1 = 1; //?????1
ES=1;
EA=1;
}
void ustart_send(unchar c)
{
SBUF=c;
while(!TI);
TI=0;
}
void main()
{
unchar temp[12] ="hguangqiang:";
unchar i,j;
unchar shuju;
while(1)
{
i2c_start();
i2c_send(0x90);
i2c_waitack();
i2c_send(0x00);
i2c_waitack();
i2c_send(0x91);
i2c_waitack();
shuju=i2c_receive();
i2c_ack(1);
i2c_stop();
dat[0]='0'+shuju/1000;
dat[1]='0'+shuju%1000/100;
dat[2]='0'+shuju%100/10;
dat[3]='0'+shuju%10;
ustart_init();
for(i=0;i<12;i++)
{
ustart_send(temp[i]);
}
delay(10000);
for(j=0;j<4;j++)
{
ustart_send(dat[j]);
}
delay(10000);
}
}
void zhognduan() interrupt 4
{
unchar receiveData;
RI=0;
receiveData=SBUF;
SBUF=receiveData;
while(!TI);
TI=0;
}
復(fù)制代碼
作者:
longqishi57777
時間:
2019-4-30 09:12
感覺程序上沒大問題,可能是硬件上的問題,是不是用光敏電阻和固定電阻的分壓啊,建議使用下vcc和GND間用個藍白可調(diào)電阻來分壓當(dāng)做模擬輸入量,這幾天我也在研究這個芯片。。。
程序上感覺dat[4]沒必要,輸出數(shù)字量最大為255,用dat[3]不就可以了?
作者:
bigger123
時間:
2020-11-29 19:47
樓主解決了嗎?我也是這樣的問題,頭都快炸了
作者:
佚名123
時間:
2021-8-25 10:13
樓主解決了碼?我也遇到了同樣的問題,求解答
歡迎光臨 (http://m.raoushi.com/bbs/)
Powered by Discuz! X3.1