找回密码
 立即注册
楼主: LAOXU

电工们的业余爱好

[复制链接]
  • 打卡等级:以坛为家I
  • 打卡总天数:312
  • 最近打卡:2025-03-11 13:20:13

54

主题

1327

回帖

5395

积分

荣誉版主

积分
5395
发表于 2024-3-20 21:34:40 | 显示全部楼层
查表法 hex --> ascii ,  5个时钟周期(缺点, 太占内存)
       MOV      DPTR,#TAB_ASCII   // 1
       MOVC      A,@A+DPTR       // 4
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:312
  • 最近打卡:2025-03-11 13:20:13

54

主题

1327

回帖

5395

积分

荣誉版主

积分
5395
发表于 2024-3-20 21:46:29 | 显示全部楼层
本帖最后由 LAOXU 于 2024-3-20 21:50 编辑

我写了一个, 最快 4个时钟周期,最慢 7个时钟周期,
      CJNE    A,#10,$+3   // 1/3
      JC      $+4         // 1/3
      ADD     A,#7        // 1
      ADD     A,#30H      // 1     

最快时速度超查表法, 最慢时速度也超过标准法,   


回复 支持 反对

使用道具 举报 送花

2

主题

185

回帖

1048

积分

金牌会员

积分
1048
发表于 2024-3-20 23:56:35 | 显示全部楼层
LAO*** 发表于 2024-3-20 21:34
查表法 hex --> ascii ,  5个时钟周期(缺点, 太占内存)
       MOV      DPTR,#TAB_ASCII   // 1
       MO ...

要用MOVC A,@A+PC指令
ADD A,#偏移
MOVC A,@A+PC
总共需要4个时钟,像这种核心算法,用空间换时间还是很有用的,也就多10个字节左右
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:312
  • 最近打卡:2025-03-11 13:20:13

54

主题

1327

回帖

5395

积分

荣誉版主

积分
5395
发表于 2024-3-21 04:44:21 | 显示全部楼层
早些年, 网上流传着 4位HEX --> BCD 快速算法 PK , 看谁写的程序速度最快代码最短.

如有兴趣咱们来个 8位HEX --> BCD 算法 PK (这个工作量有点大),   
R4R5R6R7(无符号 LONG, 高在先, HEX) --> ACCR4R5R6R7(高在先, BCD)

要么来个简单一点的, HEX --> BCD 算法 常用的 除10 运算 ?  
8位HEX / 10  (这个工作量小),  R4R5R6R7(无符号 LONG, 高在先, HEX) -->R4R5R6R7(商, 高在先), ACC(余数).
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:516
  • 最近打卡:2025-05-04 05:36:32

24

主题

517

回帖

1002

积分

荣誉版主

积分
1002
发表于 2024-3-21 05:53:15 | 显示全部楼层
查表用到的数组,放在code空间,不占内存。
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:397
  • 最近打卡:2025-05-04 04:44:01

16

主题

702

回帖

2482

积分

金牌会员

积分
2482
发表于 2024-3-21 07:56:21 | 显示全部楼层
根据应用确定使用那种方法
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:505
  • 最近打卡:2025-05-04 08:26:51
已绑定手机

1

主题

836

回帖

1509

积分

金牌会员

积分
1509
发表于 2024-3-21 08:00:20 | 显示全部楼层
来膜拜各路大神
靡不有初,鲜克有终
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:174
  • 最近打卡:2025-05-03 10:00:19

44

主题

124

回帖

1445

积分

金牌会员

积分
1445
发表于 2024-3-21 08:22:07 | 显示全部楼层
来都来了,凑个热闹再走 :-)
想问下,8位 mcu编程,有一个 2 字节组成的数字,想拆分出个、十、百、千、万位。

目前是这样做的:
低 8 位,先除以 100,余数再除以10,这样就把低 8 位表示的数字分离出个、十、百位了;
高 8 位,如果不为0,那就循环它:
每轮循环依次给分离出来的个、十、百位,分别加6、5、2.从个位开始加,大于等于10,则向前一位进位。

