这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » MCU » 关于R8C单片机IO口的问题

共7条 1/1 1 跳转至

关于R8C单片机IO口的问题

菜鸟
2008-12-31 15:31:00     打赏

这是瑞萨官方网站的例程的一部分关于I2C的

#define iic_sda_d  pd1_2
#define iic_sda  p1_2
#define iic_scl_d  pd1_3
#define iic_scl  p1_3

/************************************************************************************
 Name   : initIicBus
 Parameters  : None
 Returns  : None
 Description : initialize I2C-BUS port
 Note   :
************************************************************************************/
void initIicBus(void)
{
 iic_sda_d = 0;   /* SDA input ("H" state) */
 iic_scl_d = 0;   /* SCL input ("H" state) */
}

/************************************************************************************
 Name   : StartCondition
 Parameters  : None
 Returns  : None
 Description : Output Start Condition (I2C-BUS)
 Note   : *1 adjust a wait time
************************************************************************************/
void StartCondition(void)
{
 iic_scl = 0;    /* SCL="L" */
 iic_scl_d = 1;    /* SCL output */
 _WaitTime1us();    /* wait *1 */
 iic_sda_d = 0;    /* SDA="H" */
 _WaitTime1us();    /* wait */
 _WaitTime1us();    /* wait *! */
 iic_scl = 1;    /* SCL="H" */
 _Wait_tSU_STA;    /* wait */
 iic_sda = 0;    /* SDA="L" */
 iic_sda_d = 1;    /* SDA output */
 _Wait_tHD_STA;    /* wait */
 _WaitTime1us();    /* wait *1 */
 iic_scl = 0;    /* SCL="L" */
}

iic_sda_d不是P12方向寄存器吗?怎么iic_sda_d = 0注释的意思是SDA="H",
而iic_sda = 0 的注释的意思SDA = "L",i
ic_sda_d =1注释的意思是“SDA output" 
那iic_sda_d是方向寄存器还是输出电平的
那iic_sda的作用又什么哪?
那是不是改为如下
void StartCondition(void)
{
 iic_scl = 0;    /* SCL="L" */
 iic_scl_d = 1;    /* SCL output */
 _WaitTime1us();    /* wait *1 */
 iic_sda = 1;    /* SDA="H" */
 _WaitTime1us();    /* wait */
 _WaitTime1us();    /* wait *! */
 iic_scl = 1;    /* SCL="H" */
 iic_sda_d =1;  /* SDA output */
_Wait_tSU_STA;    /* wait */
 iic_sda = 0;    /* SDA="L" */
 _Wait_tHD_STA;    /* wait */
 _WaitTime1us();    /* wait *1 */
 iic_scl = 0;    /* SCL="L" */
}
请教各位高手帮忙说一下




关键词: 关于     单片机     问题    

菜鸟
2009-01-06 09:12:47     打赏
2楼

怎么没人回答?


助工
2009-01-07 11:23:32     打赏
3楼
尽信书则不如无书。

ic_sda_d =1注释的意思是“SDA output"  即为   “允许 SDA输出”。
iic_sda=1   管脚输出高。

菜鸟
2009-01-22 09:57:41     打赏
4楼
 iic_sda_d = 0;   /* SDA input ("H" state) */
此意思是初始化的时候,SDA引脚的方向寄存器设为输入,IIC总线上初始化为“H”状态
此时该器件不占用总线

菜鸟
2009-02-24 18:02:14     打赏
5楼

要结合资料看书,


菜鸟
2009-03-09 21:11:24     打赏
6楼

这个问题是这样的:
IIC总线是个允许多主机的总线,因此,为了防止电平冲突,采用线与(低电平有效)的方式。因此,如果使用I/O来模拟IIC,最好使用N沟开漏输出的I/O。
但是R8C没有可以设定成N沟开漏输出的I/O(只有在作为UART的TXD时,可以选择N沟开漏输出)。这个时候,为了避免电平冲突,我们只能控制端口方向寄存器,而不是端口寄存器。
体会下面2段程序。
1 控制端口
pd1_2 = 1;
p1_2 = 0;
while(1)
 {
   p1_2 = !p1_2;   //p1_2输出0和1,但是输出H的时候可能有电平冲突
}

2 控制端口方向(端口需要上拉)
pd1_2 = 1;
p1_2 = 0;
while(1)
 {
   p1_2 = !p1_2;   //p1_2同样输出0和1,但是没有电平冲突
}


菜鸟
2013-10-01 11:25:28     打赏
7楼

就是说,有无上拉电阻,结果不同吗?程序好象没有区别.


共7条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]