📱 手机上看不到完整课程(数字人讲师需要电脑浏览器的 3D 支持)。下面是这节课的图文讲解 + 音频,内容完全一样,手机上也能完整学完。想体验完整课程,用电脑打开这一页即可。
仍然在手机上试试完整课程
为什么要有转换:同一个数,两种存法
0:36同一个数,两种存法
- 图上是两条都在送一千二百三十四,差别只在后面跟 K 还是 H
- K 走普通二进制机器按二进制存,D0 里就是一千二百三十四
- H 走 BCD 存法D10 里是十六进制 1234,机器一读成了四千六百六十
- 所以得有个东西翻译拨码开关、时钟寄存器里存的都是 BCD 格式
同一个 1234 的两种存法
先弄明白一件事:同一个数,为什么会需要转换。看图上两条,都在送一千二百三十四。上面那条后面跟 K,机器按普通二进制存,D0 里就是一千二百三十四。下面那条跟 H,是人为按另一种格式存进去的,D10 里装着十六进制的 1234,可机器一读成了四千六百六十。差别就在 BCD 这种存法上:每一位十进制数单独占半个字节。拨码开关送进来的、时钟寄存器里存的,都是这种格式,得有东西帮我们翻译。
BIN:把拨码开关和时钟读回来的 BCD 码翻译成机器认的数
0:38BIN:把 BCD 码翻成机器认的数
- 读回来都是 BCD拨码开关和时钟给的,是另一种叫 BCD 的格式
- 手册例子是读时钟HD0~HD6 存秒分时日月年星期,七个值全是 BCD
- 就用 BIN 翻译源写 D0、目标写 D10,翻完才能拿去做运算
- 翻完才是能算的数机器读出来是 4660,翻完变成 1234
BIN:源 D0 是 BCD 的 1234
读拨码开关、读时钟,拿回来的都是 BCD 码。手册上举的是读时钟:秒、分、时、日、月、年、星期,七个数分别存在 HD0 到 HD6 里,全是 BCD。想拿它们做加减比较,先得用 BIN 翻译一遍。图上源写 D0,目标写 D10。D0 里现在放着 BCD 的 1234,机器读出来是四千六百六十;走过 BIN,D10 变成一千二百三十四,这才是能算的数。把它换成五十九,D10 立刻变成五十九。
BCD:把机器算的数翻成对面认的存法
0:39BCD:翻成对面认的存法
- 送显示要走这条机器算完的数,显示屏和变频器只认 BCD 存法
- 翻完 D10 变了1234 走 BCD 之后,变成十六进制的 1234
- 别被监控吓到监控条显示 4660,不是算错,是存法不一样
- 手册也提醒过看浮点要用自由监控、选对类型,是同一个道理
BCD:源 D0 是一千二百三十四
反过来那半就是 BCD。机器算完的数要送去显示,或者给变频器当频率设定,对面只认 BCD 存法,得先用 BCD 指令把机器里的二进制数翻过去。图上源 D0 是一千二百三十四,走过 BCD 之后,D10 变成十六进制的 1234。有个容易吓人的地方:监控条上 D10 显示四千六百六十,不是一千二百三十四。它没算错,只是存法不一样,手册讲浮点监控时也专门提醒过。把它换成四十,D10 跟着变成六十四。
FLT / INT:整数和浮点互转,小数是四舍五入
0:37FLT 转浮点 · INT 转回整数
- 为什么要互转整数和浮点底层存放格式完全不一样
- FLT 占两格1234 变成浮点后,装在 D10、D11 两个寄存器里
- 看浮点要选类型监控条上是两个怪数,手册专门讲过要用自由监控
- INT 是四舍五入130.2 得 130、130.8 得 131,不是把小数砍掉
FLT 转浮点 · INT 转回整数
接下来是浮点。整数和浮点底层存放格式完全不一样,所以两边要互相转。FLT 把整数变浮点,它要占两个寄存器:D0 里的一千二百三十四,走过 FLT 之后装在 D10、D11 两个格子里。监控条上这两个格子看着是怪数,手册里专门讲过,看浮点要用自由监控。反过来是 INT,把浮点变回整数,手册原例是浮点一百三十点二,INT 之后得一百三十。小数是四舍五入不是砍掉,一百三十点八会进位成一百三十一。
DECO / ENCO:一个编号点亮一路,再把那一路编回编号
0:37一个编号 ⇄ 点亮第几路
- 跟上一课接得上移位是整体挪位,译码是把编号变成哪一路
- 源里给个编号源写 5、位数写 3 → 八路里第 5 路 M15 亮
- 反过来是 ENCO八路里哪一路通着,就编回那个编号
- 只认最高那一位多路同时通时,低位直接忽略
一个编号 ⇄ 点亮第几路
再说译码和编码,这一对跟上一课的移位接得上。译码 DECO 干的事是:源里给个编号,就把目标那一排里对应的一路点通,其余全灭。图上源写个五,位数写三,也就是八路,结果 M10 往后数第五路 M15 亮,从零数起。一个编号进来只亮一路,这是它最常见的用法。反过来那半叫 ENCO 高位编码:哪一路通着,就编回那个编号,图上编回来 D20 又是五。手册还提一句:多路同时通时只认最高的那一位,低位忽略。
ASCI / HEX:把数翻成字符发给屏幕,收到的字符再翻回来
0:38ASCI 发字符 · HEX 收回来
- 屏幕只认字符数值得先翻成字符,才能发给屏或上位机
- 从最低一位翻起一位一位翻成字符,一个字节一个字节往目标里排
- 手册那条注十六进制的 A,翻成 ASCII 的字符 A
- HEX 是反过来的把收到的字符还原成数,图上 D20 回到 1234
ASCI 发字符 · HEX 收回来
这一对是跟显示屏、上位机说话的。屏幕只认字符,数值得先翻成字符。ASCI 就是干这个的:从最低那一位开始一位一位翻成字符。图上源是十六进制的 1234,写 K4,翻完 D10、D11 里就是字符四三二一。手册那条注很直白:十六进制的 A 翻成 ASCII 的字符 A。把源靠下那一位换成 A,D10 低字节就变成字符 A。反过来那半是 HEX,把收到的字符还原成数,D20 又回到 1234。