找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4303|回复: 11
收起左侧

stc15f104w 8脚单片机支持串口通信功能吗?

  [复制链接]
ID:249769 发表于 2017-11-18 22:36 | 显示全部楼层 |阅读模式
各位大师‘’stc15f104w‘’这款单片机有串口通信功能的吗?
回复

使用道具 举报

ID:213173 发表于 2017-11-19 06:50 | 显示全部楼层
芯片型号 : STC15F104W

关于此芯片的重要说明:
  无硬件串口,可用软件模拟串口 (范例代码中有参考代码)
  有定时器0和定时器2 (注意:无定时器1)

回复

使用道具 举报

ID:432336 发表于 2018-12-11 22:39 | 显示全部楼层
wulin 发表于 2017-11-19 06:50
芯片型号 : STC15F104W

关于此芯片的重要说明:

范例你试过,是对的吗??
回复

使用道具 举报

ID:917140 发表于 2021-5-12 17:27 | 显示全部楼层
官方资料显示没有硬件串口
回复

使用道具 举报

ID:151348 发表于 2021-5-13 08:36 | 显示全部楼层
官方给出了软件模拟串口的程序,单片机手册上面有,亲测可用,我用来控制ESP8266没有问题
回复

使用道具 举报

ID:584814 发表于 2021-5-13 09:45 | 显示全部楼层
肯定可以不用怀疑,硬的不行就来软的。感觉这问题等同于人能吃饭么 ?
回复

使用道具 举报

ID:883031 发表于 2021-5-13 11:19 | 显示全部楼层
本身是没有串口的,就像楼上说的可以模拟串口。
回复

使用道具 举报

ID:849826 发表于 2022-1-6 16:58 来自手机 | 显示全部楼层
imxuheng 发表于 2021-5-13 08:36
官方给出了软件模拟串口的程序,单片机手册上面有,亲测可用,我用来控制ESP8266没有问题

我想用15F104w做个蓝牙遥控开关,就是串口不能用,能借鉴一下你的程序吗
回复

使用道具 举报

ID:155507 发表于 2022-1-6 18:12 | 显示全部楼层
6313 发表于 2022-1-6 16:58
我想用15F104w做个蓝牙遥控开关,就是串口不能用,能借鉴一下你的程序吗

