newlined 发表于 2024-5-13 11:23:03

关于C51的汇编移植为C251的汇编一个要注意的小细节

本帖最后由 newlined 于 2024-5-13 11:55 编辑

我有一个程序,原来在KEIL C51下编译,CPU用的是STC8H单片机,后来CPU升级为STC32G12K128,编译环境改为C251,运行一直不正常,后来发现,是程序中定义位变量的方式出了问题,以前定义位变量用的语句是:ABC    BIT   10H,在STC8H单片机中,内部RAM的20H到2FH是可以位寻址的,位地址范围在0~7F之间,这样定义是可以的,STC32G12K128内部RAM的20H到7FH都是可以位寻址,位地址范围在0~2FFH之间,如果定义最后一位岂不是要这样:ABC   BIT2FFH,地址表示部分超了一个字节了,可能不识别。后来使用 ABC      BIT      22H.0 的方式定义,程序就正常运行了。

18纯情男高中生 发表于 2024-7-31 09:37:43

楼主在吗?你这问题…是属于你自己的操作问题啊。22H.0是位寻址20H-2FH中的16H位啊。跟这个2FFH有什么关系呢?你的描述也不是很清晰,我无法做出相同判断

newlined 发表于 2024-7-31 10:37:24

18纯情男高中生 发表于 2024-7-31 09:37
楼主在吗?你这问题…是属于你自己的操作问题啊。22H.0是位寻址20H-2FH中的16H位啊。跟这个2FFH有什么关系 ...

22H.0是位寻址20H-2FH中的10H位,你可以仔细看下,16H是22H.6位。我的意思是说C
251编译器中位地址的表示方法跟以前不一样了,在C251编译器中,20H~7FH都可以位寻址,最后一位位地址是2FFH,应该用7FH.7表示。

18纯情男高中生 发表于 2024-7-31 16:33:59

newlined 发表于 2024-7-31 10:37
22H.0是位寻址20H-2FH中的10H位,你可以仔细看下,16H是22H.6位。我的意思是说C
251编译器中位地址的表示 ...

是10H,我记错了。只是上方您的写法有点模糊了,我没第一时间明白您是说C251 20H-2FH都可以位寻址
页: [1]
查看完整版本: 关于C51的汇编移植为C251的汇编一个要注意的小细节