"上位机发送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就好了!
,发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就好了!
相关文章推荐
- 由上位机发送1给单片机时,蜂鸣器以400ms频率发声 明天再调郁闷
- "余弦相似性"(cosine similiarity)比较相似文章
- 邮件发送中的"server does not support secure connection."
- Java中的""与" "之判断比较
- "按位取反加一"的新理解——在FFT频分析后如何获得其频率分量
- WindowXP使用"包含文字"搜索有问题的处理
- 80末女大学生穿"套套围裙"网上炫"战绩"
- 针对"不重新发送信息,则无法刷新网页。"的终极解决方法。(php&java范例)
- "Balancing Agility and Discipline" 中文版——《平衡敏捷与规范》终于要出版了
- 关于网上邻居"此工作组的服务器列表当前无法使用"问题.
- "张江男"的寂寞一天
- "右键发送" 造成死机,解决方法,实验管用
- <iOS>iphone技术总结, 在网上找到比较有用的东东,整合一下
- 针对网上流传的"Android 再按一次后退键退出应用程序"方法改正
- "向程序发送命令时出现错误 "解决办法
- "一不做,二不休", 干脆把开局库更换的批处理文件也调试好放出来...
- Java使用"指针"快速比较字节
- 3.字符反转 输入一串字符,比如"abcd",以倒序的方式将它打印出来
- "Balancing Agility and Discipline" 中文版——《平衡敏捷与规范》终于要出版了
- "zero" == 0 , 字段串与数字比较