[mw_shl_code=c,true]#include<pic.h> // Используйте 12M кристаллический осциллятор #include"12864.h" #define uint unsigned int #define uchar unsigned char __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--; }
} Void timer0_delay(uint delay_value)
{ delay_time=delay_value; TMR0IE=1; while(delay_time); TMR0IE=0;
} Uchar Read_byte()
{ Учар I, временно, хум; for(i=0; I<8; i++) { В то время(! RC1); timer0_delay(2); Delay 20us temp=0; if(RC1){temp=1; в то время как (RC1); } еще{temp=0; } гул<<=1; hum|=временно; } return (гул);
} пустоты Read_data()
{ uchar ckeck_value; RC1=0; timer0_delay(2500); Автобус опускается как минимум на 18 миллионов миль RC1=1; timer0_delay(2); Шина подтягивается подтягивающим резистором, а задержка хоста равна 20us TRISC1=1; Хост настроен на вход для оценки сигнала отклика ведомого RC1=1; если(! RC1) { В то время((! 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;
} Void main()
{ TRISB=0X00; lcdinit(); timer0_init(); в то время(1) { Read_data(); } }[/mw_shl_code]
|