學習單片機,編了一個串口程序,實現功能是,由上位機發送1給單片機時,蜂鳴器以400ms頻率發聲,發2時以200ms頻率發聲,發3時以100ms頻率發聲,發4時關閑蜂鳴器,程序如下:
#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; //串口中斷高優先
PT0=0; //定時器0中斷低優先
}
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,實現的功能是:發出的數據又返回來了,但是不能控制單片機,S_date數據好像沒有進入switch語句,開始我考慮是不是優先級的問題,就設置了串口優先或者定時器優先,還是不起作用,高手指教,謝謝!
要對每個中斷設置不同的寄存器組哦。如void inter0() interrupt 1(中斷號) unsing 1(使用第1組寄存器),推薦篇博文給你http://blog.163.com/pc8mcu@126/blog/static/996517962009190215892/
| 歡迎光臨 (http://www.denmoz.com/bbs/) | Powered by Discuz! X3.1 |