串口使用练习一
由上位机发送’1’给单片机时,蜂鸣器以400Hz频率发声,发‘2’时以200Hz频率发声,发‘3’时以100Hz频率发声,发‘4’时关闭蜂鸣器.
本实验使用锐志电子RZ-51/AVR V2.8单片机,不同单片机引脚可能不同。下面给出代码段,欢迎讨论。
#include<reg52.h>
#define uint_8 unsigned char
#define uint_16 unsigned int
uint_8 temp, flag = 0, count = 0, recu = 0;
void init();
void main()
{
init();
while(1){
if(flag == 1){
ES = 0;
flag = 0;
if(recu == '1' || recu == '2' || recu == '3'){
SBUF = 'V';
while(TI == 0);
TI = 0;
}else{
SBUF = 'X';
while(TI == 0);
TI = 0;
}
switch(recu){
case('1'): TR0 = 1; temp = 1; break;
case('2'): TR0 = 1; temp = 2; break;
case('3'): TR0 = 1; temp = 4; break;
case('4'): TR0 = 0; break;
}
ES = 1;
}
}
}
void serial() interrupt 4 //Interrupt method
{
RI = 0;
P1 = SBUF;
recu = SBUF;
flag = 1;
}
void Timer0() interrupt 1
{
TH0 = (65536 - 2304) / 256;
TL0 = (65536 - 2304) % 256;
count++;
if(count == temp){
count = 0;
beep = ~beep;
}
}
void init(){
TMOD = 0x21; //working 3
TH0 = (65536 - 2304) / 256;
TL0 = (65536 - 2304) % 256;
TH1 = 0xfd; //fosc = 9600
TL1 = 0xfd;
TR1 = 1;
REN = 1;
SM0 = 0; //working 1
SM1 = 1;
IE = 0x92;
}