给你个程序。
  1. /*---------------------------------------------------------------------*/
  2. /* --- STC MCU Limited ------------------------------------------------*/
  3. /* --- STC15Fxx 系列 软件模拟串口举例----------------------------------*/
  4. /* 如果要在程序中使用此代码,请在程序中注明使用了STC的资料及程序        */
  5. /* 如果要在文章中应用此代码,请在文章中注明使用了STC的资料及程序        */
  6. /*---------------------------------------------------------------------*/

  7. //本示例在Keil开发环境下请选择Intel的8058芯片型号进行编译
  8. //若无特别说明,工作频率一般为11.0592MHz


  9. #include "reg51.h"

  10. //-----------------------------------------
  11. //define baudrate const
  12. //BAUD = 65536 - FOSC/3/BAUDRATE/M (1T:M=1; 12T:M=12)
  13. //NOTE: (FOSC/3/BAUDRATE) must be greater then 98, (RECOMMEND GREATER THEN 110)

  14. //#define BAUD  0xF400                  // 1200bps @ 11.0592MHz
  15. //#define BAUD  0xFA00                  // 2400bps @ 11.0592MHz
  16. //#define BAUD  0xFD00                  // 4800bps @ 11.0592MHz
  17. //#define BAUD  0xFE80                  // 9600bps @ 11.0592MHz
  18. //#define BAUD  0xFF40                  //19200bps @ 11.0592MHz
  19. #define BAUD  0xFFA0                    //38400bps @ 11.0592MHz

  20. //#define BAUD  0xEC00                  // 1200bps @ 18.432MHz
  21. //#define BAUD  0xF600                  // 2400bps @ 18.432MHz
  22. //#define BAUD  0xFB00                  // 4800bps @ 18.432MHz
  23. //#define BAUD  0xFD80                  // 9600bps @ 18.432MHz
  24. //#define BAUD  0xFEC0                  //19200bps @ 18.432MHz
  25. //#define BAUD    0xFF60                //38400bps @ 18.432MHz

  26. //#define BAUD  0xE800                  // 1200bps @ 22.1184MHz
  27. //#define BAUD  0xF400                  // 2400bps @ 22.1184MHz
  28. //#define BAUD  0xFA00                  // 4800bps @ 22.1184MHz
  29. //#define BAUD  0xFD00                  // 9600bps @ 22.1184MHz
  30. //#define BAUD  0xFE80                  //19200bps @ 22.1184MHz
  31. //#define BAUD  0xFF40                  //38400bps @ 22.1184MHz
  32. //#define BAUD  0xFF80                  //57600bps @ 22.1184MHz

  33. sfr AUXR = 0x8E;
  34. sbit RXB = P3^0;                        //define UART TX/RX port
  35. sbit TXB = P3^1;

  36. typedef bit BOOL;
  37. typedef unsigned char BYTE;
  38. typedef unsigned int WORD;

  39. BYTE TBUF,RBUF;
  40. BYTE TDAT,RDAT;
  41. BYTE TCNT,RCNT;
  42. BYTE TBIT,RBIT;
  43. BOOL TING,RING;
  44. BOOL TEND,REND;

  45. void UART_INIT();

  46. BYTE t, r;
  47. BYTE buf[16];

  48. void main()
  49. {
  50.     TMOD = 0x00;                        //timer0 in 16-bit auto reload mode
  51.     AUXR = 0x80;                        //timer0 working at 1T mode
  52.     TL0 = BAUD;
  53.     TH0 = BAUD>>8;                      //initial timer0 and set reload value
  54.     TR0 = 1;                            //tiemr0 start running
  55.     ET0 = 1;                            //enable timer0 interrupt
  56.     PT0 = 1;                            //improve timer0 interrupt priority
  57.     EA = 1;                             //open global interrupt switch

  58.     UART_INIT();

  59.     while (1)
  60.     {                                   //user's function
  61.         if (REND)
  62.         {
  63.             REND = 0;
  64.             buf[r++ & 0x0f] = RBUF;
  65.         }
  66.         if (TEND)
  67.         {
  68.             if (t != r)
  69.             {
  70.                 TEND = 0;
  71.                 TBUF = buf[t++ & 0x0f];
  72.                 TING = 1;
  73.             }
  74.         }
  75.     }
  76. }

  77. //-----------------------------------------
  78. //Timer interrupt routine for UART

  79. void tm0() interrupt 1
  80. {
  81.     if (RING)
  82.     {
  83.         if (--RCNT == 0)
  84.         {
  85.             RCNT = 3;                   //reset send baudrate counter
  86.             if (--RBIT == 0)
  87.             {
  88.                 RBUF = RDAT;            //save the data to RBUF
  89.                 RING = 0;               //stop receive
  90.                 REND = 1;               //set receive completed flag
  91.             }
  92.             else
  93.             {
  94.                 RDAT >>= 1;
  95.                 if (RXB) RDAT |= 0x80;  //shift RX data to RX buffer
  96.             }
  97.         }
  98.     }
  99.     else if (!RXB)
  100.     {
  101.         RING = 1;                       //set start receive flag
  102.         RCNT = 4;                       //initial receive baudrate counter
  103.         RBIT = 9;                       //initial receive bit number (8 data bits + 1 stop bit)
  104.     }

  105.     if (--TCNT == 0)
  106.     {
  107.         TCNT = 3;                       //reset send baudrate counter
  108.         if (TING)                       //judge whether sending
  109.         {
  110.             if (TBIT == 0)
  111.             {
  112.                 TXB = 0;                //send start bit
  113.                 TDAT = TBUF;            //load data from TBUF to TDAT
  114.                 TBIT = 9;               //initial send bit number (8 data bits + 1 stop bit)
  115.             }
  116.             else
  117.             {
  118.                 TDAT >>= 1;             //shift data to CY
  119.                 if (--TBIT == 0)
  120.                 {
  121.                     TXB = 1;
  122.                     TING = 0;           //stop send
  123.                     TEND = 1;           //set send completed flag
  124.                 }
  125.                 else
  126.                 {
  127.                     TXB = CY;           //write CY to TX port
  128.                 }
  129.             }
  130.         }
  131.     }
  132. }

  133. //-----------------------------------------
  134. //initial UART module variable

  135. void UART_INIT()
  136. {
  137.     TING = 0;
  138.     RING = 0;
  139.     TEND = 1;
  140.     REND = 0;
  141.     TCNT = 0;
  142.     RCNT = 0;
  143. }

复制代码
回复

使用道具 举报

ID:624769 发表于 2022-1-6 19:32 | 显示全部楼层
6313 发表于 2022-1-6 16:58
我想用15F104w做个蓝牙遥控开关,就是串口不能用,能借鉴一下你的程序吗

STC官方ISP 里面有 定时器+INT4 模拟半双工 串口的 范例。绝对可用。
回复

使用道具 举报

ID:25310 发表于 2022-1-7 16:45 | 显示全部楼层
6313 发表于 2022-1-6 16:58
我想用15F104w做个蓝牙遥控开关,就是串口不能用,能借鉴一下你的程序吗

为啥不用STC8G1K08 ,也是8脚,才6毛5一片,功能强大多了。
回复

使用道具 举报

ID:879348 发表于 2022-1-7 17:26 | 显示全部楼层
官方就是串口下载程序,没有的话也可以软件模拟
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表