|
學(xué)習(xí)單片機(jī),編了一個(gè)串口程序,實(shí)現(xiàn)功能是,由上位機(jī)發(fā)送1給單片機(jī)時(shí),蜂鳴器以400ms頻率發(fā)聲,發(fā)2時(shí)以200ms頻率發(fā)聲,發(fā)3時(shí)以100ms頻率發(fā)聲,發(fā)4時(shí)關(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; //定時(shí)器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,實(shí)現(xiàn)的功能是:發(fā)出的數(shù)據(jù)又返回來(lái)了,但是不能控制單片機(jī),S_date數(shù)據(jù)好像沒(méi)有進(jìn)入switch語(yǔ)句,開(kāi)始我考慮是不是優(yōu)先級(jí)的問(wèn)題,就設(shè)置了串口優(yōu)先或者定時(shí)器優(yōu)先,還是不起作用,高手指教,謝謝! |