1,TWINT必须置1来对TWINT清零什么意思既然置1了又怎么清零

TWINT必须置1来对TWINT清零 的意思是,往这个位置写1,该位置的值就变成0了,写0就保持不变,不管写前是1还是0,很多IC的寄存器是这么设置的。
你说呢...

TWINT必须置1来对TWINT清零什么意思既然置1了又怎么清零

2,现在的cpu寄存器是多少位啊通向内存的地址总线多少根啊

现在的cpu寄存器位数从8~128位。如我的机器Intel(R) Core(TM) i7-7700HQ上,AH(8位)、AX(16位)、EAX(32位)、MMX(64位)。听说AMD相关机器上有128位寄存器。

现在的cpu寄存器是多少位啊通向内存的地址总线多少根啊

3,32位汇编中寄存器的顺序是如何排序的

32位CPU有4个32位的通用寄存器EAX、EBX、ECX和EDX。
inc 寄存器或内存操作数加1不管是多少位寄存器不管是什么长度的内存都是+1不知道你是怎么理解的

32位汇编中寄存器的顺序是如何排序的

4,的值加1还是2si di 寄存器不是16位寄存器吗

INC是汇编语言中算术运算类指令,起到加1的功能。  助记符 指令说明 字节数 周期数  INC A 累加器加1 1 1  INC Rn 寄存器加1 1 1  INC direct 直接地址加1 2 1  INC @Ri 间接RAM 加1 1 1  INC DPTR 数据指针加1 1 2

5,单片机的SBUF寄存器是8位的那为什么我可以发送SBUF0xAA字

呵呵 你的理解有错误的地方 SUBF寄存器的确是一个8位的寄存器 但0xAA是一个2位的16进制数 0xAA转换成二进制数为 1010 1010 B 是可以装在一个8位的寄存器中的。一个字节 可以装的最大的十六进制数为0xFF。即 转换成二进制为 1111 1111 B你的错误是 0xAA本身就是一个字节的数 不可以将2个A A 分别拆开 变成2个字节的数据。 满意 就选满意回答哦
你好!0xaa是十六进制数而已,整体长度也就只有8个字节,左边一个a是一个字节(8位)中的高四位,而右边则是低四位。这个数值换成十进制表示是170。而如果是你要发送字符形式的0xaa就应该是"0xaa"要加双引号或者分四次用单引号发送,当然如果是四个字节的字符无论如何也要用串口连续发送四次才能完成。如有疑问,请追问。
你的理解有点偏差,0xAA是一个8位数相当于二进制的10101010不是两个字母A,两个字母A的话是一个16位数0x4141
0xAA就是一字节嘛,16进制,8位,10101010

6,CPU中各寄存器是多少位的

8086:ax,bx,cx,dx,bp,ds,sp,di各16位,其中ax,bx,cx,dx可分解为ah,al,bh,bl,ch,cl,dh,dl各8位。80386:将上述寄存器扩展为32位,命名为EAX,EBX等。另外还有一些对用户透明的暂存器、标志寄存器等,一般8086中为16位,80386中为32位。

7,汇编AX的问题

按理说,AX是寄存器,里面装的是数据,也就是0、1组成的二进制数,你要知道,不管是文字、字母、数字什么的,在计算机中存储的都是二进制数。 例如字母,它是字符,我们知道,字符都有对应的ASCII码,ASCII码就是表示字符的数字,在计算机中换算成二进制保存。 其实不止是寄存器,段寄存器、内存单元、磁盘等等,都是以二进制数保存数据的。 AX作为16位寄存器,可以保存2个字符,因为字符的ASCII码都是8位数字。AX保存字符时,可以高8位保存一个,低8位保存一个。 至于你说的16位2进制数能保存多少个字母?这个概念有点混淆。16位2进制数就是数,不是字母(就算是表示字母,也是字母的ASCII码)。这个数是2进制的,也就是说它只由0和1组成。这个数是16位的,也就是说它由16个0或者1组成。 汉字是两个字节(16位),要装到AX中,只能装一个汉字。 至于你说的一部词典能不能装下,这个有点夸张吧。词典的话,应该属于大量数据,再怎么样也是放到数组(内存中)里保存,不可能交给一个16位寄存器啊。词典和词的关系就像数组和元素的关系,我们是从数组中取出一个元素交给寄存器保存,然后进行相关的计算,而不可能说,把整个数组给寄存器保存。没有这样的说法。 就算是要把数组交给寄存器,那么,如果这个数组的数据在内存中是顺序存储的,可以吧数据的首地址交给寄存器保存,用寄存器来寻址(就像指针的用法一样),这个道理才可以说通。

8,在计算机内部无论是数据还是指令均用二进制的形式来存储人们在

