单片机C语言中计时计数器赋初值的一个疑问
单片机C语言编程-----------"..,需要计数器加1000下之后溢出,,所以推出必须给1计数器赋值为65536-1000,在C语言中相当于-1000"在之后给TH...
单片机C语言编程 -----------"..,需要计数器加1000下之后溢出,,所以推出必须给1计数器赋值为65536-1000,在C语言中相当于-1000" 在之后给TH1,TL1,赋值出现了-1000/256,-1000%256...
1.请问这句话里面C语言中相当于-1000怎么推导出来的...
2.怎么又推出了-1000/256,-1000%256就是要给的TH1,TL1的值.. 展开
1.请问这句话里面C语言中相当于-1000怎么推导出来的...
2.怎么又推出了-1000/256,-1000%256就是要给的TH1,TL1的值.. 展开
展开全部
第一个问题:
65536事实上就是0!
解释:对于16bit的寄存器而言,所能表示的最大正整数是16个1即十六进制的0xFFFF,十进制数为65535,若再加1,其进位必然溢出,结果就是16个0
所以65536-1000,就是-1000,也就是64536或0xFC18
第二个问题:
TH1和TL1分别是高8位寄存器和低8位寄存器,必然是TH1=OxFC,而TL1=0x18,这样算是可以的,但由于8位寄存器的所能表示的最大正整数是256,二者的关系是很明显的,故深入理解可知TH1寄存器中的数据实质上所表达的是256的倍数,相当于256进制,可以验证一下:
64536/256=252=0xFC
64536%256=24=ox18
不知道你懂了没有?
65536事实上就是0!
解释:对于16bit的寄存器而言,所能表示的最大正整数是16个1即十六进制的0xFFFF,十进制数为65535,若再加1,其进位必然溢出,结果就是16个0
所以65536-1000,就是-1000,也就是64536或0xFC18
第二个问题:
TH1和TL1分别是高8位寄存器和低8位寄存器,必然是TH1=OxFC,而TL1=0x18,这样算是可以的,但由于8位寄存器的所能表示的最大正整数是256,二者的关系是很明显的,故深入理解可知TH1寄存器中的数据实质上所表达的是256的倍数,相当于256进制,可以验证一下:
64536/256=252=0xFC
64536%256=24=ox18
不知道你懂了没有?
展开全部
这个好说,计数器是一个16位的寄存器,相当于一个unsigned int 的变量,也就是说它最大的容量是65536,(2^16次方)。当计数器不断的计数时,数值不断的加1,超过65536这后就会向CPU发一个中断信号,这时你就可以对这个信号进行处理,完成你的计数要求。也就是说,如果你要计数1000。那你就要给计数器一个初值65536-1000,然后计数器开始加1,加到65536后也就是加了1000后溢出,完成了你计数1000的要求。
值得一说的是如C51这类的单片机是8位的,所以把计数器分成了两个,TH1和TL1,它们分别装计数器的高8位和低8位。用65536-1000/256,获得高8位的初始值,用。。。。。1000%256获得低8位的初始什,为什么是256,因为是2^8次方。也就是8位的最大值。
值得一说的是如C51这类的单片机是8位的,所以把计数器分成了两个,TH1和TL1,它们分别装计数器的高8位和低8位。用65536-1000/256,获得高8位的初始值,用。。。。。1000%256获得低8位的初始什,为什么是256,因为是2^8次方。也就是8位的最大值。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
广告 您可能关注的内容 |