當前位置:編程學習大全網 - 源碼下載 - STC 89c52rc單片機代碼

STC 89c52rc單片機代碼

/**********************為網友解答例程************************

波特率設置為9600,無奇偶校驗,晶振11.0592MHz,STC89C52.

單片機通過串口接收到 字符“a",單片機反饋”a"並打開p1.0 =1 。

如果單片機持續30S 沒收到“a" P1.0= 0 。

存在問題:1.延時、端口 要根據妳的實際情況改壹下參數。

2.上電or復位後,第壹次P1.0=0的轉換時間要比以後動作轉換時間長,不壹致。之後正常。

******************************************************************/

#include <reg52.h>

#define uchar unsigned char

#define uint unsigned int

uchar buf;

sbit out = P1^0;

void delay(unsigned char s) //11.0592MHz下,帶參數延時

{

unsigned char i, j,k;

for(k=s;k>0;k--)

{

i = 180;

j = 73;

do

{

while (--j);

} while (--i);

}

}

void main(void)

{

SCON=0x50; //設定串口工作方式

PCON=0x00; //波特率不倍增

TMOD=0x20; //定時器1工作於8位自動重載模式, 用於產生波特率

EA=1;

ES = 1; //允許串口中斷

TL1=0xfd;

TH1=0xfd; //波特率9600

TR1=1;

while(1)

{

delay(100); //延時,此處要根據實際修改成妳需要的數值

out = 0; //正常上電,延時後,會使P1.0等於0

//從串口收到a後, 會使P1.0馬上等於1,

//然後如果在延時時間內沒有再次接收到a ,那程序將再次使P1.0等於0,循環。。。

}

}

/*********************************************************

串行中斷服務函數

*********************************************************/

void serial() interrupt 4

{

ES = 0; //關閉串行中斷

RI = 0; //清除串行接受標誌位

buf = SBUF; //從串口緩沖區取得數據

switch(buf)

{

case 0x61: out = 1;break; //接受到字符a,使P2.0為高(0x61為"a"的ASCII碼十六進制形式)

// case 0x32: out = 0;break; //接受到字符2,使P2.0為低(測試使用)

default: break; //接受到其它數據,無動作

}

ES = 1; //允許串口中斷

}

  • 上一篇:奪寶幸運星插曲 豬八戒被九頭駙馬叼走 孫悟空在地上追的插曲 沒有實際意義的答案別回
  • 下一篇:高效任務平臺源代碼
  • copyright 2024編程學習大全網