久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费
標(biāo)題:
為什么我在keil上調(diào)式?jīng)]出問(wèn)題,然而在proteus中卻出現(xiàn)問(wèn)題呢?
[打印本頁(yè)]
作者:
50527978
時(shí)間:
2015-6-15 23:26
標(biāo)題:
為什么我在keil上調(diào)式?jīng)]出問(wèn)題,然而在proteus中卻出現(xiàn)問(wèn)題呢?
我這個(gè)是實(shí)現(xiàn)步進(jìn)電機(jī)工作時(shí)當(dāng)溫度過(guò)高就停止運(yùn)行與報(bào)警
我單獨(dú)完成步進(jìn)電機(jī)或DS18B20的超溫報(bào)警時(shí)是沒(méi)問(wèn)題的,但是當(dāng)我把這兩個(gè)合在一起仿真的時(shí)候我的溫度明明沒(méi)超過(guò)溫度上限值就直接電機(jī)停止報(bào)警了呢?
我把源程序仔細(xì)看了幾遍也沒(méi)發(fā)現(xiàn)我哪里會(huì)出錯(cuò)
#include <reg51.h>
#include<math.h>
#include<INTRINS.H>
#define uchar unsigned char
#define uint unsigned int
sbit P1_0=P1^0;
sbit P1_1=P1^1;
sbit P1_2=P1^2;
sbit P1_3=P1^3;
sbit P1_4=P1^4;
sbit P1_5=P1^5;
sbit P1_6=P1^6;
sbit P1_7=P1^7;
sbit P3_0=P3^0;
sbit DQ=P2^7; // DS18b20 端口
sbit m_switch=P3^1;
sbit Forward=P3^2; //正轉(zhuǎn)鍵位
sbit Reversal=P3^3; //逆轉(zhuǎn)鍵位
sbit F_led=P2^0;
sbit R_led=P2^1;
sbit Alarm_LED1=P2^2;
sbit buzzer=P2^3;
int temp;
char TempH,TempL;
char temp_max=30; //定義超溫報(bào)警數(shù)值
uchar temporary[8];
uchar stop_turing;
uchar k=0;
uchar num,flg,RRR,check; //num為步數(shù);flg為正(0)逆(1)轉(zhuǎn);RRR用于調(diào)速控制
uchar output[2][4]={{0x06,0x03,0x09,0x0c},{0x09,0x03,0x06,0x0c}}; //采用 四相雙四拍控制
//給個(gè)脈沖數(shù)組,正:1100(BA)-0110(DA)-0011(DC)-1001(BC) 逆BA-BC-DC-DA
//由于proteus中沒(méi)三相步進(jìn)電機(jī),所以用了個(gè)四相進(jìn)行仿真
//如果換成三相的電機(jī),那數(shù)組改成 uchar output[2][3]={{0x03,0x05,0x06},{0x05,0x03,0x06}}
void rotation(void);
void step(void);
void handle_Temperature();
void delay1(uint t);
void delay(uint t);
void alarm(void);
void main()
{
uchar i,j,n;
TMOD|=0x01;//定時(shí)器設(shè)置
TH0=0xef;//裝初始值
TL0=0xf0;
EA=1;// 開(kāi)總中斷
ET0=1;//允許定時(shí)器0中斷
TR0=1;//開(kāi)定時(shí)器0中斷
RRR=25; //設(shè)置每步延時(shí)250ms
check=0;
stop_turing=0;
while(1)
{
if(m_switch==0) //總開(kāi)關(guān)
{
if(P1!=0xff||P3_0!=1) //判斷是否有步數(shù)按下
{
step();
rotation();
if(flg==0) //電機(jī)運(yùn)轉(zhuǎn)時(shí)有正逆轉(zhuǎn)的指示燈指示
{
F_led=0; //正轉(zhuǎn)燈
}
else
{
R_led=0; //逆轉(zhuǎn)燈
}
P0=0x0c; //給電機(jī)打開(kāi)起始位BA,如果在三相單三中則改為P0=0x06;
for(j=0;j<num;j++)
{
if(stop_turing==1)
{
break;
}
for(i=0;i<=3;i++) //給P0口輸出轉(zhuǎn)動(dòng),如果在三相單三中則改為for(i=0;i<=2;i++)
{
P0=output[flg][i];
for(n=0;n<RRR;n++) //延時(shí)
{
delay(10);
}
if(check==1)
{
handle_Temperature();// 處理溫度:
}
if(stop_turing==1)
{
break;
}
}
}
F_led=1; //關(guān)燈
R_led=1;
P0=0x0f; //給P0口復(fù)位
}
}
}
}
void step(void) //判斷步數(shù)
{
if(P1_0==0) //在四相中為24步,如果換成三相中則為18步
{
num=6;
}
else if(P1_1==0) //在四相中為20步,如果換成三相中則為15步
{
num=5;
}
else if(P1_2==0) //在四相中為16步,如果換成三相中則為12步
{
num=4;
}
else if(P1_3==0) //在四相中為12步,如果換成三相中則為9步
{
num=3;
}
else if(P1_4==0) //在四相中為8步,如果換成三相中則為6步
{
num=2;
}
else if(P1_5==0) //在四相中為4步,如果換成三相中則為3步
{
num=1;
}
else if(P1_6==0) //在四相中為28步,如果換成三相中則為21步
{
num=7;
}
else if(P1_7==0) //在四相中為32步,如果換成三相中則為24步
{
num=8;
}
else if(P3_0==0) //在四相中為36步,如果換成三相中則為27步
{
num=9;
}
}
void rotation(void) //判斷正逆轉(zhuǎn)
{
if(Forward==0) //正轉(zhuǎn)
{
flg=0;
}
else if(Reversal==0) //逆轉(zhuǎn)
{
flg=1;
}
}
void Init_DS18B20(void)
{
unsigned char x=0;
DQ = 1; //DQ復(fù)位
delay1(8); //稍做延時(shí)
DQ = 0; //單片機(jī)將DQ拉低
delay1(80); //精確延時(shí) 大于 480us
DQ = 1; //拉高總線
delay1(14);
x=DQ; //稍做延時(shí)后 如果x=0則初始化成功 x=1則初始化失敗
delay1(20);
}
uchar ReadOneChar(void) // DS18B20讀一個(gè)字節(jié)
{
uchar m=0;
uchar dat = 0;
for (m=8;m>0;m--)
{
DQ = 0; // 給脈沖信號(hào)
dat>>=1;
DQ = 1; // 給脈沖信號(hào)
if(DQ)
dat|=0x80;
delay1(5);
}
return(dat);
}
void WriteOneChar(uchar dat) //DS18B20寫一個(gè)字節(jié)
{
uchar m=0;
for (m=8; m>0; m--)
{
DQ = 0;
DQ = dat&0x01;//取低位
delay1(5);
DQ = 1;
dat>>=1;//左移
}
delay1(5);
}
uint ReadTemperature(void) //DS18B20讀取溫度
{
uchar a=0;
uint b=0;
uint t=0;
Init_DS18B20();//DS18B20初始化
WriteOneChar(0xCC); // 跳過(guò)讀序號(hào)列號(hào)的操作
WriteOneChar(0x44); // 啟動(dòng)溫度轉(zhuǎn)換
delay1(200); //延時(shí)以求信號(hào)的穩(wěn)定
Init_DS18B20(); //DS18B20再次初始化
WriteOneChar(0xCC); //跳過(guò)讀序號(hào)列號(hào)的操作
WriteOneChar(0xBE); //讀取溫度寄存器
a=ReadOneChar(); //低位
b=ReadOneChar(); //高位
b<<=8; //b左移8位
t=a+b; //把a(bǔ)與b結(jié)合,放在16位的t中
return(t);
}
void handle_Temperature()
{
check=0; //清標(biāo)志位
temp=ReadTemperature();//讀取溫度值
if(temp&0x8000)
{
temporary[0]=0xb0;//負(fù)號(hào)標(biāo)志
temp=~temp; // 取反加1
temp +=1;
}
TempH=temp>>4; //由權(quán)重表知移4位就是整數(shù)位
TempL=temp&0x0F;
TempL=TempL*6/10;//小數(shù)近似處理
alarm(); //判斷是否需要報(bào)警
}
void alarm(void)
{
if(TempH>=temp_max)//當(dāng)溫度高于設(shè)置的最高溫報(bào)警
{
stop_turing=1;
buzzer=0;
Alarm_LED1=0;
}
else//報(bào)警解除
{
buzzer=1;
Alarm_LED1=1;
}
}
//延時(shí)函數(shù)
void delay1(uint t)//短延時(shí)函數(shù)
{
while(t--);
}
void delay(uint t) //長(zhǎng)延時(shí)函數(shù)
{
while(t--)
{
//大致延時(shí)1mS
delay1(245);
delay1(245);
}
}
void timer0(void) interrupt 1 using 1
{
TH0=0xef;//定時(shí)器重裝值
TL0=0xf0;
k++;
if (k==50)
{
k=0;
check=1;//標(biāo)志位有效,開(kāi)始測(cè)溫
}
}
復(fù)制代碼
課程設(shè)計(jì).rar
2015-6-15 23:21 上傳
點(diǎn)擊文件名下載附件
76.07 KB, 下載次數(shù): 4
作者:
zhanghanli007
時(shí)間:
2015-7-13 17:52
應(yīng)該是連線問(wèn)題,或者沒(méi)有接上拉電阻之內(nèi)的
作者:
dingmingzhou
時(shí)間:
2015-7-13 19:55
給您回答問(wèn)題,還得俺花錢呀
作者:
liudeyi
時(shí)間:
2015-7-13 23:47
看了一下,是連接問(wèn)題吧
作者:
DIY小炫
時(shí)間:
2015-7-15 17:24
仿真圖有問(wèn)題,仔細(xì)查看一下
作者:
時(shí)光溢彩
時(shí)間:
2015-7-26 22:09
DS18B20對(duì)時(shí)序有很高的要求,你先寫好溫度,然后再一步一步的往里面加,這東西我也寫過(guò)。
作者:
h1314258
時(shí)間:
2015-7-27 10:32
程序沖突,18B20時(shí)間被占用了
作者:
h1314258
時(shí)間:
2015-7-27 10:40
調(diào)整電機(jī)行動(dòng)時(shí)間在18B20外就可以啦
作者:
h1314258
時(shí)間:
2015-7-27 10:41
就這樣啦
歡迎光臨 (http://www.zg4o1577.cn/bbs/)
Powered by Discuz! X3.1
主站蜘蛛池模板:
国产欧美精品一区二区
|
久久里面有精品
|
精品久久久久一区二区国产
|
色综合久
|
久久精品色欧美aⅴ一区二区
|
h视频免费观看
|
亚洲欧美一区二区三区1000
|
亚洲国产精品福利
|
h视频在线播放
|
亚洲精品一二区
|
欧美日韩中文国产一区发布
|
国产精品1区2区
|
成人毛片在线视频
|
亚洲www啪成人一区二区麻豆
|
欧美精品91爱爱
|
91视视频在线观看入口直接观看
|
欧美日韩精品一区二区三区视频
|
欧美视频第二页
|
嫩草视频在线免费观看
|
国产精品久久久久久久久
|
精品不卡
|
成人免费视频在线观看
|
精品99在线
|
伊人精品在线
|
久久高清
|
日韩欧美国产精品一区二区三区
|
91av视频
|
欧美日韩高清免费
|
av男人天堂影院
|
国产偷录视频叫床高潮对白
|
成年无码av片在线
|
欧美一区二区大片
|
亚洲精品一区中文字幕乱码
|
国产在线观看一区二区
|
久久精品亚洲精品国产欧美kt∨
|
亚洲一区二区三区在线
|
av电影一区
|
日韩亚洲视频在线
|
成人午夜激情
|
亚洲精品电影网在线观看
|
亚洲午夜在线
|