社区闲人
发表于 2023-12-9 09:30:40
希望增加乘除复合运算。
u16 a,b,c;
计算 a*b/c.
LAOXU
发表于 2023-12-9 13:07:51
神农鼎 发表于 2023-12-9 00:16
估计杨老师会认为 STC8H系列8051 会再流行50年以上
===请杨老师为 51世界 多提宝贵意见
===咱把这 MDU32+...非常好, 赞一个!!!
最好把 DPTR 双指针 模式, 也改成 和 stc32 一样 (DPTR 共用同一地址), 至少 C语言 免强好调用, stc32由于寻址功能太强, 双指针用不上.
8H 的双指针 地址, 如能改为 C51支持的地址格式, 那使用就更方便了.
最后, 祝愿 STC8H 在功能上, 能早点实现 支持16 位堆栈指针 (堆栈放在 XRAM中) , 那就真正到 51的天花板了.OS 系统 跑起来一点也不差劲
现在 STC8H 的市场 比 STC32 大. 毕竟 有那么一帮子 老 51 用户在
等 20年后, 如果 我还活着, 来此处溜达一圈看看, 51是否 还是比 251坚挺~~~{:biggrin:}
神农鼎
发表于 2023-12-9 14:08:27
游泳的鸟儿 发表于 2023-12-9 09:25
希望再加一些 DSP 指令
请具体描述下
cdpzq
发表于 2023-12-9 14:51:16
希望多加一个串口到5串口,方便4串口,通过1个串口实现多芯片级联, 这样对外可以有独立4/8...等, SPI等也可以实现,就是程序会复杂点比较麻烦; 另外串口可以有一个发送完毕中断或标志位吗? 现在的串口中断是最后1bit发出后就置标志, 实际还没有发送结束, 这样做485接口时候需要延时, 不同波特率要设置不同延时也比较麻烦.如果有个标志在发完后置标志切换485就比较方便了, 如果可选发送完毕后再延时1-10个波特率时钟就更好了. 这样可以选择485切换是马上切换还是最多可以延时1个字节时钟切换就更方便了.或者这个标志也可以映射到一个IO上,这样就在很多时候不用选用MAX13487 这种自动切换芯片,实现普通485芯片也可以自动切换,且切换延时在一定范围内可以微调.
cdpzq
发表于 2023-12-9 15:01:37
也就是STC单片机硬件实现RS485自动收发功能. 在串口发送结束后, 立即或延时自动将关联IO脚拉低,自动切换到485接收状态. 如果这个IO在发送时候可选硬件自动置高的话,那485就和串口程序一样了, 不需要额外处理, 可以实现485自动收发.
LAOXU
发表于 2023-12-9 18:44:17
SPI 数据输出脚, 能否加 一级 反相器 ?
通过 寄存器 位, 设定 数据 输出是 同相 还是反相.
同相 : 常规输出,
反相 : 驱动 WS2812B 类芯片
LAOXU
发表于 2023-12-9 20:08:50
关于 MDU 的建议
MDU32 太占寄存器了, 51的 所有寄存器 R0-R7 被他全占了, 除了 long型 乘除运算, 对单精度的浮点运算提速, 帮助有限 (51内核 不是 251核, 可用寄存器太少了) ,
而基本运算库, 必须是可重入的函数, 浮点乘除运算远比定点 long型 乘除运算 复杂多了, 占用临时变量也多(因为是可重入的, 必须放在基本寄存器内), 如果寄存器
R0-R7 被 MDU32 全占用了, 那这个程序没法编写(硬编写出来的也是个鸡肋, 占用程序空间大,执行时间长,运行效率低).
注: 浮点乘除法, 用到 小数乘除法, 和普通的定点整数乘除法不同(定点的有效位数取后面, 小数的有效位数取前面).
因此, 我认为:
MDU16的 一些功能不能丢, 最省力的方法, 把 MDU16的相关数据寄存器, 从 XFR 中 移入到 SFR中 即可.
如想用 MDU32方式(通过 DMA 传输), 则应加入原 MDU16的 一些功能, 优先级别如下:
A类 (优先采用)
1. 16位x16位 无符号乘法 , R6R7 x R2R3(或者 R4R5) --> R4R5R6R7
注: 如能做到 32位x16位, 那更好, R4R5R6R7 x R2R3 --> R2R3R4R5R6R7
2. 32位/16位 无符号除法 , R4R5R6R7 / R2R3 --> R4R5R6R7,余数 R2R3
注: 如有困难,做到 16位/16位, 也可, R6R7 / R2R3(或者 R4R5) --> R6R7, 余数 R2R3(或者 R4R5)
3. 32位 数据规格化 , R5R6R7R4 --> R5R6R7R4,移位数 --> R0
4. 32位 逻辑右移 , 移位数放在 R0, R5R6R7R4 --> R5R6R7R4
注: 3,4项, R4放未位, 有助于 4舍 5入 , 优化浮点数运算速度, 如有困难,按依次存放做 R4R5R6R7 也可.
以上这些内容, 优先考虑 单精度的浮点运算提速, 兼顾 long型 和 int型 乘除运算.
B类 (厂方考虑)
1. 32位x32位 无符号乘法 , R4R5R6R7 x R0R1R2R3 --> R4R5R6R7
2. 32位/32位 无符号除法 , R4R5R6R7 / R0R1R2R3 --> R4R5R6R7,余数 R0R1R2R3
3. 32位 逻辑左移 , 移位数放在 R0, R5R6R7R4 --> R5R6R7R4
4. 32位 算术右移 , 移位数放在 R0, R5R6R7R4 --> R5R6R7R4
注: 关于有符号除法, 依厂方心愿, 是否加入
C类 (增强功能, 厂方考虑)
1. 16位 XRAM 间接寻址, 读取, @R2R1 --> A (以R2R1为地址, 读取 XRAM 内容送 ACC)
2. 16位 XRAM 间接寻址, 写入, A --> @R2R1 (以R2R1为地址, 将 ACC内容 写入 XRAM)
注: 以上内容相当于 增加一条 高速 @DPTR 读写 XRAM 指令, 如实现方使, 建议再多增加 1~2条(如增加 1条, 读优先)
1. 16位 XRAM 间接寻址, 读取, @R4R0 --> B (以R4R0为地址, 读取 XRAM 内容送 B)
2. 16位 XRAM 间接寻址, 写入, B --> @R4R0 (以R4R0为地址, 将 B内容 写入 XRAM)
注: ACC寄存器, 负担太重, 能存入 B寄存器最好, 如有困难,存入 ACC 也可
D类 (关于 DPTR )
最起码改成 和 STC32 一样( DPTR 地址 公用, C语言可用), 否则又是一个鸡肋.
当然, 能改成 C51/IAR 支持的 格式, 那最好了.
E类 (关于 16位 堆栈指针 )
51类的 天花板, 堆栈指针 增加到 16位, 堆栈放在 XRAM 中, 强力支持 OS , STC 是否考虑, 何时加入 ?
LAOXU
发表于 2023-12-9 20:11:40
关于 定时器 0 工作模式 3, 不可关闭的时钟中断,优先级最高, 能否调整到最低?以便 OS 系统能使用.
LAOXU
发表于 2023-12-9 20:19:08
神农鼎 发表于 2023-12-9 14:08
请具体描述下
桶式操作, 移N位 + 累加 , 一条指令完成
老姚如 有兴趣, 可 用于 STC32 等 上面,
这个 8位机 就算了,什么时候再加个 16位堆栈指针, 就算到天花板了
神农鼎
发表于 2023-12-9 20:24:09
桶式操作, 移N位 + 累加 , 一条指令完成
===帮详细描述下,R0 ~ R7 如何使用
乘加了,DSP的基本东西 ?
页:
1
[2]
3
4
5
6
7
8
9
10
11