我的source如下:
//#include<reg51.h>
#include<reg52.h>
#include "intrins.h"
#include <string.h>
#define uchar unsigned char //定义unsigned char为uchar
#define uint unsigned int
sbit P00=P0^0;
sbit P01=P0^1;
sbit P02=P0^2;
sbit P03=P0^3;
sbit P04=P0^4;
sbit P05=P0^5;
sbit P06=P0^6;
sbit P07=P0^7;
sbit P10=P1^0;
sbit P11=P1^1;
sbit P12=P1^2;
sbit P13=P1^3;
sbit P14=P1^4;
sbit P15=P1^5;
sbit P16=P1^6;
sbit P17=P1^7;
sbit P20=P2^0;
sbit P21=P2^1;
sbit P22=P2^2;
sbit P23=P2^3;
sbit P24=P2^4;
sbit P25=P2^5;
sbit P26=P2^6;
sbit P27=P2^7;
sbit P30=P3^0;
sbit P31=P3^1;
sbit P32=P3^2;
sbit P33=P3^3;
sbit P34=P3^4;
sbit P35=P3^5;
sbit P36=P3^6;
sbit P37=P3^7;
uchar i=0,j=0,a;
bit flag_CharInput=0;
uchar buf[]="OK";
uchar vector[10];
bit flag_P=0;
void delay(char x)
{
char a,b;
for(a=x;a>0;a--)
for(b=100;b>0;b--);
}
void delay1(uint z)//延时为 1ms
{
uchar x,x1;
for(;z>0;z--)
{
for(x=0;x<114;x++)
for(x1=0;x1<1;x1++);
}
}
void inter_init()
{
SCON = 0x50; //串口工作方式为1,允许接收.
PCON|= 0x80; //SMOD=1;
TMOD|= 0x20; // T1 定时方式2
TH1 = 0xfd; //波特率 9600bps @ fosc = 11.0592MHz
TL1 = 0xfd;
IE|=0x90;
TR1 = 1; //启动T1
ES = 1; //开串口中断.
EA = 1; //开总中断.
}
void send(uchar st)
{
SBUF=st;
while(TI==0);
TI=0;
}
void send_arry(uchar str[])
{
for(i=0;i<strlen(str);i++)
{
SBUF=str[i];
while(TI==0);
TI=0;
}
}
void main()
{
inter_init();
while(1)
{
P32=0;
P20=0;
P21=0;
P22=1;
P23=1;
}
}
void serial() interrupt 4 using 3 //中断,注意是interrupt 4
{
if(RI)
{
ES=0;
RI=0;
a=SBUF;
flag_CharInput=1;
if(flag_CharInput==1&&a=='a'&&j==0)
{
send_arry(buf);
flag_CharInput=0;
}
if(a=='P'&&j==0)
{
flag_P=1;
j=0;
}
if(flag_P==1)
{
if(j<3)
vector[j++]=a;
if(j==3)
{
flag_P=0;
j=0;
if(!memcmp("P00",vector,3))
{
if(P00==0)
send_arry("P00==0");
else
send_arry("P00==1");
}
else if(!memcmp("P01",vector,3))
{
if(P01==0)
send_arry("P01==0");
else
send_arry("P01==1");
}
memset(vector,'\0',20);
a=0;
}
}
ES=1;
}
}
麻烦高手帮忙看下,设置部分有什么问题,目前串口部分不能正常通信,比如发a不能回复OK,麻烦讲的详细一点,新手求带,谢谢
AT89S52单片机,晶振11.0592M,需求I\/O可控,串口可读写
PCON|= 0x80; \/\/SMOD=1; 这为1,波特率加倍了,就不是9600,而是19200了
AT89S52单片机的系统概述
在单芯片上,拥有灵巧的8 位cpu 和在系统可编程flash,使得at89s52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。at89s52具有以下标准功能:8k字节flash,256字节ram,32 位i\/o 口线,看门狗定时器,2 个数据指针,三个16 位定时器\/计数器,一个6向量2级中断结构,全双工串行口,片内晶振...
11.0592MHZ 的晶振 如何定1s的时
f=11.0592MHZ t0=1\/f*12 为单片机的一个机器周期 定时时间 t=(定时器最大值-(THTL值)+1)*t0 若你要定时的时间为T,设置定时器使t最大了仍比T小,你可以设置一个合适的t,使n*t=T,然后定时n次 若定时器为16位定时器:t0=1\/(11.0592M)*12=132.7104us T=1s THTL=T\/t0=7535...
AT89s52单片机实际使用时IO口的输出电压和电源的供电电压有没有关系...
AT89s52单片机电源供电电压标准为5V,IO口电压是0-5V。AT89s52单片机电源供电电压有高低的限制,供电电压范围是4V-5.5V之间
AT89S52单片机最大晶振是多少?为何一般情况下选择用晶振12MHz?_百度知...
最大24Mhz,数据来源,datasheet。再大的话可能就出错了,不知道你试过没有,晶振两脚短接都可以工作,而且速度非常快,逻辑可能就有问题了。一般选用12M是因为大多数指令执行需要12个周期,也就是说大约1秒执行1M条指令,当然也有几个周期一条指令的,为延迟等 好计算而已。
各位AT89S52单片机高手进~
AT89S52具有以下标准功能: 8k字节Flash,256字节RAM, 32 位I\/O 口线,看门狗定时器,2 个数据指针,三个16 位 定时器\/计数器,一个6向量2级中断结构,全双工串行口, 片内晶振及时钟电路。另外,AT89S52 可降至0Hz 静态逻 辑操作,支持2种软件可选择节电模式。空闲模式下,CPU 停止工作,允许R...
at89s52 篮球计时器 编写求助
主控芯片为AT89S52,采用12MHz晶振,P0.0-P0.7作键盘输入。A1为12分钟暂停键;A2为启动12分钟计时键,,24秒计时开始;A3为24S复位开启键(投篮或交换控球时按下此键); A4为24秒计时停止键(没有违例);A5为总计时和24秒计时同时启动键;A6为总计时和24S计时同时停止键。 电路采用静态显示,一起点亮各位数码管,同时...
at89S52单片机各个IO口输出电流最大为多大??
要分高电平和低电平,高电平时输出拉电流,大概是0.08-0.16mA(4-8个TLL电路,每个是20uA)。低电平时输入灌电流,最大20mA左右,建议使用10mA左右为宜。所有IO口的灌电流加起来不能超过100mA。从这些数值看,其实52的输出能力是很弱的。往往外面需要加驱动。
...求大侠帮忙啊(单片机AT89S52,步进电机28BYJ-48)
由于是11.0592Mhz晶振,1个时钟周期是1\/11.0592=9.04*10(-8)秒 如果定量计算的话,假设使用speed是2弧度每秒对应的机器周期是:1\/(2*180\/3.14*64\/5.625)除以(1\/11.0592*0.000001) =8484.181..这个8484转换成16进制就是2124于是TH=21,TL-24 http:\/\/zhidao.baidu.com\/question\/...
大家帮帮忙,AT89S52单片机用一个I\/O口怎么控制40个并联发光二级管,能...
按这个图连接,把P15端接到任意I\/O口上,把并联的40个发光管接到蜂鸣器符号的位置,拿下蜂鸣器。按后按此图编程序即可。