16
偶是园子.其实看后面的问题就能看出是指点指令的分类.任何一台计算机的指令系统一般都包含有几十条到上百条指令,下面按一般计算机的功能把指令划分以下几种类型.(1)算术运算指令 计算机指令系统一般都设有二进制数加\减\比较和求补等最基本的指令,此外还设置了乘\除法运算指令\浮点运算指令以有十进制动算指令等.(2)逻辑运算指令一般计算机都具有与\或\非(求反)\异或(按位加)和测试等逻辑运算指令.(3)数据传送指令.这是一种常用的指令,用以实现寄存器与寄存器,寄存器与存储单元以及存储器单元与存储器单元之间的数据传送,对于存储器来说,数据传送包括对数据的读(相当于取数指令)和写(相当于存数指令)操作.(4)移位操作指令移位操作指令分为算术移位\逻辑移位和循环移位三种,可以实现对操作数左移或右移一位或若干位.(5)堆栈及堆栈操作指令.堆栈是由若干个连续存储单元组成的先进后出(filo)存储区,第一个送入堆栈中的数据存放在栈底,最后送入堆栈中的数据存放在栈顶.栈底是固定不变的,而栈顶却是随着数据的入栈和出栈在不断变化.(6)字符串处理指令.字符串处理指令就是一种非数值处理指令,一般包括字符串传送,字符串转换(把一种编码的字符串转换成另一种编码的字符串),字符串比较,字符串查找(查找字符串中某一子串),字符串匹配,字符串的抽取(提取某一子串)和替换(把某一字符串用另一字符串替换)等.(7)输入输出(i/o)指令.计算机本身公是数据处理和管理机构,不能产生原始数把,也不能长期保存数据.所处理的一切原始数据均来自输入设备,所得的处理结果必须通过外总设备输出.(8)其它指令.特权指令----具有特殊权限的指令,在多服务用户\多任务的计算机系统中,特权指令是不可少的.陷阱与陷阱指令---陷阱实际上是一种意外事故中断,中断的目的不是为请求cpu的正常处理,面是为了通知cpu所出现的故障,并根据故障情况,转入相就的故障处理程序.转移指令---用来控制程序的执行方向,实现程序的分支.子程序调用指令---在骗写程序过程中,常常需要编写一些经常使用的\能够独立完成的某一特定功能的程序段,在需要时能随时调用,而不必重复编写,以便节省存储空间和简化程序设计.
阿萨德

9,PCON0x00SCON0x50什么意思

将十六进制转换为二进制为pcon=0000 0000;scon=0101 0000.这些零和一具体代表什么意思,参看下面单片机中对这俩个寄存器每一位的定义: PCON主要是为CHMOS型单片机的电源控制而设置的专用寄存器,单元地址是87H,其结构格式如下: PCON电源管理寄存器结构: PCON D7 D6 D5 D4 D3 D2 D1 D0 位符号 SMOD - - - GF1 GF0 PD IDL 在CHMOS型单片机中,除SMOD位外,其他位均为虚设的,SMOD是串行口波特率倍增位,当SMOD=1时,串行口波特率加倍。系统复位默认为SMOD=0。 各位的定义: SMOD:该位与串口通信有关。 SMOD=0; 串口方式1,2,3时,波特率正常。 SMOD=1; 串口方式1,2,3时,波特率加倍。 GF1,GF0:两个通用工作标志位,用户可以自由使用。 PD:掉电模式设定位。 PD=0 单片机处于正常工作状态。 PD=1 单片机进入掉电(Power Down)模式 ,可由外部中断或硬件复位模式唤醒,进入掉电模式后,外部晶振停振,CPU、定时器、串行口全部停止工作,只有外部中断工作。 IDL:空闲模式设定位。 IDL=0 单片机处于正常工作状态。 IDL=1 单片机进入空闲(Idle)模式,除CPU不工作外,其余仍继续工作,在空闲模式下可由任一个中断或硬件复位唤醒。 SCON控制寄存器,它是一个可寻址的专用寄存器,用于串行数据的通信控制,单元地址是98H,其结构格式如下: SCON寄存器结构 SCON D7 D6 D5 D4 D3 D2 D1 D0 SM0 SM1 SM2 REN TB8 RB8 TI RI 位地址 9FH 9EH 8DH 9CH 9BH 9AH 99H 98H 各控制位功能介绍如下: (1).SM0、SM1:串行口工作方式控制位。 SM0,SM1 工作方式 00 方式0 01 方式1 10 方式2 11 方式3 (2).SM2:多机通信控制位。 多机通信是工作于方式2和方式3,SM2位主要用于方式2和方式3。接收状态,当串行口工作于方式2或3,以及SM2=1时,只有当接收到第9位数据(RB8)为1时,才把接收到的前8位数据送入SBUF,且置位RI发出中断申请,否则会将接受到的数据放弃。当SM2=0时,就不管第位数据是0还是1,都难得数据送入SBUF,并发出中断申请。 工作于方式0时,SM2必须为0。 (3).REN:允许接收位。 REN用于控制数据接收的允许和禁止,REN=1时,允许接收,REN=0时,禁止接收。 (4).TB8:发送接收数据位8。 在方式2和方式3中,TB8是要发送的——即第9位数据位。在多机通信中同样亦要传输这一位,并且它代表传输的地址还是数据,TB8=0为数据,TB8=1时为地址。 (5).RB8:接收数据位8。 在方式2和方式3中,RB8存放接收到的第9位数据,用以识别接收到的数据特征。 (6).TI:发送中断标志位。 可寻址标志位。方式0时,发送完第8位数据后,由硬件置位,其它方式下,在发送或停止位之前由硬件置位,因此,TI=1表示帧发送结束,TI可由软件清“0”。 (7).RI:接收中断标志位。 可寻址标志位。接收完第8位数据后,该位由硬件置位,在其他工作方式下,该位由硬件置位,RI=1表示帧接收完成。 在串口中断处理时,TI,RI都需要软件清"0",硬件置位后不可能自动清0,此外,在进行缓冲区操作时,需要ES=0,以防止中断出现。

