单片机自动向PC机发送数据的方法

单片机通过串口向PC机发送数据一般是通过串口中断服务程序来实现,也就是说一般写在中断函数里。例如:

 

#include /*主程序*/ void main (void) { SCON = 0x50; /* SCON: 模式 1, 8-bit UART, 使能接收 */ TMOD |= 0x20; /* TMOD: timer 1, mode 2, 8-bit reload */ TH1 = 0xFD; /* TH1: reload value for 9600 baud @ 11.0592MHz */ TR1 = 1; /* TR1: timer 1 run */ EA = 1; /*打开总中断*/ ES = 1; /*打开串口中断*/ while (1) /*主循环不做任何动作*/ { } } void UART_SER (void) interrupt 4 //串行中断服务程序 { unsigned char Temp; //定义临时变量 if(RI) //判断是接收中断产生 { RI=0; //标志位清零 Temp=SBUF; //读入缓冲区的值 P1=Temp; //把值输出到P1口,用于观察 SBUF=Temp; //把接收到的值再发回电脑端 } if(TI) //如果是发送标志位,清零 TI=0; }  

以上是一个单片机与PC机互发的程序,是通过PC机向缓冲区SBUF发送数据来实现打开串口中断,但要单片机自主的向PC机发送数据而不需PC机操作,这样就不能实现,因此可以将串口中断另外写成一个函数,在main()函数中调用:
…… void UART_SER () //串行口服务程序 { int i; unsigned char Temp; //定义临时变量 for(i=0;i<2;i++) { RI=0; //标志位清零 Temp=temp_data[i]; P1=Temp; //把值输出到P1口,用于观察 SBUF=Temp; //把接收到的值再发回电脑端 //TI=1; } } /* 主函数 */ /************************************/ void main() { SCON = 0x50; /* SCON: 模式 1, 8-bit UART, 使能接收 */ TMOD |= 0x20; /* TMOD: timer 1, mode 2, 8-bit reload */ TH1 = 0xFD; /* TH1: reload value for 9600 baud @ 11.0592MHz */ TR1 = 1; /* TR1: timer 1 run */ EA = 1; /*打开总中断*/ ES = 1; Ok_Menu () ; do { Read_Temperature() ; Disp_Temperature() ; UART_SER (); delay1(100); } while(!presence); Error_Menu (); do { Init_DS18B20() ; beep() ; } while(presence) ; while(1); } 

你可能感兴趣的:(timer,menu,delay)