ccs用C语言进行printf时,PIC单片机CCS之C语言(#IF,#ENDIF的用法)

s[len++]=c;

putc(c);

}

} while(c!=13);

s[len]=0;

}

// stdlib.h is required for the ato_ conversions

// in the following functions

#ifdef  _STDLIB   //若定义_STDLIB,则执行下面

signed int get_int() {

char s[5];   //声明字符型数组s[5]

signed int i;  //声明有符号整型变量i

get_string(s, 5);  //从RS232口读5个字节,存储到s数组中

i=atoi(s);  //将数组s[]的字符串转换成整型数送给i

return(i);

}

signed long get_long() {

char s[7];     //声明字符型数组s[7]

signed long l;  //声明有符号长整型变量l

get_string(s, 7); //从RS232口读7个字节,存储到s数组中

l=atol(s);  //将数组s[]的字符串转换成长整型数送给l

return(l);

}

float get_float() {

char s[20];     //声明字符型数组s[7]

float f;        //声明符点型变量l

get_string(s, 20); //从RS232口读20个字节,存储到s数组中

f = atof(s);  //将数组s[]的字符串转换成符点数送给f

return(f);

}

#endif    //结束if定义

文件: 2416.c如下:

   Library for a MicroChip 24LC16B                        

   init_ext_eeprom();    Call before the other functions are used   

   write_ext_eeprom(a, d);  Write the byte d to the address a      

   d = read_ext_eeprom(a);  Read the byte d from the address a   

   b = ext_eeprom_ready();  Returns TRUE if the eeprom is ready 

                            to receive opcodes              

   The main program may define EEPROM_SDA               

   and EEPROM_SCL to override the defaults below.            

                            Pin Layout                   

   -----------------------------------------------------------               

   |                                                        |  

   | 1: NC   Not Connected   | 8: VCC   +5V                   |  

   | 2: NC   Not Connected   | 7: WP    GND                   |  

   | 3: NC   Not Connected   | 6: SCL   EEPROM_SCL and Pull-Up |  

   | 4: VSS  GND           | 5: SDA   EEPROM_SDA and Pull-Up |  

   -----------------------------------------------------------    

#ifndef EEPROM_SDA  //若没有定义EEPROM_SDA,则执行下面

#define EEPROM_SDA  PIN_C4   //用EEPROM_SDA代替PIN_C4

#define EEPROM_SCL  PIN_C3   //用EEPROM_SCL代替PIN_C3

#endif    //结束if定义

#use i2c(master, sda=EEPROM_SDA, scl=EEPROM_SCL)

// master设置成主机方式

//除非指定了FORCE_HW,否则会产生模拟I2C的软件函数.

//使能I2C_START,  I2C_STOP直到下一个#USE  I2C的出现为止.

//使能I2C_READ,  I2C_WRITE直到下一个#USE  I2C的出现为止.

//使能I2C_POLL直到下一个#USE  I2C的出现为止.

//指定sda脚为EEPROM_SDA, 指定scl脚为EEPROM_SCL

#define EEPROM_ADDRESS  long int   //用EEPROM_ADDRESS代替long int

#define EEPROM_SIZE    2048        //用EEPROM_SIZE代替2048

void init_ext_eeprom() {

output_float(EEPROM_SCL);  //将EEPROM_SCL引脚设为输入,开集电极连接

output_float(EEPROM_SDA);  //将EEPROM_SDA引脚设为输入,开集电极连接

}

BOOLEAN ext_eeprom_ready() {

int1 ack;             //声明位变量ack

i2c_start();           //发送启动条件

ack = i2c_write(0xa0);  //发送从机地址0xa0;若ack=0,表示从机应答(ACK);

//若ack=1,表示从机不应答(NO ACK);

i2c_stop();           //发送停止条件

return !ack;

} // ext_eeprom_ready()函数,若返回1,表示从机准备好; 若返回0,表示从机忙或eeprom坏了

void write_ext_eeprom(long int address, BYTE data) {

while(!ext_eeprom_ready());  //若从机忙,则主机等待

i2c_start();   //发送启动条件

i2c_write( (0xa0|(BYTE)(address>>7))&0xfe);  //发送命令字的高字节(发送写命令)

i2c_write(address);  //发送命令字的低字节

i2c_write(data);     //发送数据

i2c_stop();         //发送停止条件

}

BYTE read_ext_eeprom(long int address) {

BYTE data;               //声明字节变量data

while(!ext_eeprom_ready());  //先发器件地址,若从机忙,则主机等待

i2c_start();   //在此处是:发送重新启动条件

i2c_write( (0xa0|(BYTE)(address>>7))&0xfe);  //发送命令字的高字节(发送写命令)

i2c_write(address);  //发送命令字的低字节

i2c_start();   //发送启动条件

i2c_write( (0xa0|(BYTE)(address>>7))|1);  //发送命令字的高字节(发送读命令)

data=i2c_read(0);  //读I2C数据,然后发送ack=0(不用从机应答)

i2c_stop();        //发送停止条件

return(data);      //返回所读到的I2C数据

}

上面的例子主要用来读写24C16,通过PC机RS232进行验证

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值