我是单片机设计入门菜鸟,想问高手一个问题!
书上原文:(sfrP1=0x90;//因P1端口的寄存器是可位寻址的,所以我们可以定义sbitP1_1=P1^1;//P1_1为P1中的P1.1引脚//同样我们可以用P1...
书上原文:(sfr P1 = 0x90; //因P1 端口的寄存器是可位寻址的,所以我们可以定义
sbit P1_1 = P1^1; //P1_1 为P1 中的P1.1 引脚
//同样我们可以用P1.1 的地址去写,如sbit P1_1 = 0x91;)
这样我们在以后的程序语句中就可以用P1_1 来对P1.1 引脚进行读写操作了。
想问一下这句话是什么意思,sfr后的P1是变量吗?为什么给它赋ox90,这个语句实现了什么功能,和普通的赋值语句有什么不一样?为什么这样定义后就可以通过P1对P1端口进行控制了?ox90有什么特点?是地址值吗?如果是地址值的话,p1_1为什么要是ox91呢,它只是个位变量啊,而ox90和ox91相差了8位啊! 展开
sbit P1_1 = P1^1; //P1_1 为P1 中的P1.1 引脚
//同样我们可以用P1.1 的地址去写,如sbit P1_1 = 0x91;)
这样我们在以后的程序语句中就可以用P1_1 来对P1.1 引脚进行读写操作了。
想问一下这句话是什么意思,sfr后的P1是变量吗?为什么给它赋ox90,这个语句实现了什么功能,和普通的赋值语句有什么不一样?为什么这样定义后就可以通过P1对P1端口进行控制了?ox90有什么特点?是地址值吗?如果是地址值的话,p1_1为什么要是ox91呢,它只是个位变量啊,而ox90和ox91相差了8位啊! 展开
2个回答
展开全部
首先,端口引脚是和寄存器相映射的,比如,在你这里,p1端口,映射的地址是0x90,给0x90这个地址写一个8位的数据,就是相应的给p1端口的8个引脚设置相应的电平。比如,你给P1写0xff,那么,从0x90到0x97里面的数据都是1,对应的管脚,p1.0到p1.7都是高电平。
那么,有些时候需要单独对某个管脚操作,怎么办呢?只要对某个管脚对应的那个寄存器的位来进行赋值即可。对于你这里面的情况,估计是51单片机,p1.1引脚的地址就是0x91,(因为p1端口的总起始地址是0x90),所以,只要对0x91来赋值就行了,但程序里总用0x91会比较难看,所以,给他取个代号,p1_1,(sbit p1_1 = 0x91就是起代号,当然,sfr 也是起代号,不过一个是一组引脚一个是一个引脚,所以命令不一样)
51单片机是可以位寻址的,所以有这些命令,某些别的单片机,有的不能位寻址,要对位操作就比较麻烦。还有的可以位寻址,但计算方式比较复杂,不象51这样, p1.1就是0x91,p1.2就是0x92了。
那么,有些时候需要单独对某个管脚操作,怎么办呢?只要对某个管脚对应的那个寄存器的位来进行赋值即可。对于你这里面的情况,估计是51单片机,p1.1引脚的地址就是0x91,(因为p1端口的总起始地址是0x90),所以,只要对0x91来赋值就行了,但程序里总用0x91会比较难看,所以,给他取个代号,p1_1,(sbit p1_1 = 0x91就是起代号,当然,sfr 也是起代号,不过一个是一组引脚一个是一个引脚,所以命令不一样)
51单片机是可以位寻址的,所以有这些命令,某些别的单片机,有的不能位寻址,要对位操作就比较麻烦。还有的可以位寻址,但计算方式比较复杂,不象51这样, p1.1就是0x91,p1.2就是0x92了。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询