| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Микроконтроллеры (MCU) и микропроцессоры (MPU) > Противопожарная система |
| Автор: CNN91 7.12.2011, 20:30 |
| Помогите пожалуйста с написанием программы для обработки сигнала, поступающего на мк8051 с двух датчиков (датчик задымленности и датчик температуры). |
| Автор: UniBomb 8.12.2011, 08:48 |
| CNN91, ты хочешь, что бы за тебя написали бесплатно или за вознаграждение? |
| Автор: Mazzi 8.12.2011, 12:18 |
| А что у тебя не получается? Выложи свой код. |
| Автор: CNN91 8.12.2011, 19:47 |
| DQ BIT P3.7 ; 1 wire line swpH equ 0d2H swpL equ 0ffH WDLSB DATA 30H ; WDMSB DATA 31H ; ;*************************************************************** ORG 0000H LJMP MAIN ORG 000BH LJMP TMR0 ; Timer0 isr ;******************************************************** ; Timer0 Interrupt Service Routine TMR0: MOV TH0,#swpH MOV TL0,#swpL JB 21H,DSL MOV P0,42H ORL P0,#00100000B SJMP EXIT DSL: MOV P0,43H ORL P0,#00010000B EXIT: CPL 21H RETI ; Main program MAIN: TOINIT: CLR EA MOV TMOD,#01H MOV TH0,#swpH MOV TL0,#swpL SETB EA SETB ET0 SETB TR0 ;*********************************************************** ; MOV R2,#2 MOV R0,#42H ; OVER: MOV @R0,#00H; INC R0 DJNZ R2,OVER LOOP: LCALL DSWD ; SJMP LOOP ;********************************************************** ; Read a temperature from the DS18B20 DSWD: LCALL RSTSNR ; Init of the DS18B20 JNB F0,KEND MOV R0,#0CCH LCALL SEND_BYTE MOV R0,#44H LCALL SEND_BYTE ; Send a Convert Command SETB EA MOV 48H,#1 SS2: MOV 49H,#255 SS1: MOV 4AH,#255 SS0: DJNZ 4AH,SS0 DJNZ 49H,SS1 DJNZ 48H,SS2 CLR EA LCALL RSTSNR JNB F0,KEND MOV R0,#0CCH LCALL SEND_BYTE MOV R0,#0BEH LCALL SEND_BYTE ; Send Read Scratchpad command LCALL READ_BYTE ; Read the low byte from scratchpad MOV WDLSB,A ; Save the temperature (low byte) LCALL READ_BYTE ; Read the high byte from scratchpad MOV WDMSB,A ; Save the temperature (high byte) LCALL TRANS12 KEND: SETB EA RET ;********************************************************** ; TRANS12: MOV A,30H ANL A,#0F0H MOV 3AH,A MOV A,31H ANL A,#0FH ORL A,3AH SWAP A MOV B,#10 DIV AB ;MOV 42H,A MOV 43H,B ; MOV b,#10 DIV ab MOV 42H,B MOV 41H,A RET ;************************************************* ; Send a byte to the 1 wire line SEND_BYTE: ; MOV A,R0 MOV R5,#8 SEN3: CLR C RRC A JC SEN1 LCALL WRITE_0 SJMP SEN2 SEN1: LCALL WRITE_1 SEN2: DJNZ R5,SEN3 ; RET ;************************************************* ; Read a byte from the 1 wire line READ_BYTE: MOV R5,#8 READ1: LCALL READ RRC A DJNZ R5,READ1 ; MOV R0,A RET ;************************************************* ; Reset 1 wire line RSTSNR: SETB DQ NOP NOP CLR DQ MOV R6,#250 ; DJNZ R6,$ MOV R6,#50 DJNZ R6,$ SETB DQ ; MOV R6,#15 DJNZ R6,$ CALL CHCK ; MOV R6,#60 DJNZ R6,$ SETB DQ RET ;************************************************* ; low level subroutines CHCK: MOV C,DQ JC RST0 SETB F0 ; SJMP CHCK0 RST0: CLR F0 ; CHCK0: RET ;************************************************* WRITE_0: CLR DQ MOV R6,#30 DJNZ R6,$ SETB DQ RET ;************************************************* WRITE_1: CLR DQ NOP NOP NOP NOP NOP SETB DQ MOV R6,#30 DJNZ R6,$ RET ;************************************************* READ: SETB DQ ; NOP NOP CLR DQ NOP NOP SETB DQ ; NOP NOP NOP NOP NOP NOP NOP MOV C,DQ MOV R6,#23 DJNZ R6,$ RET ;********************************************** DELAY10: MOV R4,#20 D2: MOV R5,#30 DJNZ R5,$ DJNZ R4,D2 RET end Здесь как я понимаю только с датчика температуры принимаюстя значения и выводятся на дисплей. В этом коде я немного разбираюсь, позже добавлю сравнение температуры. А вот что сделать с датчиком дыма??? Насколько я понимаю он будет посылать на контроллер какой-то единичный импульс а вот как его обработать я не понимаю. |
| Автор: daemonaz 25.4.2012, 15:08 |
| Датчик дыма по умолчанию в нормально разомкнутом состоянии, срабатывает на дым и удерживеатся в замкнутом состоянии до момента сброса питания, если используете 1 Wire -шину, то к датчику дыма подключается схема с DS2408, и удаленно им управляешь а также считываешь оттуда состояния входов DS240x. |