51单片机I2C总线问题,郭天祥51的188页,有3个问题不懂,第一,这个write是个啥,为啥用

2024-07-03 22:45:22
推荐回答(2个)
回答1:

bit和uchar 之类的差不多,只不败闷过uchar=8位, bit=1位而已。都是变量,编译器在编译过程中分配地址。除非你指定,否则这个地址是随机的。这个地址是整个可寻址空间,RAM+FLASH+
扩展空间。
bit只有0和1两种值。uchar有256种值。

code是存储在单片机的flash里面,不是存在内存里面了。察圆弯所以一般固定意义的数据,比如数码管的段码,一个图片的数据信息,都是用code定义,让这些数据放在flash里面,节省内存空间。因为51单片机的RAM很少,只有128(或者256)字节,要是定义的数据(而且是在使用时腔轿不做改变的)太多,RAM肯存不下。所以定义code,放在flash里面。要知道52单片机的flash有8K字节!远比256字节的RAM多。

回答2:

你好:
一、write的意思是每到1s钟往AT24C02里的0x02这个地址写sec这个变量的值,write可以说是一个时间写入标志变量,当write=1时说明该写数据了,紧接着将write清0,然后定时器时间到write又为1了。用bit来定义一是为了节省RAM空间,二是一目哗核散了然,一看就是当做标志来用。
二、这是读一个字节数据的函数。
解析:
1.函数头传递要读取的字节所在位置address;

2.进入函数声明一个无符号的字符变量date;
3.start()函数是iic协议定义的开始函数,在SCL=1时,SDA一个下降沿,iic器件接收到开始命令;
4.write_byte(0xa0)是发送“写”这个命令给乱氏iic器件;

5.respons()函数是应答信号,当iic器件接收到数据会产生应答信号;

6.且这氏局几句非要不可!!不然iic器件不会开始工作,会停留在等待启动状态,0xa0是写命令,因为要读address的数据,所以要事先写入地址,读才能有效地读出。应答函数在这里可以不要;

7.write_byte(address)写入要读取的位置;

8.应答;

9.当把要读取的地址写入后,因为此时还是在写状态下,必须吧iic器件切换为读的状态,所以重新启动一次,然后发送读的命令;

10.应答信号。
三、你没提问题了。
有啥不懂可以随时回复。
希望我的回答能帮助到你。