TITLE LCD & Temperature list p=16F877 include __CONFIG _XT_OSC&_CP_OFF&_WDT_OFF&_BODEN_ON&_DEBUG_ON&_LVP_OFF ;---------------------------------------------------------- ;Переименование портов и регистров, связанных с ЖКИ #define LCD_D4 PORTD, 0 #define LCD_D5 PORTD, 1 #define LCD_D6 PORTD, 2 #define LCD_D7 PORTD, 3 #define LCD_D4_DIR TRISD, 0 #define LCD_D5_DIR TRISD, 1 #define LCD_D6_DIR TRISD, 2 #define LCD_D7_DIR TRISD, 3 #define LCD_E PORTA, 1 #define LCD_RW PORTA, 2 #define LCD_RS PORTA, 3 #define LCD_E_DIR TRISA, 1 #define LCD_RW_DIR TRISA, 2 #define LCD_RS_DIR TRISA, 3 ; Константа для работы звукового сигнала ;FLAGS EQU 0x1A ;J EQU 0x1B ;K EQU 0x1C ;TIME0 EQU 0x1D ;TIME1 EQU 0x1E ;TIMER EQU 0x1F ;---------------------------------------------------------- ;Определение переменных cblock 0x20 bufer_sen ;буфер передачи bufer_recv ;буфер приёма count_char ;счётчик символов cmd_byte temperature LSD MsD MSD count_1 count_2 count_3 endc ;---------------------------------------------------------- ;Начало основной программы org 0x0000 goto Main org 0x004 retfie ;---------------------------------------------------------- ;Подпрограмма вывода сообщений Message_Send call Table banksel count_char incf count_char banksel bufer_sen movwf bufer_sen movf bufer_sen,f btfsc STATUS,Z goto Message_End call LCD_Data_Write goto Message_Send Message_End return ;---------------------------------------------------------- Table banksel count_char movf count_char,w banksel PCL addwf PCL dt " LCD IS READY " retlw H'00' dt " Temperature " retlw H'00' dt " Temp = " retlw H'00' dt " Temp_Now >T_Lim " retlw H'00' dt " Temp_Now Temp_Lim return ;---Проверка освобождения шины I2C ssprw movlw 0x00 banksel SSPCON2 andwf SSPCON2,w sublw 0x00 btfss STATUS,Z goto $-4 btfsc SSPSTAT, R_W goto $-1 return ;Преобразование из двоичного в двоично-десятичный код bin_bcd ;----Обнуление регистров результата----------- banksel MSD clrf MSD ;регистр сотен banksel MsD clrf MsD ;регистр единиц ;------------------------------------------------------------- movwf LSD ;передача темп. в регистр LSD movwf temperature ;---Определение сотен----------------------------------- ghundreth movlw .100 ;вычитание 100 из LSD subwf LSD,w btfss STATUS,C ;исх. величина больше,чем 100? goto gtenth ;НЕТ, переход к вычислению десятков movwf LSD ;ДА incf MSD,f ;инкремент регистра сотен goto ghundreth ;---Определение десятков------------------------- gtenth movlw .10 ;вычитание десятков subwf LSD,w btfss STATUS,C goto over ;окончание преобразования movwf LSD incf MsD,f ;инкремент регистра десят-ков goto gtenth ;преобразование десятичных цифр в ASCII-коды символов over movf MSD,w xorlw 0x30 movwf MSD movf MsD,w xorlw 0x30 movwf MsD movf LSD,w xorlw 0x30 movwf LSD retlw 0 ;Процедура подачи звукового сигнала ;SIGNAL MOVLW .10 ;Количество звуковых посылок ; MOVWF K ;L17 CALL SOUND1 ; CLRF TIME1 ;L16 CLRWDT ; MOVF TIME1, 0 ; SUBLW .1 ;Время между звуковыми посылками ; BTFSC STATUS, C ; GOTO L16 ; BTFSC FLAGS, 0 ; RETURN ; DECFSZ K ; GOTO L17 ; RETURN ;Процедура формирования звукового сигнала ;SOUND1 BCF INTCON, GIE ; MOVLW .250 ; MOVWF J ;L13 MOVF TMR0, 0 ; SUBLW .2 ;Частота звука, время импульса ; BTFSC STATUS, C ; GOTO L13 ; BCF PORTA, 3 ; CLRF TMR0 ;L15 CLRWDT ; MOVF TMR0, 0 ; SUBLW .70 ; BTFSC STATUS, C ; GOTO L15 ;L14 DECFSZ J ; GOTO L14 ; BCF PORTA, 3 ; BSF INTCON, GIE ; RETURN ;----------------------------------------------------------------- ;Мерцание светодиодов, подключённых к порту В LEDs banksel TRISB ;Настройка выводов на выдачу bcf TRISB,3 bcf TRISB,2 bcf TRISB,1 banksel PORTB bsf PORTB,1 ;Включение 1-госветодиода call delay_100ms call delay_100ms banksel PORTB bcf PORTB,1 ;Выключеие 1-го светодиода bsf PORTB,2 call delay_100ms call delay_100ms banksel PORTB bcf PORTB,2 bsf PORTB,3 call delay_100ms call delay_100ms banksel PORTB bcf PORTB,3 ;--Сравнение текущей температуры с заданной-(170C ) compare_temp banksel temperature movf temperature,w sublw B'00010001' ;17 btfss STATUS,0 ; goto SIGNAL goto LEDs call LCD_Clear call delay_100ms call Message_Send ;------------------ 100ms Delay -------------------------------- delay_100ms banksel count_2 movlw .83 movwf count_2 movlw 0xFF movwf count_1 again decfsz count_1,f goto $-1 decfsz count_2,f goto again return ;---------------- 1s Delay ----------------------------------- delay_1s banksel count_3 movlw .10 movwf count_3 povt call delay_100ms decfsz count_3 goto povt return ;-------------------------------------------------------------------- END