接下来是实现。其中PASSEDSECONDSLOW和PASSEDSECONDSHIGH存储的是组成16位二进制的低、高8位;SECONDSDIGITS、SECONDSDIGITS +1、SECONDSDIGITS + 2、SECONDSDIGITS + 3和SECONDSDIGITS + 4存储分离出来的个、十、百、千和万位上不超过十进制9的数字:
  1. COMPSECONDSDIGITS:
  2.     MOV                A, PASSEDSECONDSLOW
  3.     MOV                B, #100D
  4.     DIV                AB
  5.     MOV                SECONDSDIGITS + 2, A
  6.        
  7.     MOV                A, B
  8.     MOV                B, #10D
  9.     DIV                AB
  10.     MOV                SECONDSDIGITS + 1, A
  11.     MOV                SECONDSDIGITS, B
  12.        
  13.     MOV                R7, PASSEDSECONDSHIGH
  14.     CJNE        R7, #00H, COMPSECONDSDIGITSLOOPL1
  15.     JMP                COMPSECONDSDIGITSEND
  16.     COMPSECONDSDIGITSLOOPL1:
  17.         MOV                A, #6D
  18.         ADD                A, SECONDSDIGITS
  19.         MOV                B, #10D
  20.         DIV                AB
  21.         MOV                SECONDSDIGITS, B
  22.         ADD                A, SECONDSDIGITS + 1
  23.         MOV                SECONDSDIGITS + 1, A
  24.                
  25.         MOV                A, #5D
  26.         ADD                A, SECONDSDIGITS + 1
  27.         MOV                B, #10D
  28.         DIV                AB
  29.         MOV                SECONDSDIGITS + 1, B
  30.         ADD                A, SECONDSDIGITS + 2
  31.         MOV                SECONDSDIGITS + 2, A
  32.                
  33.         MOV                SECONDSDIGITS + 3, #00H
  34.         MOV                A, #2D
  35.         ADD                A, SECONDSDIGITS + 2
  36.         MOV                B, #10D
  37.         DIV                AB
  38.         MOV                SECONDSDIGITS + 2, B
  39.         ADD                A, SECONDSDIGITS + 3
  40.         MOV                SECONDSDIGITS + 3, A
  41.                
  42.         MOV                SECONDSDIGITS + 4, #00H
  43.         MOV                A, SECONDSDIGITS + 3
  44.         MOV                B, #10D
  45.         DIV                AB
  46.         MOV                SECONDSDIGITS + 3, B
  47.         MOV                SECONDSDIGITS + 4, A
  48.         DJNZ        R7, COMPSECONDSDIGITSLOOPL1
  49.         COMPSECONDSDIGITSEND:
  50.             RET
复制代码


点评

8 位 HEX 是 4字节 (LONG) , 你这个算法速度太慢了, 例举的2字节已慢, 4字节要循环多少次啊? 不合适  详情 回复 发表于 2024-3-21 13:38
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:324
  • 最近打卡:2025-05-04 09:44:01
已绑定手机

21

主题

487

回帖

1049

积分

金牌会员

积分
1049
发表于 2024-3-21 08:32:01 | 显示全部楼层
说实话,我从小就喜欢和电有关的东西,好像真的不是为了钱,单纯的爱好,不是干这行的却有万用表、示波器、频率计,对任何电器都会去琢磨他的控制原理,虽然学的不深,但就是爱这玩意儿!
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:454
  • 最近打卡:2025-05-03 00:18:42
已绑定手机

13

主题

1257

回帖

2979

积分

金牌会员

积分
2979
发表于 2024-3-21 08:32:59 | 显示全部楼层
搞汇编代码确实有意思
回复 支持 反对

使用道具 举报 送花

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

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-5-4 10:19 , Processed in 0.131167 second(s), 107 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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