感觉国内的教育就是一坨啊
在理解时序图时往往有很多类似潜规则的东西,没有人教的话,很难看懂,对小白很不友好
这边我来解释几个常见误区
1.几乎所有时间节点的位置都和电平变化的时间是错开的,我常以为这一操作另有深意。但其实时间节点,就该是和电平的改变的位置是一致的,之所以这么做是为了看起来更“清晰”(😀)2.在这边我们看到DB0-DB7的时序变化是在E开了高电平之后的,所以我一直想那不应该是先使能,再设置数据吗?但以常识来讲,应该是先把数据先设置好再使能啊???终于我了解到这幅图的意思是指,在Vaild data(有效数据)这段时间一定要保持数据不变,其侧重点在于这段时间数据是正确且不变,而在这一时刻之前的数据理论上来讲什么状态都是可以的,但流氓的一点在于,那我在这之前写正确的数据也不错啊(😀),所以在使能之前写数据是对的。
那我使能之后写就错了?可以看到使能之后写数据给我们的时间只有红线这一块,这段时间其实是不确定的,只知道最小需要时间为Pwen-Tdsw=255ns,无法得知最大时间不能超过多少,但要在这一段时间写八位并口数据时间不一定能满足条件。假设89C51 的一个机器周期由 12 个时钟周期组成 。若外接晶振频率为 12MHz ,时钟周期是 (1/12\) μs ,机器周期就是 1μs 。那其实写入时间应该是1us,但即使这样我们还是无法得知能否在数据保持时间来临时,把正确的数据写上。所以我们没必要强行卡这个time(放过自己不好吗😀)。
另外我们看到这个时序图好多地方有两个线组成,其实就是表示两种不同的情况。为什么会有两种情况呢(😀)?以RS位举例,因为写LCD1602分为写数据和写地址,用RS这一位来进行控制,所以在写操作的时序图上,就有两种时序啦。(所以为什么不弄写数据和写地址两个图呢?是觉得自己能用一张图表示两种状态很厉害吗😀,sb😀)
下面我来写一下LCD1602的写数据的伪代码
void LCD_WriteData()
{
//写数据时RS要置1
RS=1;
//RW在读和写中选择写,即置0
RW=0;
//把数据端上来把
LCD_D[8]=Data[8];
//使能
E=1;
//数据读取的时间至少要195ns
Delay();
E=0;
//数据读取完了还保持时间10ns,这么点时间可以不加吧。。。,至此结束
Delay();
}