久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4237|回復: 1
收起左側

修改個簡單的下位機程序,接收串口發來的數據,出了點問題??

[復制鏈接]
ID:46838 發表于 2012-11-28 20:57 | 顯示全部樓層 |閱讀模式

#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}; //從串口接收的數據
uint i,j,r0=1,r1=1;
/********************************************************************
* 名稱 : Delay_1ms()
* 功能 : 延時子程序,延時時間為 1ms * x
* 輸入 : x (延時一毫秒的個數)
* 輸出 : 無
***********************************************************************/
void Delay_1ms(uint i)//1ms延時
{
uchar x,j;
for(j=0;j<i;j++)
for(x=0;x<=148;x++);
}
/********************************************************************
* 名稱 : Com_Int()
* 功能 : 串口中斷子函數
* 輸入 : 無
* 輸出 : 無
***********************************************************************/
void Com_Int(void) interrupt 4
{

EA = 0;
if(RI == 1) //當硬件接收到一個數據時,RI會置位
{
Buffer[0] = SBUF - 48; //這里減去48是因為從電腦中發送過來的數據是該字符的ASCII碼,0的ASCII是48。
RI = 0;

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

void main()
{
Delay_1ms(100);
Com_Init();//串口初始化
while(1)
{
switch(Buffer[0]) //括號里面的值為ASCII-48的值,減后即為從上位機發過來的十進制數?
{
case 0: Relay00(); break;
case 1: Relay01(); break;
default:break;
}

}
}

想實現的功能是:電腦上位機軟件會發送0或1到單片機串口,當發送奇數次0時p2^0端口輸出低電平,偶數次是輸出高電平;上位機發送1時同理控制p2^1端口;

上面這個程序編譯沒問題,只是燒進單片機后,單片機一上電,p2^0端口就不斷的低高低高低高重復變化,用上位機發送0,對單片機p2^0端電平無影響,直到上位機發送1后,p2^0口才會有變化,請問程序哪里有問題?

回復

使用道具 舉報

ID:43586 發表于 2012-12-6 10:53 | 顯示全部樓層
uchar Buffer[2] = {0}; //從串口接收的數據 你初始化的時候就是賦予0了 在main函數里switch(Buffer[0]) 程序一直進入case 0: Relay00(); break; 所以你發送0是沒有用的
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 波多野结衣中文字幕一区二区三区 | 欧美日韩在线一区二区三区 | 天天色综 | 一区二区在线免费观看 | 91亚洲视频在线 | www.日韩系列 | 国产精品有限公司 | 国产乱码高清区二区三区在线 | 毛片在线免费 | 狠狠操av | 日日天天| 1区2区3区视频 | 欧美日韩精品久久久免费观看 | 狠狠亚洲 | 91久久精品国产 | 97伦理| 在线免费观看黄色 | 久久精品一区 | 精品人伦一区二区三区蜜桃网站 | www.97国产 | 国产欧美日韩精品在线观看 | 91大片| 欧美 日韩 亚洲91麻豆精品 | 一区二区三区欧美在线 | 中文字幕一区二区三区乱码在线 | 中文字幕国产视频 | 欧美日韩亚洲视频 | 成人免费在线 | 欧美一区二区三区的 | 国产精品一区二区三级 | 97视频精品| 亚洲视频在线播放 | 国产精品1区2区3区 一区中文字幕 | 高清人人天天夜夜曰狠狠狠狠 | 成人免费观看男女羞羞视频 | 国产农村妇女精品一二区 | 日韩一区二区三区在线看 | 久久成人国产精品 | 成人免费在线 | 日日噜噜噜夜夜爽爽狠狠视频, | 在线欧美 |