컨트롤러"어떻게

K

kenny_zhou

Guest
안녕하십니까!
내가 문제를 만나면 PIC16F914.But 난 내부 EEPROM이 방법을 C 또는은 ASM의 코드를 작성해야할지 모르겠 많은 데이터를 저장합니다.
당신이 나를 도와 줄 수 있어요!

고마워!

 
데이터 시트를 보라 구 - 거기 코드 예제가있습니다.

 
만약 당신이 C 컴파일러를 사용하는 경우, 그들의 대부분의 EEPROM이 읽고 자신의 라이브러리에있는 루틴을 작성합니다.
만약 당신이 사용하는 하이 테크, 보이는 "Pic.h"당신은 읽기와 플래시 및 EEPROM 메모리를 모두 작성 매크로를 정의 및 함수 프로토 타입을 좋아합니다.

안녕하세요로부터 추출 기술 pic.h

코드 :/************************************************* **********************/

/****** EEPROM 메모리 읽기 / 매크로 및 함수 정의를 작성 *******/

/************************************************* **********************/

/ * 참고 음 :매크로 EEPROM_READ되지 즉시 후 사용하는 것이 안전 ()입니다

그것을 분명히하지 WR 기다릴 않습니다 EEPROM이에 써주세요. 이것입니다

경우의 시퀀스를 읽고 디자인, 최소한의 코드 크기를 허용하는 것입니다

원하는. 쓴다 손상되지 보장하려면, 함수를 사용하여

eeprom_read () 또는 삽입

반면 (WR) 계속;

EEPROM_READ를 호출하기 전에 ().

* /

# 만약 EEPROM_SIZE "0

# ifdef __FLASHTYPE

/ / EEPROM이 매크로 버전을 쓰기 및 읽기

(addr, 값) EEPROM_WRITE 정의 # \

할 (\

반면 (WR)를 계속; EEADR = (addr); EEDATA = (값); \

EECON1 & = 0x7F의; = 0 하게나; 경우 (GIE) 하게나 = 1; GIE = 0; \

굴뚝새 = 1; EECON2 = 0x55; EECON2 = 0xaa; WR = 1; 굴뚝새 = 0; \

만약 (하게나) GIE = 1; \

) 동안 (0)

EEPROM_READ (addr)을 정의 # ((EEADR = (addr)), (EECON1 & = 0x7F의), (의 R & D = 1), EEDATA)

# 다른 / / 다른 플래시를 작성하지 않습니다

(addr, 값) EEPROM_WRITE 정의 # \

할 (\

반면 (WR)를 계속; EEADR = (addr); EEDATA = (값); \

하게나 = 0; 경우 (GIE) 하게나 = 1; GIE = 0; \

굴뚝새 = 1; EECON2 = 0x55; EECON2 = 0xaa; WR = 1; 굴뚝새 = 0; \

만약 (하게나) GIE = 1; \

) 동안 (0)

EEPROM_READ (addr)을 정의 # ((EEADR = (addr)), (의 R & D = 1), EEDATA)

# endif/ * 라이브러리 함수 버전 * /

통근 무효 eeprom_write (서명 숯불 addr, 서명 숯불 값);

통근 숯불 eeprom_read 서명 (서명 숯불 addr);

# endif / / 끝 EEPROM이 루틴
 
내가 CCS는 사용할 수있습니다.
코드 :# 포함 "18F8722.h"

# 장치 *= 16

# 장치 ADC는 = 8# 퓨즈 NOWDT, WDT128, EC_IO, NOPROTECT, IESO, 정전, BORV25, 올려, NOCPD

# 퓨즈 STVREN, NODEBUG, NOLVP, NOWRT, NOCPB, NOEBTRB, NOEBTR, NOWRTD, NOWRTC

# 퓨즈 NOWRTB, FCMEN, LPT1OSC, MCLR, NOXINST, MCU의#를 사용하여 지연 (24 시간 = 40,000,000)#를 사용하여 RS232 (스트림 = 컴퓨터, = 115200, 패리티 = N으로, xmit = PIN_G1, rcv = PIN_G2, 에러) 보오RLED PIN_F7 정의 #

YLED PIN_H5 정의 ## ROM과 int8 0xF0000 = (1, 2, 3, 4)메인 무효 ()

(

setup_adc_ports (NO_ANALOGS | VSS_VDD);

setup_adc (ADC_OFF | ADC_TAD_MUL_0);

setup_psp (PSP_DISABLED);

setup_spi (가 FALSE);

setup_wdt (WDT_OFF);

setup_timer_0 (RTCC_INTERNAL);

setup_timer_1 (T1_DISABLED);

setup_timer_2 (T2_DISABLED, 0,1);

setup_timer_3 (T3_DISABLED | T3_DIV_BY_1);

setup_timer_4 (T4_DISABLED, 0,1);

setup_comparator (NC_NC_NC_NC);

setup_vref (VREF_LOW | -2);

(FALSE를) setup_low_volt_detect;

setup_oscillator (거짓);output_low (RLED);

output_high (YLED);

delay_ms (350);output_high (RLED);

output_low (YLED);

delay_ms (350);output_low (RLED);(1) 동안

(

만약 (read_eeprom (0x0000) == 1)

output_high (YLED);

그 밖의

output_high (RLED);delay_ms (100);output_low (YLED);

output_low (RLED);

delay_ms (100);

))

 

Welcome to EDABoard.com

Sponsor

Back
Top