|
|
게시됨 2014. 11. 25. 오후 10:12:09
|
|
|

[mw_shl_code=c, true]#include<pic.h> // 12M 크리스탈 오실레이터 사용 #include"12864.h" #define unsigned int #define 우차르 서명 없는 차르 __CONFIG(FOSC_HS&WDTE_OFF&LVP_OFF); 우차르 temp_valueH,hum_valueH,hum_valueL,temp_valueL,체크; delay_time; 공허 timer0_init()
{ TMR0=0; 첫 번째 값 T0CS=0; 크리스털 발진기의 1/4에 해당하는 클럭 소스를 선택하세요; T0SE=1; 클럭 소스 엣지 선택 비트 PSA=0; 프리디나버 할당 비트 PS0=0; PS1=0; PS2=0; 분할 전 선택 부분 TMR0IF=0; 타이머 플래그가 0입니다. GIE=1; 글로벌 인터럽션을 열어 TMR0IE=0; 타이머 0 활성화 TMR0=236; 시의 첫 번째 가치
} 보이드 인터럽트 타이머0()
{ if(TMR0IF) { TMR0IF=0; TMR0=235; delay_time--; }
} 공허 timer0_delay(delay_value)
{ delay_time=delay_value; TMR0IE=1; while(delay_time); TMR0IE=0;
} 우차르 Read_byte()
{ 우차르 아이, 템프, 흠; for(i=0; i<8; i++) { 그동안(! RC1); timer0_delay(2); 딜레이 20달러 온도=0; if(RC1){temp=1; 반면(RC1); } else{temp=0; } hum<<=1; 흠|=임시; } 리턴(윙);
} 공허 Read_data()
{ 우차르 ckeck_value; RC1=0; timer0_delay(2500); 버스는 최소 18MS만큼 아래로 끌려갑니다 RC1=1; timer0_delay(2); 버스는 풀업 저항기에 의해 끌어올려지고, 호스트 지연은 20위스입니다 TRISC1=1; 호스트는 슬레이브 응답 신호를 판단하기 위해 입력으로 설정되어 있습니다 RC1=1; 만약(! RC1) { while((! RC1)) // 슬레이브가 80us 저응답 신호를 방출하는지 여부를 확인하세요 { NOP(); } while(RC1) // 슬레이브가 80us라는 높은 수준을 방출하는지 결정하고, 그렇다면 데이터 수신 상태에 진입합니다 { NOP(); } temp_valueH=Read_byte(); temp_valueL=Read_byte(); hum_valueH=Read_byte(); hum_valueL=Read_byte(); check=Read_byte(); ckeck_value=hum_valueL+hum_valueH+temp_valueL+temp_valueH; if(check==ckeck_value) { Proce_num(0x84,temp_valueH); Proce_num(0x94,hum_valueH); } } TRISC1=0; RC1=1;
} 보이드 메인()
{ TRISB=0X00; lcdinit(); timer0_init(); while(1) { Read_data(); } }[/mw_shl_code]
|
이전의:생각과 네이키드 프로그래밍 [연재]다음:복지 혜택, C 언어 명명 규칙, 매우 실용적인 것들
|