×
单片机 > 单片机程序设计 > 详情

C51 中断接收 查询发送

发布时间:2020-06-04 发布时间:
|

C51 中断接收 查询发送

  1. #include   

  2.   

  3. volatile unsigned char rx_data;  

  4. volatile bit          rx_flag = 0;  

  5.   

  6. void dalay_1ms(unsigned short n)  

  7. {  

  8.     unsigned short i,j;  

  9.     for(i=0; i

  10.     {  

  11.         for(j=60000; j>0; j--);  

  12.     }  

  13. }  

  14.   

  15.   

  16. void send_char(unsigned char ch)  

  17. {  

  18.     SBUF = ch;  

  19.     while(!TI);  

  20.     TI = 0;  

  21. }  

  22.   

  23. void send_string(unsigned char *str, unsigned char len)  

  24. {  

  25.     unsigned char i;  

  26.     for(i=0; i

  27.     {  

  28.         send_char(*(str+i));  

  29.     }  

  30. }  

  31.   

  32.   

  33. //----------------------------------------------  

  34. void main (void)  

  35. {  

  36. //    volatile unsigned char i,tmp;  

  37.     unsigned char *str = "Serial test";  

  38.     TMOD = 0x20;   //T1方式2  

  39.     TH1 = 0xFD;    //Baud:9600bps@11.0592MHz  

  40.     TL1 = 0xFD;  

  41.     TR1 = 1;       //启动定时器1  

  42.       

  43.     SCON = 0x50;   //串口方式1, 8-n-1, 允许接收  

  44.     REN = 1;      //使能串口接收  

  45.     EA  = 1;      //打开总中断  

  46.     ES  = 1;      //打开串口中断开关  

  47.   

  48.     send_string((unsigned char *)str, 11);  

  49.     while(1)  

  50.     {    

  51.         dalay_1ms(1);  

  52.         if(rx_flag)  

  53.         {  

  54.             ES = 0; //必须得先关串口中断,否则PC收不到数据  

  55.             SBUF = rx_data;  

  56.             while(RI == 0);  

  57.             ES = 1; //再开串口中断  

  58.             RI = 0;  

  59.         }  

  60.     }  

  61. }  

  62. //----------------------------------------------  

  63. void serial(void) interrupt 4  

  64. {  

  65.     rx_data = SBUF;  

  66.     P1 = rx_data;  

  67.     rx_flag = 1;  

  68.     RI = 0;  

  69. }   

  70. //----------------------------------------------  




『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
C51 特殊功能寄存器SFR的名称和地址