欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

標(biāo)題: 修改個(gè)簡(jiǎn)單的下位機(jī)程序,接收串口發(fā)來(lái)的數(shù)據(jù),出了點(diǎn)問(wèn)題?? [打印本頁(yè)]

作者: botao258    時(shí)間: 2012-11-28 20:57
標(biāo)題: 修改個(gè)簡(jiǎn)單的下位機(jī)程序,接收串口發(fā)來(lái)的數(shù)據(jù),出了點(diǎn)問(wèn)題??

#include<reg52.h>
#include<math.h>
#define uchar unsigned char
#define uint unsigned int
sbit Cntl0 = P2^0;
sbit Cntl1 = P2^1;
uchar Buffer[2] = {0}; //從串口接收的數(shù)據(jù)
uint i,j,r0=1,r1=1;
/********************************************************************
* 名稱 : Delay_1ms()
* 功能 : 延時(shí)子程序,延時(shí)時(shí)間為 1ms * x
* 輸入 : x (延時(shí)一毫秒的個(gè)數(shù))
* 輸出 : 無(wú)
***********************************************************************/
void Delay_1ms(uint i)//1ms延時(shí)
{
uchar x,j;
for(j=0;j<i;j++)
for(x=0;x<=148;x++);
}
/********************************************************************
* 名稱 : Com_Int()
* 功能 : 串口中斷子函數(shù)
* 輸入 : 無(wú)
* 輸出 : 無(wú)
***********************************************************************/
void Com_Int(void) interrupt 4
{

EA = 0;
if(RI == 1) //當(dāng)硬件接收到一個(gè)數(shù)據(jù)時(shí),RI會(huì)置位
{
Buffer[0] = SBUF - 48; //這里減去48是因?yàn)閺碾娔X中發(fā)送過(guò)來(lái)的數(shù)據(jù)是該字符的ASCII碼,0的ASCII是48。
RI = 0;

}
EA = 1;
}
/********************************************************************
* 名稱 : Com_Init()
* 功能 : 串口初始化,晶振11.0592,波特率9600,使能了串口中斷
* 輸入 : 無(wú)
* 輸出 : 無(wú)
***********************************************************************/
void Com_Init(void)
{
TMOD = 0x20;
PCON = 0x00;
SCON = 0x50;
TH1 = 0xFd; //設(shè)置波特率 9600
TL1 = 0xFd;
TR1 = 1; //啟動(dòng)定時(shí)器1
ES = 1; //開串口中斷
EA = 1; //開總中斷
}
/********************************************************************
* 名稱 : Relay00()
* 功能 : 控制P2^0管腳電平,實(shí)現(xiàn)點(diǎn)奇數(shù)次為高,偶數(shù)次為低
* 輸入 : 無(wú)
* 輸出 : 無(wú)
***********************************************************************/
void Relay00()
{
r0++;
Cntl0=r0%2; //r0用于記調(diào)用本Relay()函數(shù)的次數(shù),將次數(shù)除以2的余數(shù)賦給對(duì)應(yīng)管腳
Delay_1ms(100);
}
/********************************************************************
* 名稱 :Relay01()
* 功能 : 控制P2^1管腳電平,實(shí)現(xiàn)點(diǎn)奇數(shù)次為高,偶數(shù)次為低
* 輸入 : 無(wú)
* 輸出 : 無(wú)
***********************************************************************/
void Relay01()
{
r1++;
Cntl1=r1%2; //r1用于記調(diào)用本Relay()函數(shù)的次數(shù),將次數(shù)除以2的余數(shù)賦給對(duì)應(yīng)管腳
Delay_1ms(100);
}

void main()
{
Delay_1ms(100);
Com_Init();//串口初始化
while(1)
{
switch(Buffer[0]) //括號(hào)里面的值為ASCII-48的值,減后即為從上位機(jī)發(fā)過(guò)來(lái)的十進(jìn)制數(shù)?
{
case 0: Relay00(); break;
case 1: Relay01(); break;
default:break;
}

}
}

想實(shí)現(xiàn)的功能是:電腦上位機(jī)軟件會(huì)發(fā)送0或1到單片機(jī)串口,當(dāng)發(fā)送奇數(shù)次0時(shí)p2^0端口輸出低電平,偶數(shù)次是輸出高電平;上位機(jī)發(fā)送1時(shí)同理控制p2^1端口;

上面這個(gè)程序編譯沒(méi)問(wèn)題,只是燒進(jìn)單片機(jī)后,單片機(jī)一上電,p2^0端口就不斷的低高低高低高重復(fù)變化,用上位機(jī)發(fā)送0,對(duì)單片機(jī)p2^0端電平無(wú)影響,直到上位機(jī)發(fā)送1后,p2^0口才會(huì)有變化,請(qǐng)問(wèn)程序哪里有問(wèn)題?


作者: as_733    時(shí)間: 2012-12-6 10:53
uchar Buffer[2] = {0}; //從串口接收的數(shù)據(jù) 你初始化的時(shí)候就是賦予0了 在main函數(shù)里switch(Buffer[0]) 程序一直進(jìn)入case 0: Relay00(); break; 所以你發(fā)送0是沒(méi)有用的




歡迎光臨 (http://www.raoushi.com/bbs/) Powered by Discuz! X3.1