新概念51单片机C语言教程纠错(1)

寒假突发奇想学了一下51单片机,以前一直在用32系列,这一次用的是郭天祥新概念51单片C语言教程,发现里面一处错误,先写下来以免以后忘掉。
新概念51单片机C语言教程
正文第34页讲了如何对单片机总线编码,用了一个单片机控制8个LED的例子,语句P1=0xaa;原文理解是首先P1是一个端口集合(即总线),有八个控制的LED,0x表示十六进制数字,aa在十六进制中为10101010,相当于1,3,5,7置1(亮),2,4,6,8为0(灭)。
但是在我使用P1=0x37语句实验时发现,出现了4,7,8常亮的现象,即表示为00010011,但是0x37应为00110111,两组数据在高低位反置,0和1翻转,这就很让人迷惑。下图是0x37在proteus环境下的仿真。
在这里插入图片描述
经过一番试验后发现,在书中第34页原理图,第39页文字描述中有明显错误,错误原因为:
(1)、高低位错误,原理图中,D8应为高位,D1应为低位,所以显示应为(00110111=0x37)。
(2)、电平理解错误,二极管应在低电位时点亮,即D8亮时,代表高位为0。
而书本中例子是P1=0xaa;这个例子存在明显缺陷,想表述的意思是10101010,但是高低位错误后,结果一次反转,即为01010101,高低电平错误后二次反转,使得结果歪打正着正确,只要使用一个不对称的例子就会发现其书中例子存在明显错误。

发布了2 篇原创文章 · 获赞 0 · 访问量 92

猜你喜欢

转载自blog.csdn.net/toyjis/article/details/104033424