波特率設為9600,無奇偶校驗,晶振11.0592MHz,STC89C52。
微控制器通過串口接收字符“a”,微控制器反饋“a”,開p1.0 =1。
如果微控制器在30秒內沒有收到“a”p 1.0 = 0。
問題:1。延誤和端口要根據妳的實際情況來改變。
2.上電或復位後,P1.0=0的第壹次切換時間比後面的切換時間長,不壹致。之後就正常了
******************************************************************/
# include & ltreg52.h & gt
#定義uchar無符號字符
#定義uint無符號整數
uchar buf
sbit out = p1^0;
Void delay(無符號字符)//11.0592 MHz,帶參數delay。
{
無符號字符I,j,k;
for(k = s;k & gt0;k -)
{
I = 180;
j = 73
做
{
while(-j);
} while(-I);
}
}
無效總管(無效)
{
SCON = 0x 50;//設置串口工作模式
PCON = 0x 00;//波特率不相乘
TMOD = 0x 20;//定時器1工作在8位自動重載模式下產生波特率。
EA = 1;
ES = 1;//允許串行端口中斷
TL 1 = 0x FD;
th 1 = 0x FD;//波特率9600
tr 1 = 1;
while(1)
{
延時(100);//Delay,這個要根據實際情況修改成妳需要的值。
out = 0;//正常開機。延遲後,P1.0將等於0。
//從串口接收到A後,會立刻讓P1.0等於1。
//然後如果延遲時間內沒有再次收到A,程序會讓P1.0再次等於0,循環。。。
}
}
/*********************************************************
串行中斷服務功能
*********************************************************/
無效串行()中斷4
{
ES = 0;//關閉串行中斷
RI = 0;//清除串行接受標誌位。
buf = SBUF//從串行緩沖區獲取數據
開關(緩沖器)
{
case 0x 61:out = 1;打破;//接收到字符A,使得P2.0為高(0x61是“A”的ASCII碼的十六進制形式)
//case 0x 32:out = 0;打破;//接收到字符2,使P2.0為低電平(供測試使用)
默認:break//收到其他數據,無動作。
}
ES = 1;//允許串行端口中斷
}