首先,我想说,以下我说的这件事情,实在有点匪夷所思,大家可以认为是我糊涂了,或者喝醉了也不无不可(的确,刚才我郁闷了半天的确是买了一罐啤酒在喝)但是,我所看到的现象实在让我难以理解,所以请大家帮个忙,做做实验。我现在手上有3500多芯币,也就是说,我的芯币足以支付给35个朋友,而且我保证绝对不食言。事实上,这并不是一个很复杂的实验。
首先要求,你使用的51单片机最好是STC12C2052或者STC12C2052AD。至于用其他STC型号的朋友,我也会酌情考虑给芯币(我这个招集贴有点狠了,所以估计未来几日内我会瞬间破产,请大家原谅。)帖子标题不是骗人,只是有80字限制,我只能把具体型号压在这里以下是程序,你会惊讶它如此简单。是的,我希望所有人都会发帖恶狠狠地骂我脑子给驴踢了。
#include<reg52.h>
sfr SPSTAT = 0x84; //这就是一个简单的定义:定义SFR里地址为0x84的一个寄存器为SPSTAT,是的,如果你做过SPI通信你就知道,它是SPI三个寄存器之一,事实上,这次我正是在做SPI通信。
void main(void){ SPSTAT = 0xF3; //简单的赋值 P1 = SPSTAT; //通过P1口的流水灯,我只是想看一下0xF3而已...}
好了,在你做实验以前,是该让你知道,为啥我会发这么一个贴,并给出一个这么脑残的程序让大家测试了。
事情如我注释里所说,我本来在做SPI的通信,这是准备用在nRF24L01的操作里的,因为我没有做过SPI的,我决定先做一下SPI,确定我能通过SPI把数据传递出去(我在两个2052之间做通信)
可是,现在你们请忽略以上这些背景,因为,到最后,也是刚才,我做的只有一件事情。就是跑上面那个只有三句代码的破程序。
你猜猜我看到的P1流水灯是怎么个亮法?好吧我告诉你——全亮!全亮!!!我多希望我瞎了!!!我又尝试了一下把SPSTAT这个寄存器赋予其他地址,比如它附近的0x83,0x87,甚至在pdf里,空定义的0x80.我也试过,可是它们好好的,就是亮了两个灯(第3 和 第4位,当然是从LSB开始数起)
我开始产生一种奇怪的想法,当然这种想法,因为有过太多次的惨痛经验,我不敢说出来,也不敢去相信。但是我还是试了,我换了一块STC12C2052AD。(这是同一个系列的,差别只在多了一个AD,而且PDF里也是放在一起说的。)
可是,实验的结果一模一样!
面对这样的结果,我真的不知道该做何感想......但也许我真的糊涂了——是的,我经常犯一些极端的弱智错误,所以,我诚心诚意发帖,请求大家帮忙,测试测试。看看程序,也许你能一下看出问题何在。
对了,我们差点忘记,老姚在pdf里常说的一句话。说“STC的速度实在太快了,所以可能IO口的变化来不及......."那么,我又加试了下面这个程序#include<reg52.h>
sfr SPSTAT = 0x84;
void main(void){ char i = 0; SPSTAT = 0xF3; for(i = 0; i < 40;i++) {} P1 = SPSTAT; while(1);}我可以告诉你,结果一模一样
我想起,我之前忘了在第一个程序里加一个死循环,让单片机停在那里,嗯嗯......很值得怀疑哦(是吗?)没关系,我也给你试试#include<reg52.h>
sfr SPSTAT = 0x84;
void main(void){ SPSTAT = 0xF3; P1 = SPSTAT; while(1);
}
不好意思,我也希望它的结果会不一样......
-=----------------好了,童鞋们,大叔们,阿姨们,姐姐们......请帮我做这样一个实验吧.小弟无以为报,但还有3500个芯币。(当然了,你如果有兴趣,还可以把那128个RAM地址全试一遍,也许你会有更多新发现。当然,我也更希望,老姚会看到这个帖子,然后指教一下我这个后生,犯了什么错误)
此帖出自
小平头技术问答
你说的是啥,我没听懂.....
敢情你的意思是我写1是零,写零还是零?
一周热门 更多>