學(xué)習(xí)單片機(jī),編了一個串口程序,實現(xiàn)功能是,由上位機(jī)發(fā)送1給單片機(jī)時,蜂鳴器以400ms頻率發(fā)聲,發(fā)2時以200ms頻率發(fā)聲,發(fā)3時以100ms頻率發(fā)聲,發(fā)4時關(guān)閑蜂鳴器,程序如下:
#include<reg52.h>
unsigned int flag,R_date,S_date,counter;
unsigned char t;
sbit beep=P0^1;
void UART_init()
{
TMOD=0x21;
PCON=0x80;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
TH1=0xf3;
TL1=0xf3;
REN=1;
ET0=1;
TR1=1;
SM0=0;
SM1=1;
EA=1;
ES=1;
TR0=1;
PS=1; //串口中斷高優(yōu)先
PT0=0; //定時器0中斷低優(yōu)先
}
void main()
{
UART_init();
while(1)
{
if(flag==1)
{
ES=0;
SBUF=S_date;
while(!TI);
TI=0;
ES=1;
flag=0;
}
}
}
void UART() interrupt 4
{
RI=0;
R_date=SBUF;
S_date=R_date;
flag=1;
switch(S_date)
{
case 1: t=8;break;
case 2: t=4;break;
case 3: t=2;break;
case 4: beep=0;break;
default: break;
}
}
void timer0() interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
counter++;
if(counter==t)
{
counter=0;
beep=~beep;
}
}
晶振12M,波特率4800,實現(xiàn)的功能是:發(fā)出的數(shù)據(jù)又返回來了,但是不能控制單片機(jī),S_date數(shù)據(jù)好像沒有進(jìn)入switch語句,開始我考慮是不是優(yōu)先級的問題,就設(shè)置了串口優(yōu)先或者定時器優(yōu)先,還是不起作用,高手指教,謝謝!
要對每個中斷設(shè)置不同的寄存器組哦。如void inter0() interrupt 1(中斷號) unsing 1(使用第1組寄存器),推薦篇博文給你http://blog.163.com/pc8mcu@126/blog/static/996517962009190215892/
歡迎光臨 (http://www.raoushi.com/bbs/) | Powered by Discuz! X3.1 |