Ⅰ 89C52RC單片機的晶振頻率一定要12兆赫茲嗎
當然不是。
一般情況下,如果不使用串口的話,通常就是用12MHz晶振;如果需要使用串口通訊的話,通常使用11.0592MHz的晶振。
晶振的選擇也並非只有12MHz和11.0592MHz兩種,這個需要根據實際的用途來選擇。
Ⅱ 一:keil平台的搭建與設置(12分) 選擇單片機型號:89C52,晶振需為11.0592M ,編譯輸出HEX代碼。
1、運行KEILC
2、點擊菜單Project/New uVision Project
3、設備選擇菜單中選Atmel/AT89C52,確認
4、點擊菜單Project/Option for Target 'tartet1'進入子菜單頁面
4.1、點擊Target,相應位置填入晶振11.0592
4.2、點擊Output,勾選Creat Hex File,點確認。
4、新建一個文件,輸入程序,存為相應的文件(匯編或C)
5、右擊左邊Project欄的Source group1,選擇Add File To Group"Source Group1..",選擇剛存入的文件添加。
6、Ok,可以編譯和編輯了。
Ⅲ 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; //允許串口中斷
}
Ⅳ 給100分,stc89c52單片機,用11.0592的晶振,產生115200的波特率
如果STC單片機處於6T模式,RCAP2H=0xFF,RCAP2L=0xD0。如果為12T方式RCAP2H=0xFF,RCAP2L=0xE8。然後設置T2CON=0x34即完成對串口的初始化,其餘的操作就和普通串口一樣了。