Ⅰ 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即完成对串口的初始化,其余的操作就和普通串口一样了。