亚洲春色中文字幕久久久-三上亚,一吻二脱三床四吻胸,国产真实伦对白视频全集,在线毛片观看,精品成品入口黄网,国产毛aⅴ片久久久,亚洲AV色香蕉一区二区三区老师,萧皇后A级艳片,色情日本视频更新,99久久亚洲精品日本无码
標題:
新手請教一下單片機串口PC通信控制燈的問題
[打印本頁]
作者:
LIPPPP
時間:
2017-6-18 00:56
標題:
新手請教一下單片機串口PC通信控制燈的問題
新手自學到串口通信那部分,用了教程里面的發送a數據的串口通信程序例子,串口調試助手可以顯示數據a。然后我自己嘗試寫了,當a = 0x01 led亮,但是串口調試助手有顯示接收到的數據,可是開發板的燈卻沒亮。 下面是程序,先謝謝論壇中的為我解答的人
#include <reg52.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
//#define LED P1
uchar dat,num = 0,a=0;
uchar ON = 0;
uchar OFF = 1;
sbit led1 = P1^0;
void initial_com();
void delay(unsigned int z); // 忽略這延時,本來還想用串口通信實現呼吸流水之類的,現在連燈亮都不行
void delay2(unsigned int t);
void initial_com(void)
{ SCON = 0x50;
TMOD|= 0x20; //設置波特率 9600
TH1 = 0xfd;
TL1 = 0xfd;
TR1 = 1;
REN = 1; //串口初始化
SM0 = 0;
SM1 = 1;
EA = 1;
ES = 0; //串口中斷開啟位
SBUF = 0x01; //開發板開關開啟接收到,01 FF數據
while(!TI);
TI = 0;
ES = 1;
}
void main()
{
initial_com();
while(1)
{
if(num==1)
{
ES = 0;
num = 0;
SBUF = a; //
while(!TI);
TI = 0;
ES = 1;
}
}
}
void ser() interrupt 4
{
RI=0;
a = SBUF;
// ES=0; //關閉串口中斷
num=1;
/*在調試助手上確實可以顯示接收到 0x01 ,但是燈沒亮*/
if(a == 0x01)
{
led1 = 0;
}
if(a == 0x02)
{
led1 = 1;
}
}
復制代碼
作者:
HC6800-ES-V2.0
時間:
2017-6-18 09:27
我用你的程序,在我的板子上試驗了一下,完全是正確的。輸入HEX的數據1,可以開燈,輸入HEX的數據2,可以關燈。
可能你的問題是:
我讀你程序時,特別注意了你的判斷用的數據類型——HEX十六進制數據類型,所以,串口通訊實驗時,我特地將輸入的選項,設置為HEX,所以是成功的。
如果你輸入的數據類型是字符型,輸入、輸出看起來都是1,但單片機可不那么想,‘1’和0x01是不同的。
你注意一下,返回的是01,則說明輸入的1是十六進制數據,若返回的是1,就是輸入的字符數據。
切切!數據類型在串口通訊中控制時,重要!!
作者:
LIPPPP
時間:
2017-6-18 21:51
HC6800-ES-V2.0 發表于 2017-6-18 09:27
我用你的程序,在我的板子上試驗了一下,完全是正確的。輸入HEX的數據1,可以開燈,輸入HEX的數據2,可以關 ...
原來如此。! 我搞了好久不知道哪里出錯。我這 新手確實好多小細節都沒弄懂,學習學習了。
作者:
yzwzfyz
時間:
2017-6-18 23:19
執行“SBUF = 0x01; //開發板開關開啟接收到,01 FF數據”,是向串口發送一個01,發完后會產生一個中斷,程序轉入中斷服務去。
在中斷服務程序中你:“a = SBUF;” -----由于SBUF中原來沒有一個確定的數據(發送的SBUF與接收的SBUF是不同的,請你認真仔細讀單片機手冊),所以a不知道是等于什么,=01的可能性為1/256。
歡迎光臨 (http://www.denmoz.com/bbs/)
Powered by Discuz! X3.1