![]() |
發(fā)布時間: 2019-12-15 10:22
正文摘要:我這做的是一個水泵自動控制上水的程序,能正常運行,就是有時會死機,高水位燈常亮,程序死在哪地方了,水放完了也不啟動水泵。 單片機源程序如下: #include <STC12C2052AD.H> #define uint unsigned int ... |
mtiaopi 發(fā)表于 2019-12-16 09:09 改用無刷水泵吧 |
mtiaopi 發(fā)表于 2019-12-16 13:41 由于不清楚你采用的水位開關(guān)具體工作形態(tài),程序只是完成控制邏輯關(guān)系,如果做實物還需要進一步完善 ![]() ![]()
|
wulin 發(fā)表于 2019-12-16 09:37 #include <STC12C2052AD.H> #define uint unsigned int #define uchar unsigned char uint temp; uchar a; sbit dishuiwei=P1^6; sbit gaoshuiwei=P1^5; sbit shuiliu=P1^7; sbit shuibeng=P1^0; sbit gaoled=P1^3; sbit diled=P1^2; sbit shuiliuled=P1^1; void delay(uint i); void main() { temp=0; shuiliuled=0; while(1) { while(dishuiwei==1) //檢測低水位開關(guān) { //啟動水泵 shuibeng=0; diled=dishuiwei; // gaoled=~gaoshuiwei; // 指示燈 while(gaoshuiwei==1) //檢測高水位開關(guān) { delay(4800); //延時3秒左右 diled=dishuiwei; gaoled=~gaoshuiwei; if(shuiliu==1) //檢測水位開關(guān),如果沒水流就關(guān)水泵 { //啟動定時器延時 shuibeng=1; TMOD=0x01; TL0=(65536-45000)/256; TH0=(65536-45000)%256; EA=1; ET0=1; TR0=1; while(temp<65000) //延時時間 { diled=dishuiwei; // gaoled=~gaoshuiwei; //指示燈顯示 } EA=0; //關(guān)定時器 temp=0; shuibeng=0; //啟動水泵 } } } shuibeng=1; diled=dishuiwei; gaoled=~gaoshuiwei; } } void delay(uint i) { uint y; for(i;i>0;i--) for(y=570;y>0;y--); } void time0() interrupt 1 { TL0=(65536-45000)/256; // TH0=(65536-45000)%256; // temp++; a++; if(a==5) // { // a=0; shuiliuled=~shuiliuled; //在檢測到?jīng)]水流時水流燈閃爍報警 } } |
沒有外圍電路很難說清楚,單片機程序跟實際項目的調(diào)試差別不少...尤其是你用了電磁閥相關(guān)的東西,或者隔離沒做好.. |
mtiaopi 發(fā)表于 2019-12-16 09:09 你把程序添加注釋和硬件圖發(fā)上來,可以幫你看看。因為你的程序有多處明顯不合理。 |
51hei**1140 發(fā)表于 2019-12-15 15:55 要怎么解決這種問題,由于空間太小,電源我用的是一個5V/2A的手機充電器,和單片機板子放在一個插座明盒里的,是不是電源引起的干擾。 |
51hei**1140 發(fā)表于 2019-12-15 15:55 這種情況怎么檢測,看門狗可以嗎 |
你好! 典型的電磁干擾造成的單片機程序跑飛 |
Powered by 單片機教程網(wǎng)