news 2026/9/6 17:44:59

STC32G12K128计算e常数精确到小数点后9858位的汇编程序

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
STC32G12K128计算e常数精确到小数点后9858位的汇编程序

STC32G12K128单片机简介

STC32G12K128 是一款由宏晶科技 (STC) 生产的32位8051单片机,它的特点是:

  • 32位 8051 架构,但速度比传统的8051约快 70倍。
  • 1.9V 至 5V 工作电压,更适用于多种供电环境。
  • 128K 字节 FLASH,用于存储用户代码。
  • 4K字节内部 SRAM (edata),8K字节内部扩展RAM (xdata)。
  • 丰富的外接;DMA,RTC,CAN,多路串口,定时器,PWM,ADC,I2C,SPI等
  • 所有IO 口都支持中断
  • 支持 DMA:支持 SPI,I2C,ADC,UART,LCM 等接口的DMA功能。

本程序使用STC32G12K128具有8K 字节内部扩展RAM (xdata) 来存储 e  常数,精确到小数点后9858位。

e常数计算公式

             

迭代计算 e 的公式

计算数学常数 e 的方法之一是通过迭代公式。我们可以利用两个变量TERMA 和 TERMB 来逐步逼近 e。

初始值

  • TERMA(1)=2
  • TERMB(1)=1

迭代公式

对于 n=2,3,4,…,3210,我们可以使用以下公式:

  1. 计算TERMB:

           TERMB(n) = TERMB(n-1) / n​

      2. 计算 TERMA

           TERMA(n)=TERMA(n−1)+TERMB(n)

最终结果

  • 最终的 e 值为:

            e=TERMA(3210)

为什么选择n=3210?

我们选择 n 的最大值为 3210,因为在计算中:

           1/3210!≈1.1266×10^-9864

这远远超过了我们所需的小数点后 9858 位的精度,确保了计算的准确性。

STC32G12K128 (8051)串口设定

计算结束后,单片机把结果用串口1送出PC。设定如下:

        单片机串口1 (P3.1是TxD,P3.0是RxD)

        PC COM1 设定: 14400 bps, 8, None, 1, None

根据串口通信协议,当没有数据传输时,输出高电平,一个低电平代表起始位 (start bit),紧随8个位的数据 (由低位开始传送),奇偶位 (如有),以及停止位 (stop bit)。

串口1 Mode1的波特率由定时器控制。TMOD (地址 89H) 为定时器/计数器控制寄存器,其功能是设置定时器/计数器的方式。

GATE:0 定时器由软件控制位 TR1或TR0 来控制启动;1时INT1/INT0为高,TR1/TR0为1时才开定时器1/0。

C/T:0 为定时器;1 为计数器 (对T1/T0外部脉冲进行计数) 。

M1

M0

工作模式

工作模式说明

0

0

Mode 0

16 位自动重载 TH1/0,TL1/0模式。

0

1

Mode 1

16 位不自动重载模式。

1

0

Mode 2

两个8位,TL1/0自动重载TH1/0的重载值。

1

1

Mode 3

T1停止工作。T0 不可屏蔽中断的16位自动重载模式。

波特率产生方式

波特率可由 Timer1或 Timer2 所产生的溢出信号来控制。一般8051 把晶体振荡器的时钟频率 ÷12 获得机器周期频率,例如晶体振荡器 XTAL = 11.0592 MHz, 机器周期频率 = 11.0592 MHz÷12 = 921.6 kHz,串口线路把此机器周期频率 ÷32 再供应给 Timer1,即是 921.6 kHz ÷32 = 28,800 Hz。一般使用 Timer1 的 Mode 2 作为波特率产生器,即是8位自动重载模式。只要把重载值写入 TH1 就会产生波特率。

TL1、TH1 为Timer1定时器/计数器的计数寄存器,其地址为8BH、8DH。不同的TH1重载值产生不同的波特率。例如XTAL = 11.0592 MHz,需要波特率 9600 baud:

        TH1=256-(11059200/12/32/9600)=256-3=253=0xFD。

其余波特率可参考下表:

SBUF 寄存器为串口缓冲器,地址为 99H,使用同一个地址的两个寄存器构成的。一个为发送数据用的缓冲器,另一个寄存器为接收数据用的缓冲器。

SCON 为串口控制寄存器,其地址为 98H,其功能是设置串口工作方式与标志。

SM0、SM1控制串口的4种工作方式:

SM0

SM1

方式

功能说明

0

0

Mode 0

8位同步移位寄存器方式 (用于扩展IO)

0

1

Mode 1

8位异步收发,波特率可变 (由定时器控制)

1

0

Mode 2

9位异步收发,波特率为 ÷64 或 ÷32

1

1

Mode 3

9位异步收发,波特率可变 (由定时器控制)

SM2:用于多处理器通信,通常置 0。

REN: 1 允许串口接收;0 禁止串口接收。

TB8:发送的第9位数据,用于Mode2、Mode3,一般作为奇偶校验位使用。

RB8:接收的第9位数据,用于Mode2、Mode3,一般作为奇偶校验位使用。

TI:发送中断标志位,发送结束时硬件置1,注意TI必须由软件清零。

RI:接收中断标志位,接收结束时硬件置1,注意RI必须由软件清零。

串口初始化子程序

注意:STC32G12K128的工作频率定为 24.000 MHz。

INIT_UART:

                MOV   SCON, #0x50          ; 串口1 Mode1,波特率由Timer1定时器控制,允许串口接收
                MOV   TMOD, #0x20         ; Timer1 Mode 2 工作模式,8位自动重载模式
               MOV   AUXR, #0x40           ; T1x12=1, Timer1 1T mode (FOSC/1 不分频)
   &nbs

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/6 17:43:08

EdmondsKarp算法求最大流

EdmondsKarp算法是Ford-Fulkerson算法的特例,区别在于Ford-Fulkerson算法没有给出残存网络中增广路径的寻找方法,而EdmondsKarp算法使用广度优先搜索寻找增广路径 找到增广路径后沿其递增或递减流,得到更大的流,重复下去直到残存网…

作者头像 李华
网站建设 2026/9/6 17:34:18

trivy开源安全漏洞扫描器——筑梦之路

开源地址:https://github.com/aquasecurity/trivy.git 可扫描的对象 容器镜像文件系统Git存储库(远程)虚拟机镜像Kubernetes 在容器镜像安全方面使用广泛,其他使用相对较少。 能够发现的问题 正在使用的操作系统包和软件依赖项…

作者头像 李华
网站建设 2026/9/6 17:33:01

连锁餐饮SAP ERP实战:财务业务一体化与供应链协同落地指南

简介:一份面向连锁餐饮企业管理者、SAP实施顾问及零售信息化决策者的SAP ERP财务业务一体化解决方案文档,聚焦Hollys Coffee从6家门店向两年100家门店扩张中的管理痛点,内容覆盖财务集中核算、门店管理、采购与供应链协同、库存控制、客户与加…

作者头像 李华
网站建设 2026/9/6 17:32:50

随机振动试验全解析:IEC 60068-2-64-2019标准实操指南

简介:国际电工委员会IEC 60068-2-64-2019标准是一份针对产品环境振动试验的正式技术规范,面向电子设备研发、可靠性测试与质量管控人员,用于解决产品在运输、存储及实际使用中因振动导致的结构损坏、功能失效等问题,为开展振动环境…

作者头像 李华