要不要这样子呢
分析一下到底是上升沿还是下降沿读写数据
在看芯片pdf文档的时候总是容易被迷糊,总结一下,通过看时序图了解到底是上升沿还是下降沿读写数据!
首先必须明白的几个术语:
1. Read和Write:Read和Write均是指MCU的读和写。
2. Output和Input:在芯片官方文档中大多会有input和ouput介绍,显然是指器件的输入和输出。这里和上面的Read与write相对应。对应关系是:
/*
** 函 数:single_byte_read
** 参 数: unsigned char commd--读之前必须写入的命令
** 返回值: unsigned char tempbyte--读取的1byte数据
** 说 明: 这只是一个例子函数,对应上面的时序图所写的完整的读1字节数据函** 数
*/
unsigned char single_byte_read(unsigned char commd)
{
int i;
unsigned char tempbit;
unsigned char tempbyte;
/* 初始化*/
CE = 0;
SCLK_OFF;
/* 写1byte 数据(R/W,addr,R/C,1):读的地址命令*/
/* 数据总线上先准备好数据,上升沿写入数据到器件*/
for(i=0;i<8;i++)
{
if(commd & 0x01)
DataIO = 1; //数据总线上准备数据1
else
DataIO = 0; //数据总线上准备数据0
commd=commd>>1;
SCLK_ON; //上升沿来临,MCU将数据写入器件
_NOP();
SCLK_OFF; //再次拉低,为下一个数据提供上升沿条件
}
/*写完命令之后, 从器件读1byte数据*/
/*下降沿通知器件更新数据,等待其稳定之后读取数据*/
for(i=0;i<8;i++)
{
if(DataIO) //紧接上面写命令的最后一个信号是下降沿信号,故此时第一位数据即是器件更新数据
tempbit = 0x80;
else
tempbit = 0;
tempbyte = tempbyte >> 1 | tempbit;
SCLK_ON; //上升沿,为下降沿提供条件
_NOP();
SCLK_OFF; //下降沿来临,通知器件更新数据,在下一个循环中MCU读取更新的数据.
}
return tempbyte;
}
posted on 2011-12-31 20:00 Freedomxura 阅读(180) 评论(0) 收藏 举报
浙公网安备 33010602011771号