欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標題:
求助!求助!單片機串口RXD可以直接連傳感器輸出的TXD嗎?如圖
[打印本頁]
作者:
duzeshuai
時間:
2017-5-6 21:23
標題:
求助!求助!單片機串口RXD可以直接連傳感器輸出的TXD嗎?如圖
求助!單片機串口RXD可以直接連傳感器輸出的TXD嗎?如圖
1494068501049.jpg
(5.79 MB, 下載次數(shù): 93)
下載附件
2017-5-6 21:23 上傳
作者:
松在常綠
時間:
2017-5-6 21:26
電平一樣可以呀
作者:
ahshmj
時間:
2017-5-6 21:33
不知道你是什么傳感器,輸入輸出電平是多少?
作者:
a639157781
時間:
2017-5-6 21:39
如果傳感器是TTL電平的就可以
作者:
duzeshuai
時間:
2017-5-6 21:45
傳感器是TTL的電平嗯,那難道是我這程序有錯誤?大家?guī)兔纯垂?br /> #include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
void senddata(uchar dat);
uchar cal [7]= {0};// cal[0]:起始位 0xAA
// cal[1] : Vout(H)
// cal[2] : Vout(L)
// cal[3] : Vref(H)
// cal[4] : Vref(L)
// cal[5] : 校驗位
// cal[6] : 結束位 OxFF
float Vo;
int i=0;
sbit rs=P1^0;
sbit lcden=P2^5;
sbit rw=P1^1;
sbit voice=P2^3;
sbit light=P2^2;
uchar buf,sum,count;
uchar num,TV,a,b,c;
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void write_com(uchar com)
{
rs=0;
rw=0;
P0=com;
delay(5);
lcden=1;
delay(5);
lcden=0;
}
void write_data(uchar date)
{
rs=1;
rw=0;
P0=date;
delay(5);
lcden=1;
delay(5);
lcden=0;
}
void init()
{
lcden=0; //使能端為低電平
write_com(0x38);
/*顯示模式設置 00111000 設置16*2顯示 5*7點陣 8位數(shù)據(jù)接口*/
write_com(0x0f);
/*顯示開關及光標設置 00001DCB
D=1,開顯示 D=0, 關顯示
C=1,顯示光標 C=0,不顯示光標
B=1,光標閃爍 B=0,光標不閃爍*/
write_com(0x06);//地址指針自動+1且光標+1,寫字符屏幕不會移動
write_com(0x01);
write_com(0x80);
write_data ('P');
write_com (0x81);
write_data ('M');
write_com (0x82);
write_data ('2');
write_com (0x83);
write_data ('.');
write_com (0x84);
write_data ('5');
write_com (0x85);
write_data (':');
write_com (0xcb);
write_data ('m');
write_com (0xcc);
write_data ('g');
write_com (0xcd);
write_data ('/');
write_com (0xce);
write_data ('m');
write_com (0xcf);
write_data ('3');
}
void warn()
{
if (num>=200)
{
voice=0;
light=0;
}
}
void main()
{
init();
SCON=0x50; //設定串口工作方式
PCON=0x00; //波特章不倍增
TMOD=0x20; //定時器1工作于8位自動重載橫式,用于產(chǎn)生波特率
EA=1;
ES = 1; //允許串口中斷
TL0=0x80;
TH0=0xFB;
TR0=1;
num=TV;
a= TV /100+0x30;
TV %=100;
b= TV /10+0x30;
TV %=10;
c= TV +0x30;
write_com (0x88);
write_data (a);
write_com (0x89);
write_data (b);
write_com (0x8a);
write_data (c);
//warn();
while(1);
}
void serial() interrupt 4
{
ES = 0; //關閉串行中斷
RI = 0; //清除串行接受標志位
buf = SBUF; //從串口緩沖區(qū)取得數(shù)據(jù)
senddata(buf);
ES = 1; //允許串口中斷
}
void senddata(uchar dat)
{if(dat==170) //判斷起始位 OxAA, (0xAA==l70〉
{
i=0;
cal[i]=dat;
}
else
{
i=i+1;
cal[i]=dat;
}
if(i==6)
{
sum= cal[1]+cal[2]+cal[3]+cal[4];//sum=Vout(M)+Vout(L)+Vref(M)+Vref(L)
}
if (sum == cal [5] && cal[6]==255) //sum與校驗 相同 &&最后一位是 OxFF 結束位
{
for (i=0; i <=6; i++) //此處for循環(huán)是顯示出所有數(shù)據(jù),即cal [7]中的數(shù)據(jù)
{
SBUF=cal[i];
while(!TI);
TI=0;
}
Vo=(cal[1]*256+cal[2])/2048*5;
TV=3000* Vo;
}
}
作者:
duzeshuai
時間:
2017-5-6 21:50
輸出是TTL的電平,那同志們能看看我這程序是不是有什么問題?
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
void senddata(uchar dat);
uchar cal [7]= {0};// cal[0]:起始位 0xAA
// cal[1] : Vout(H)
// cal[2] : Vout(L)
// cal[3] : Vref(H)
// cal[4] : Vref(L)
// cal[5] : 校驗位
// cal[6] : 結束位 OxFF
float Vo;
int i=0;
sbit rs=P1^0;
sbit lcden=P2^5;
sbit rw=P1^1;
sbit voice=P2^3;
sbit light=P2^2;
uchar buf,sum,count;
uchar num,TV,a,b,c;
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void write_com(uchar com)
{
rs=0;
rw=0;
P0=com;
delay(5);
lcden=1;
delay(5);
lcden=0;
}
void write_data(uchar date)
{
rs=1;
rw=0;
P0=date;
delay(5);
lcden=1;
delay(5);
lcden=0;
}
void init()
{
lcden=0; //使能端為低電平
write_com(0x38);
/*顯示模式設置 00111000 設置16*2顯示 5*7點陣 8位數(shù)據(jù)接口*/
write_com(0x0f);
/*顯示開關及光標設置 00001DCB
D=1,開顯示 D=0, 關顯示
C=1,顯示光標 C=0,不顯示光標
B=1,光標閃爍 B=0,光標不閃爍*/
write_com(0x06);//地址指針自動+1且光標+1,寫字符屏幕不會移動
write_com(0x01);
write_com(0x80);
write_data ('P');
write_com (0x81);
write_data ('M');
write_com (0x82);
write_data ('2');
write_com (0x83);
write_data ('.');
write_com (0x84);
write_data ('5');
write_com (0x85);
write_data (':');
write_com (0xcb);
write_data ('m');
write_com (0xcc);
write_data ('g');
write_com (0xcd);
write_data ('/');
write_com (0xce);
write_data ('m');
write_com (0xcf);
write_data ('3');
}
void warn()
{
if (num>=200)
{
voice=0;
light=0;
}
}
void main()
{
init();
SCON=0x50; //設定串口工作方式
PCON=0x00; //波特章不倍增
TMOD=0x20; //定時器1工作于8位自動重載橫式,用于產(chǎn)生波特率
EA=1;
ES = 1; //允許串口中斷
TL0=0x80;
TH0=0xFB;
TR0=1;
num=TV;
a= TV /100+0x30;
TV %=100;
b= TV /10+0x30;
TV %=10;
c= TV +0x30;
write_com (0x88);
write_data (a);
write_com (0x89);
write_data (b);
write_com (0x8a);
write_data (c);
//warn();
while(1);
}
void serial() interrupt 4
{
ES = 0; //關閉串行中斷
RI = 0; //清除串行接受標志位
buf = SBUF; //從串口緩沖區(qū)取得數(shù)據(jù)
senddata(buf);
ES = 1; //允許串口中斷
}
void senddata(uchar dat)
{if(dat==170) //判斷起始位 OxAA, (0xAA==l70〉
{
i=0;
cal[i]=dat;
}
else
{
i=i+1;
cal[i]=dat;
}
if(i==6)
{
sum= cal[1]+cal[2]+cal[3]+cal[4];//sum=Vout(M)+Vout(L)+Vref(M)+Vref(L)
}
if (sum == cal [5] && cal[6]==255) //sum與校驗 相同 &&最后一位是 OxFF 結束位
{
for (i=0; i <=6; i++) //此處for循環(huán)是顯示出所有數(shù)據(jù),即cal [7]中的數(shù)據(jù)
{
SBUF=cal[i];
while(!TI);
TI=0;
}
Vo=(cal[1]*256+cal[2])/2048*5;
TV=3000* Vo;
}
}
作者:
duzeshuai
時間:
2017-5-6 21:58
ok 估計是程序的問題了 我再看看
作者:
blackmax
時間:
2017-5-6 22:28
一般是可以的 具體你可以發(fā)一下兩個的型號
作者:
HUANGHFS
時間:
2017-5-6 22:33
可以,但要注意串口電平是否是相同邏輯電平,如不同,要使用電平轉換芯片MAX232等。
作者:
jizhonghuoli
時間:
2017-5-7 09:52
可以增加光耦隔離
歡迎光臨 (http://www.raoushi.com/bbs/)
Powered by Discuz! X3.1