C说话-版本与登记簿版本集合重大聚会及源码COD

单片机源顺序如次

  1. /*——————————————————————*/
  2. /* — STC MCU International Limited ——————————-*/
  3. /* — STC 1T Series MCU RC Demo ———————————–*/
  4. /* If you want to use the program or the program referenced in the  */
  5. /* article, please specify in which data and procedures from STC    */
  6. /*——————————————————————*/
  7. /*********************************************************/
  8. #define MAIN_Fosc                22118400L        主记录界说
  9. //#define MAIN_Fosc                11059200L        主记录界说
  10. #include        “”
  11. /*************        功用阐明        **************
  12. 4串口全转接侦听方法接见传达顺序。
  13. 用PC机向单片机发送最高纪录, 收执到MCU后,经过串行PO重行提起收执到的最高纪录。
  14. 默许参量:
  15. 一切的设置都是 1位亲子关系方位, 8位最高纪录位, 1位中止位, 无检查。
  16. 每个串行左转舵可以运用差别的波特率。
  17. 串行左转舵1(P3.0) P3.1): 115200bps.
  18. 串行左转舵2(P1.0) P1.1):  57600bps.
  19. 串行左转舵3(P0.0) P0.1):  38400bps.
  20. 串行左转舵4(P0.2) P0.3):  19200bps.
  21. ******************************************/
  22. /*************        零件常数声称       **************/
  23. #define        RX1_Length        128                /* 收执缓冲剂规模 */
  24. #define        RX2_Length        128                /* 收执缓冲剂规模 */
  25. #define        RX3_Length        128                /* 收执缓冲剂规模 */
  26. #define        RX4_Length        128                /* 收执缓冲剂规模 */
  27. #define        UART_BaudRate1        115200UL         /* 波特率 */
  28. #define        UART_BaudRate2         57600UL         /* 波特率 */
  29. #define        UART_BaudRate3         38400UL         /* 波特率 */
  30. #define        UART_BaudRate4         19200UL         /* 波特率 */
  31. /*************        本地新闻变量声称        **************/
  32. u8        xdata        RX1_Buffer[RX1_Length];        //收执缓冲
  33. u8        xdata        RX2_Buffer[RX2_Length];        //收执缓冲
  34. u8        xdata        RX3_Buffer[RX3_Length];        //收执缓冲
  35. u8        xdata        RX4_Buffer[RX4_Length];        //收执缓冲
  36. u8        TX1_read,RX1_write;        读写参考(指状物)
  37. u8        TX2_read,RX2_write;        读写参考(指状物)
  38. u8        TX3_read,RX3_write;        读写参考(指状物)
  39. u8        TX4_read,RX4_write;        读写参考(指状物)
  40. bit        B_TX1_Busy,B_TX2_Busy,B_TX3_Busy,B_TX4_Busy;        // 发送繁华的标志
  41. /*************        零件重大聚会声称       **************/
  42. void        UART1_config(u8 短时间做成的公交零碎)       // 选择波特率, 2: 运用Time2做波特率, 其它值: 运用Time1来达到波特率。
  43. void        UART2_config(u8 短时间做成的公交零碎)       // 选择波特率, 2: 运用Time2做波特率, 其它值: 完全无用。
  44. void        UART3_config(u8 短时间做成的公交零碎)       // 选择波特率, 2: 运用Time2做波特率, 其它值: 运用Time3来达到波特率。
  45. void        UART4_config(u8 短时间做成的公交零碎)       // 选择波特率, 2: 运用Time2做波特率, 其它值: 运用Time4来达到波特率。
  46. void         PrintString1(u8 提议)
  47. void         PrintString2(u8 提议)
  48. void         PrintString3(u8 提议)
  49. void         PrintString4(u8 提议)
  50. /**********************************************/
  51. void 主(空)
  52. {
  53.         P0n_standard(0xff);        设置为准双向左转舵。
  54.         P1n_standard(0xff);        设置为准双向左转舵。
  55.         P2n_standard(0xff);        设置为准双向左转舵。
  56.         P3n_standard(0xff);        设置为准双向左转舵。
  57.         P4n_standard(0xff);        设置为准双向左转舵。
  58.         P5n_standard(0xff);        设置为准双向左转舵。
  59.        
  60.         UART1_config(1);        // 选择波特率, 2: 运用Time2做波特率, 其它值: 运用Time1来达到波特率。
  61.         UART2_config(2);        // 选择波特率, 2: 运用Time2做波特率, 其它值: 完全无用。
  62.         UART3_config(3);        // 选择波特率, 2: 运用Time2做波特率, 其它值: 运用Time3来达到波特率。
  63.         UART4_config(4);        // 选择波特率, 2: 运用Time2做波特率, 其它值: 运用Time4来达到波特率。
  64.        
  65.         EA = 1;
  66.         PrintString1(“STC15F4K60S4 USART1 Test Prgramme!\r\n”);
  67.         PrintString2(“STC15F4K60S4 USART2 Test Prgramme!\r\n”);
  68.         PrintString3(“STC15F4K60S4 USART3 Test Prgramme!\r\n”);
  69.         PrintString4(“STC15F4K60S4 USART4 Test Prgramme!\r\n”);
  70.         while (1)
  71.         {
  72.                 if((TX1_read != RX1_write) && !B_TX1_Busy)        //收到过最高纪录, 收费发送。
  73.                 {
  74.                         B_TX1_Busy = 1;                标志发送忙
  75.                         SBUF = RX1_Buffer[TX1_read];        发送八位位组
  76.                         if(++TX1_read >= RX1_Length)        TX1_read = 0;        戒除流出处置
  77.                 }
  78.                 if((TX2_read != RX2_write) && !B_TX2_Busy)        //收到过最高纪录, 收费发送。
  79.                 {
  80.                         B_TX2_Busy = 1;                标志发送忙
  81.                         S2BUF = RX2_Buffer[TX2_read];        发送八位位组
  82.                         if(++TX2_read >= RX2_Length)        TX2_read = 0;        戒除流出处置
  83.                 }
  84.                 if((TX3_read != RX3_write) && !B_TX3_Busy)        //收到过最高纪录, 收费发送。
  85.                 {
  86.                         B_TX3_Busy = 1;                标志发送忙
  87.                         S3BUF = RX3_Buffer[TX3_read];        发送八位位组
  88.                         if(++TX3_read >= RX3_Length)        TX3_read = 0;        戒除流出处置
  89.                 }
  90.                 if((TX4_read != RX4_write) && !B_TX4_Busy)        //收到过最高纪录, 收费发送。
  91.                 {
  92.                         B_TX4_Busy = 1;                标志发送忙
  93.                         S4BUF = RX4_Buffer[TX4_read];        发送八位位组
  94.                         if(++TX4_read >= RX4_Length)        TX4_read = 0;        戒除流出处置
  95.                 }
  96.         }
  97. }
  98. //========================================================================
  99. // 重大聚会: SetTimer2Baudraye(u16 DAT)
  100. // 界定方法: 设置Time2作为波特率发生器。
  101. // 参量: dat: TimeR2的重行瞄准值。
  102. // 重行提起: 单独也无。
  103. // 版本: VER1.0
  104. // 日期: 2014-11-28
  105. // 凡例:
  106. //========================================================================
  107. void        SetTimer2Baudraye(u16 DAT)        // 选择波特率, 2: 运用Time2做波特率, 其它值: 运用Time1来达到波特率。
  108. {
  109.         AUXR &= ~(1<<4);        //Timer stop
  110.         AUXR &= ~(1<<3);        //Timer2 set As Timer
  111.         AUXR |=  (1<<2);        //Timer2 set as 1T mode
  112.         TH2 = dat / 256;
  113.         TL2 = dat % 256;
  114.         IE2  &= ~(1<<2);        //取缔侦听
  115.         AUXR |=  (1<<4);        //Timer run enable
  116. }
  117. //========================================================================
  118. // 重大聚会: void        UART1_config(u8 短时间做成的公交零碎)
  119. // 界定方法: UART1设定初值重大聚会。
  120. // 参量: brt: 选择波特率, 2: 运用Time2做波特率, 其它值: 运用Time1来达到波特率。
  121. // 重行提起: 单独也无。
  122. // 版本: VER1.0
  123. // 日期: 2014-11-28
  124. // 凡例:
  125. //========================================================================
  126. void        UART1_config(u8 短时间做成的公交零碎)        // 选择波特率, 2: 运用Time2做波特率, 其它值: 运用Time1来达到波特率。
  127. {
  128.         u8        i;
  129.         /*********** 波特率运用定时曝光把持计2 *****************/
  130.         倘若(BRT) == 2)
  131.         {
  132.                 AUXR |= 0x01;                //S1 BRT Use Timer2;
  133.                 SetTimer2Baudraye(65536UL – (MAIN_Fosc / 4) / UART_BaudRate1);
  134.         }
  135.         /*********** 波特率运用定时曝光把持计1 *****************/
  136.         else
  137.         {
  138.                 TR1 = 0;
  139.                 AUXR &= ~0x01;                //S1 BRT Use Timer1;
  140.                 AUXR |=  (1<<6);        //Timer1 set as 1T mode
  141.                 TMOD &= ~(1<<6);        //Timer1 set As Timer
  142.                 TMOD &= ~0x30;                //Timer1_16bitAutoReload;
  143.                 TH1 = (65536UL – (MAIN_Fosc / 4) / UART_BaudRate1) / 256;
  144.                 TL1 = (65536UL – (MAIN_Fosc / 4) / UART_BaudRate1) % 256;
  145.                 ET1 = 0;        //取缔侦听
  146.                 INT_CLKO &= ~0x02;        无输入记录
  147.                 TR1  = 1;
  148.         }
  149.         /*************************************************/
  150.         SCON = (SCON) & 0x3f) | (1<<6);        // 8位最高纪录, 1位亲子关系方位, 1位中止位, 无校验
  151. //        PS  = 1;        //高优先考虑的事侦听
  152.         ES  = 1;        //容许侦听
  153.         REN = 1;        //容许收执
  154.         P_SW1 = P_SW1 & 0x3f;        //切换到 P3.0 P3.1
  155. //        P_SW1 = (P_SW1 & 0x3f) | (1<<6);        //切换到P3.6 P3.7
  156. //        P_SW1 = (P_SW1 & 0x3f) | (2<<6);        //切换到P1.6 P1.7 (必须运用内部记录)
  157.         for(i=0; i
  158.         B_TX1_Busy  = 0;
  159.         TX1_read    = 0;
  160.         RX1_write   = 0;
  161. }
  162. //========================================================================
  163. // 重大聚会: void        UART2_config(u8 短时间做成的公交零碎)
  164. // 界定方法: UART2设定初值重大聚会。
  165. // 参量: brt: 选择波特率, 2: 运用Time2做波特率, 其它值: 完全无用。
  166. // 重行提起: 单独也无。
  167. // 版本: VER1.0
  168. // 日期: 2014-11-28
  169. // 凡例:
  170. //========================================================================
  171. void        UART2_config(u8 短时间做成的公交零碎)        // 选择波特率, 2: 运用Time2做波特率, 其它值: 完全无用。
  172. {
  173.         u8        i;
  174.         /*********** 波特率有规律的定时曝光把持计2 *****************/
  175.         倘若(BRT) == 2)        SetTimer2Baudraye(65536UL – (MAIN_Fosc / 4) / UART_BaudRate2);
  176.         S2CON &= ~(1<<7);        // 8位最高纪录, 1位亲子关系方位, 1位中止位, 无校验
  177.         IE2   |= 1;                        //容许侦听
  178.         S2CON |= (1<<4);        //容许收执
  179.         P_SW2 &= ~1;                //切换到 P1.0 P1.1
  180. //        P_SW2 |= 1;                        //切换到 P4.6 P4.7
  181.         for(i=0; i
  182.         B_TX2_Busy  = 0;
  183.         TX2_read    = 0;
  184.         RX2_write   = 0;
  185. }
  186. //========================================================================
  187. // 重大聚会: void        UART3_config(u8 短时间做成的公交零碎)
  188. // 界定方法: UART3设定初值重大聚会。
  189. // 参量: brt: 选择波特率, 2: 运用Time2做波特率, 其它值: 运用Time3来达到波特率。
  190. // 重行提起: 单独也无。
  191. // 版本: VER1.0
  192. // 日期: 2014-11-28
  193. // 凡例:
  194. //========================================================================
  195. void        UART3_config(u8 短时间做成的公交零碎)        // 选择波特率, 2: 运用Time2做波特率, 其它值: 运用Time3来达到波特率。
  196. {
  197.         u8        i;
  198.         /*********** 波特率有规律的定时曝光把持计2 *****************/
  199.         倘若(BRT) == 2)
  200.         {
  201.                 S3CON &= ~(1<<6);        //BRT select Timer2
  202.                 SetTimer2Baudraye(65536UL – (MAIN_Fosc / 4) / UART_BaudRate3);
  203.         }
  204.         /*********** 波特率运用定时曝光把持计3 *****************/
  205.         else
  206.         {
  207.                 S3CON |= (1<<6);        //BRT select Timer3
  208.                 T4T3M &= 0xf0;                //中止计数, 重新安装把持位
  209.                 IE2  &= ~(1<<5);        //取缔侦听
  210.                 T4T3M |=  (1<<1);        //1T
  211.                 T4T3M &= ~(1<<2);        //定时
  212.                 T4T3M &= ~1;                无输入记录
  213.                 TH3 = (65536UL – (MAIN_Fosc / 4) / UART_BaudRate3) / 256;
  214.                 TL3 = (65536UL – (MAIN_Fosc / 4) / UART_BaudRate3) % 256;
  215.                 T4T3M |=  (1<<3);        //开始运行
  216.         }
  217.        
  218.         S3CON &= ~(1<<5);        //取缔多机传达方法
  219.         S3CON &= ~(1<<7);        // 8位最高纪录, 1位亲子关系方位, 1位中止位, 无校验
  220.         IE2   |=  (1<<3);        //容许侦听
  221.         S3CON |=  (1<<4);        //容许收执
  222.         P_SW2 &= ~2;                //切换到 P0.0 P0.1
  223. //        P_SW2 |= 2;                        //切换到 P5.0 P5.1
  224.         for(i=0; i
  225.         B_TX3_Busy  = 0;
  226.         TX3_read    = 0;
  227.         RX3_write   = 0;
  228. }
  229. //========================================================================
  230. // 重大聚会: void        UART4_config(u8 短时间做成的公交零碎)
  231. // 界定方法: UART4设定初值重大聚会。
  232. // 参量: brt: 选择波特率, 2: 运用Time2做波特率, 其它值: 运用Time4来达到波特率。
  233. // 重行提起: 单独也无。
  234. // 版本: VER1.0
  235. // 日期: 2014-11-28
  236. // 凡例:
  237. //========================================================================
  238. void        UART4_config(u8 短时间做成的公交零碎)        // 选择波特率, 2: 运用Time2做波特率, 其它值: 运用Time4来达到波特率。
  239. {
  240.         u8        i;
  241.         /*********** 波特率有规律的定时曝光把持计2 *****************/
  242.         倘若(BRT) == 2)
  243.         {
  244.                 S4CON &= ~(1<<6);        //BRT select Timer2
  245.                 SetTimer2Baudraye(65536UL – (MAIN_Fosc / 4) / UART_BaudRate4);
  246.         }
  247.         /*********** 波特率运用定时曝光把持计3 *****************/
  248.         else
  249.         {
  250.                 S4CON |= (1<<6);        //BRT select Timer4
  251.                 T4T3M &= 0x0f;                //中止计数, 重新安装把持位
  252.                 IE2   &= ~(1<<6);        //取缔侦听
  253.                 T4T3M |=  (1<<5);        //1T
  254.                 T4T3M &= ~(1<<6);        //定时
  255.                 T4T3M &= ~(1<<4);        无输入记录
  256.                 TH4 = (65536UL – (MAIN_Fosc / 4) / UART_BaudRate4) / 256;
  257.                 TL4 = (65536UL – (MAIN_Fosc / 4) / UART_BaudRate4) % 256;
  258.                 T4T3M |=  (1<<7);        //开始运行
  259.         }
  260.        
  261.         S4CON &= ~(1<<5);        //取缔多机传达方法
  262.         S4CON &= ~(1<<7);        // 8位最高纪录, 1位亲子关系方位, 1位中止位, 无校验
  263.         IE2   |=  (1<<4);        //容许侦听
  264.         S4CON |=  (1<<4);        //容许收执
  265.         P_SW2 &= ~4;                //切换到 P0.2 P0.3
  266. //        P_SW2 |= 4;                        //切换到 P5.2 P5.3
  267.         for(i=0; i
  268.         B_TX4_Busy  = 0;
  269.         TX4_read    = 0;
  270.         RX4_write   = 0;
  271. }
  272. void PrintString1(u8 提议)
  273. {
  274.     for (; *puts != 0;        puts++)
  275.         {
  276.                 B_TX1_Busy = 1;                标志发送忙
  277.                 SBUF = *puts;                发送八位位组
  278.                 while(B_TX1_Busy);        等候改变达到
  279.         }
  280. }
  281. void PrintString2(u8 提议)
  282. {
  283.     for (; *puts != 0;        puts++)
  284.         {
  285.                 B_TX2_Busy = 1;                标志发送忙
  286.                 S2BUF = *puts;                发送八位位组
  287.                 while(B_TX2_Busy);        等候改变达到
  288.         }
  289. }
  290. void PrintString3(u8 提议)
  291. {
  292.     for (; *puts != 0;        puts++)
  293.         {
  294.                 B_TX3_Busy = 1;                标志发送忙
  295.                 S3BUF = *puts;                发送八位位组
  296.                 while(B_TX3_Busy);        等候改变达到
  297.         }
  298. }
  299. void PrintString4(u8 提议)
  300. {
  301.     for (; *puts != 0;        puts++)
  302.         {
  303.                 B_TX4_Busy = 1;                标志发送忙
  304.                 S4BUF = *puts;                发送八位位组
  305.                 while(B_TX4_Busy);        等候改变达到
  306.         }
  307. }
  308. /********************* UART1侦听功用
  309. void UART1_int (完全无用) interrupt UART1_VECTOR
  310. {
  311.         倘若(RI)
  312.         {
  313.                 RI = 0;
  314.                 RX1_Buffer[RX1_write] = SBUF;
  315.                 if(++RX1_write >= RX1_Length)        RX1_write = 0;
  316.         }
  317.         倘若(TI)
  318.         {
  319.                 TI = 0;
  320.                 B_TX1_Busy = 0;
  321.         }
  322. }
  323. /********************* UART2侦听功用
  324. void UART2_int (完全无用) interrupt UART2_VECTOR
  325. {
  326.         if(RI2)
  327.         {
  328.                 CLR_RI2();
  329.                 RX2_Buffer[RX2_write] = S2BUF;
  330.                 if(++RX2_write >= RX2_Length)        RX2_write = 0;
  331.         }
  332.         if(TI2)
  333.         {
  334.                 CLR_TI2();
  335.                 B_TX2_Busy = 0;
  336.         }
  337. }
  338. /********************* UART3侦听功用
  339. void UART3_int (完全无用) interrupt UART3_VECTOR
  340. {
  341.         if(RI3)
  342.         {
  343.                 CLR_RI3();
  344.                 RX3_Buffer[RX3_write] = S3BUF;
  345.                 if(++RX3_write >= RX3_Length)        RX3_write = 0;
  346.         }
  347.         if(TI3)
  348.         {
  349.                 CLR_TI3();
  350.                 B_TX3_Busy = 0;
  351.         }
  352. }
  353. /********************* UART4侦听功用
  354. void UART4_int (完全无用) interrupt UART4_VECTOR
  355. {
  356.         if(RI4)
  357.         {
  358.                 CLR_RI4();
  359.                 RX4_Buffer[RX4_write] = S4BUF;
  360.                 if(++RX4_write >= RX4_Length)        RX4_write = 0;
  361.         }
  362.         if(TI4)
  363.         {
  364.                 CLR_TI4();
  365.                 B_TX4_Busy = 0;
  366.         }
  367. }

再现加密



一切的的新闻由51 HEI下载。
15W4K-4串口侦听接见.rar(88.77 KB, 下载次数: 57)

Published by sayhello

发表评论

电子邮件地址不会被公开。 必填项已用*标注