|
|||||||||||
| 技術(shù)交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術(shù) | 電源技術(shù) | 測控之家 | EMC技術(shù) | ARM技術(shù) | EDA技術(shù) | PCB技術(shù) | 嵌入式系統(tǒng) 驅(qū)動編程 | 集成電路 | 器件替換 | 模擬技術(shù) | 新手園地 | 單 片 機 | DSP技術(shù) | MCU技術(shù) | IC 設(shè)計 | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe |
我的I2C讀寫程序!剛調(diào)通,大家看看,接受沒調(diào) |
| 作者:xilinxer 欄目:單片機 |
#include<pic18.h> #include <stdio.h> #define TURE 1 #define FALSE 0 #define sda RC6 #define scl RC7 #define write_control_byte 0b10010000 #define read_control_byte 0b10010001 typedef unsigned CHAR byte; byte *ram_data_ptr; byte *prom_data_ptr; bit subaddr_or_data; bit get_data_from_ee(byte address, byte *data); bit send_data_to_ddp(byte address, byte *data); byte eeprom_byte_buff,eeprom_address_buff; byte ram[51]; const byte data[51]={0x00,0x00,0x00,0x00,0x00,0x00,0x64,0x64,0x64,0x20,0x00, 0x00,0x00,0x00,0x00,0x05,0x00,0x02,0xd0,0x00,0x40,0x11, 0xe1,0x00,0x80,0x00,0xc0,0x0a,0x00,0x00,0x00,0x00,0x00, 0x00,0x5c,0x03,0x02,0x07,0x24,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x0a }; void delayus(int x) //fosc=20m, { int n; for(n=x*5;n>0;n--){;} } //*************************************************** //*函數(shù)名: init_slave_iic //*功能: 初始化IIC口為slave模式 //*入口 : 無 //*出口 : 無 //***************************************************** void init_slave_iic(viod){ TRISC3=1; TRISC4=1; // 設(shè)sda,scl為輸入口 SSPM3=0;SSPM2=1;SSPM1=1;SSPM0=0; //設(shè)為7bit地址模式 SSPADD=0x36; } /*void interrupt i2c(void) { di(); if(SSPIF) //I2C中斷 { if(RW) //主器件要求數(shù)據(jù)及從發(fā)送 { CKP=0; delayus(5); SSPBUF=ram[ptr++]; CKP=1; SSPIF=0; //清中斷標志位 } else //主器件發(fā)送數(shù)據(jù) { if(DA=0) //接收到的器件地址 {subaddr_or_data=1; // 設(shè)標志 SSPIF=0; } else //接收到的是數(shù)據(jù) { SSPIF=0; if(subaddr_or_data=1) //接收到的是子地址 { subaddr_or_data=0; //設(shè)標志 ptr=SSPBUF; //重載地址指針 } else //接收到的是數(shù)據(jù) ram[ptr++]=SSPBUF; //數(shù)據(jù)寫入內(nèi)存 } } } ei(); } */ //*********************************************************** //**函數(shù)名:i2c_delay //**功能: i2c延時,同scl時鐘,3個延時為一個時鐘 //**入口: 無 //**出口:無 //************************************************************* void i2c_delay(void) { byte delay; for (delay=0;delay<10;delay++) {;} } //***********************************************************/ //**函數(shù)名:wr_data //**功能: 寫一個數(shù)據(jù)到從器件 //**入口: x 代寫入數(shù)據(jù) //**出口:無 //************************************************************ void wr_data(x) { int i; i=0x80; do { &n |
| 2樓: | >>參與討論 |
| 作者: 子路 于 2003/12/11 17:48:00 發(fā)布:
C的不懂,匯編的我有 |
|
|
|
| 免費注冊為維庫電子開發(fā)網(wǎng)會員,參與電子工程師社區(qū)討論,點此進入 |
Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號 |