10,单片机计数器的疑问

首先分析点从这里开始:uchar val val=th1*256+tl; 由于val是uchar 故表达式的值最终就是val=tl,因为th1*256(将th1左移8位)不管th1是什么结果只能取低8位,这里就是tl。因此read()返回值就是0-255,因此num的最大值就是100,由于num=100时th0和tl0都归零,故tl的值也只能是0-100,所以并不会向th0进位,那么th0的值就不会改变,故th1和th2始终都是一样的值。另外,if(th1==th2)并不等同于if(TH0==TH0),如果tl0向th0进位的话有可能在两条语句执行后会有差异。另外,数码管显示出来的只并不是0-100连续变化的。 额 分析到这里的时候,突然发现崩溃了,原来if(num >= 100)后面还有很多语句要执行,故有可能在tl变到100时并没有遇到if(num >= 100)所以tl的值还是0-255,num的值也是0-255.其他的都差不多了,如果回答错了还望各位指正。
计数器计数的时候,是从低位往高位计数。 也就是先计满TL0,够了256,再往TH0进行进位1。 TH0中的1,就代表256, 所以,计数器的总数,就是= TH0 * 256 + TL0。 ==== 计数器的数值,不能一次性读出,只能分别读TH0、TL0。 在读出其中一个时,另一个,可能正赶上进位,这样,读出的两个值,就是错误的。 只有读两次,两次相等了,读出的,才是正确的当前计数值。 while(1) { //死循环 th1 = TH0; //读出第一次 tl = TL0; //读出另一个 th2 = TH0; //重新读出第一个 if(th1 == th2) break; //两次相等,就跳出循环 }
而特忍痛
应该这样理解吧: 1、THO和TL0是2的8次方是256个数,其数值还是0-255; 2、从程序中看,这个单片机的计数器不具有锁定功能,读了TH、再读TL之后,可能TL已经发生了进位,TH的值就会发生改变,只有2次TH值一样,此时读到的TH和TL值才有意义,我认为程序中的 th1=TH0; th2=TH0; tl=TL0; 应该写成 th1=TH0; tl=TL0; th2=TH0; 3、最后的计数值VAL=th1*256+tl,这是2个8位寄存器拼成一个16位寄存器的算法,比如计数值为512,那么此时肯定TH=2,TL=0,2*256+0=512.
先来句题外话:老郭的书思路还是可以的,程序实在不敢恭维,看见dula,wela这两个经典变量就有点起鸡皮。 1,0-255就是256个数,定时器从0数到255,共256个数,没有256,256就是0,就是溢出中断的那一个时间点(针对8位定时器或TH); 2,事实上上面的程序时没有IF(TH0==TH0)这一句,这是你自己理解的,老郭的原程序是 while(1) { th1=TH0; th2=TH0; tl=TL0; if(th1==th2) break; } val=th1*256+tl; return val; } 虽然把TH0分别赋给了th1,和th2,然后判断这两个变量(记住这是变量,相对来说你不改变,它的值是死的;而TH0是定时器的寄存器,只要定时器运作,它是时时在改变的)是否相等,但并不等价于你理解的IF(TH0==TH0),当th1=TH0;th2=TH0;这两句中间,TL0是走了一个数的(假设你的单片机对定时器没有分频),也就是说,th1,th2虽然同样是读取TH0这同一个寄存器,但读到的值是有可能不同的,虽然这个机会很小,就是当TL0=255跳到0的那个时间点上。你程序只贴了一部分,我看不懂是用为干什么的,但老郭的这段程序似乎是要排除好个时间点。不明白用意,但你知道程序是用来干什么的,你可以自己思考。 3,第三个问题就是概念性问题了,TH0是定时器的高位,TL0走满256个数它才进1,TH0加1就是表示定时器走了256个数啊。整个表达式VAL的意思是计算定时器从0开始已经走了多少数啊,至于这个用来干什么,我就不知道,它的初始化是多少,上面程序里也没有,你自己思考吧。

文章TAG:不管是多少位寄存器不管  多少  寄存器  
下一篇