您的位置:首页 > 其它

"上位机发送1给单片机时,蜂鸣器以400ms频率发声"上篇的终于调出来,我这人真的比较笨,调了一天,网上很多的例程是有问题的

2011-10-21 18:28 495 查看
/*1.由上位机发送1给单片机时,蜂鸣器以400ms频率发声

,发2时以200ms频率发声,

发3时以100ms频率发声,

发4时关闲蜂鸣器

频率 11.0592M HZ

0011 0001 49(十) 31(16) 1

0011 0010 50 32 2

0011 0011 51 33 3

*/

#include<reg52.h>

#define uint unsigned int

#define uchar unsigned char

uint num;

uint temp;//用于记录num的变化

uchar a;

uint flag;

sbit buzzer=P2^3;

void delay(uint z);

void init();

void main()

{

init();

while(1)

{

if(flag==1)

{

flag=0;

ES=0;

SBUF=a;

while(!TI);

TI=0;

TR0=1;

P1=a;

if(a=='1')//注意数字1与字符1的区别

{

//buzzer=~buzzer;

//delay(200);

//buzzer=~buzzer;

//delay(200);

temp=4;

}

if(a=='2')

{

temp=2;

}

if(a=='3')

{

temp=1;

}

if(a=='4')

{

TR0=0;

buzzer=1;

ES=1;

}

}

}

}

void init()

{

TMOD=0x21;//定时器T1选择工作方式2

TH1=0xfd;

TL1=0xfd;//定时器T1装初值

TR1=1;

SM0=0;

SM1=1;//SCON中设定定时器工作方式为1

REN=1;//SOCN中开串行接受

EA=1;

ES=1;//IE中开串行口中断

num=0;

temp=0;

TH0=(65536-45972)/256;

TL0=(65536-45872)%256;

ET0=1;

}

void ser() interrupt 4

{

RI=0;

a=SBUF;//没有返回给上位机显示a的值

flag=1;

}

void enter0() interrupt 1//50ms

{

TH0=(65536-45872)/256;

TL0=(65536-45872)%256;

num++;

if(num==temp)

{

num=0;

buzzer=~buzzer;

ES=1;

}

}

void delay(uint z)//用于调试,main函数中没用到

{

uint x,y;

for(x=z;x>0;x--)

for(y=123;y>0;y--);

}

有时候串口调试工具会短路,重启一下MCU就好了!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