当前位置:首页 > 单片机 > 单片机
[导读] C51 中断接收 查询发送#includevolatileunsignedcharrx_data;volatilebitrx_flag=0;voiddalay_1ms(unsignedshortn){unsignedshorti,j;for(i=0;i0;j--);}}voidsend_char(unsignedcharch){SBUF=ch;while(

C51 中断接收 查询发送

  1. #include

  2. volatileunsignedcharrx_data;

  3. volatilebitrx_flag=0;

  4. voiddalay_1ms(unsignedshortn)

  5. {

  6. unsignedshorti,j;

  7. for(i=0;i

  8. {

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

  10. }

  11. }

  12. voidsend_char(unsignedcharch)

  13. {

  14. SBUF=ch;

  15. while(!TI);

  16. TI=0;

  17. }

  18. voidsend_string(unsignedchar*str,unsignedcharlen)

  19. {

  20. unsignedchari;

  21. for(i=0;i

  22. {

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

  24. }

  25. }

  26. //----------------------------------------------

  27. voidmain(void)

  28. {

  29. //volatileunsignedchari,tmp;

  30. unsignedchar*str="Serialtest";

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

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

  33. TL1=0xFD;

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

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

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

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

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

  39. send_string((unsignedchar*)str,11);

  40. while(1)

  41. {

  42. dalay_1ms(1);

  43. if(rx_flag)

  44. {

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

  46. SBUF=rx_data;

  47. while(RI==0);

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

  49. RI=0;

  50. }

  51. }

  52. }

  53. //----------------------------------------------

  54. voidserial(void)interrupt4

  55. {

  56. rx_data=SBUF;

  57. P1=rx_data;

  58. rx_flag=1;

  59. RI=0;

  60. }

  61. //----------------------------------------------


本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
关闭
关闭