标题: 单片机C语言位定义不太明白 [打印本页]

作者: duanlian    时间: 2023-3-9 17:21
标题: 单片机C语言位定义不太明白
sfr P0      = 0x80;
sfr SP      = 0x81;
sfr DPL     = 0x82;
sfr DPH     = 0x83;


sbit P0_0 = 0x80;
sbit P0_1 = 0x81;
sbit P0_2 = 0x82;
sbit P0_3 = 0x83;


这种定义,地址都重复了也可以,网上看了看解释,还是不明白。大家能帮忙解释下吗?



作者: 188610329    时间: 2023-3-9 22:16
两种寻址方式, 一个字节寻址,一个是位寻址,  
位的  0x80   对应到 字节的 0x80 的 0 位
位的  0x81   对应到 字节的 0x80 的 1 位
位的  0x82   对应到 字节的 0x80 的 2 位

你可以把  
sbit P0_0 = 0x80;   理解成: sbit P0_0 = 0x80^0;
sbit P0_1 = 0x81;   理解成: sbit P0_1 = 0x80^1;
作者: 名字不是重点    时间: 2023-3-10 01:00
同样一个男人,在家里是老公,在厂旦是电工。
作者: Hephaestus    时间: 2023-3-10 06:07
哪怕把MCS51汇编稍微理解一些都不会问出这种问题。
作者: 王秋冬    时间: 2023-3-10 07:54
sfr P0   =0x80;   sfr  SP   =0x81; sfr  DPL   =0x82;  sfr  DPH   =0x83;这里定义的和下面的定义重复了,是不是说为了好分析程序才这样写的,比如SP/DPL/DPH,代表的是某个功能。有大佬帮忙详细的解释解释吗,谢谢。
作者: zhxzhx    时间: 2023-3-12 00:17
注意,一个是 sfr,一个是sbit,两套系统
作者: duanlian    时间: 2023-3-12 17:00
Hephaestus 发表于 2023-3-10 06:07
哪怕把MCS51汇编稍微理解一些都不会问出这种问题。

还请赐教!
作者: mino223    时间: 2023-3-12 17:15
duanlian 发表于 2023-3-12 17:00
还请赐教!

大神请赐教!!! 跪谢!
作者: npn    时间: 2023-3-12 17:50
sfr为字节寄存器地址,范围:0x80~0xFF,其中有16个地址可以位寻址,不能被8整除的不能位寻址访问(STC32除外)。
sbit为位寄存器地址,16个可位寻址字节有128个位地址,范围:0x80~0xFF,用于寄存器的位寻址访问。

作者: Hephaestus    时间: 2023-3-12 17:56
duanlian 发表于 2023-3-12 17:00
还请赐教!

你去看下51汇编。
作者: coody_sz    时间: 2023-3-13 10:46
寻址方式不同,地址可以重复。
作者: duanlian    时间: 2023-3-14 16:57
感谢大家的帮助,我还是好好学下汇编吧。




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1