User:Microtony/asdf: Difference between revisions
←Created page with '; ELEC254 Fall 2009 ; Group 9 ; tm_cks tm_clh tm_wmh ; Version 2009-11-30 INPUT EQU P3.7 ; INPUT Port MODE EQU P3.5 ; Serial input mode ACLK EQU P3.6 ; ADC Seri...' |
asd |
||
Line 4: | Line 4: | ||
; Version 2009-11-30 |
; Version 2009-11-30 |
||
BUZZER EQU P3.2 |
|||
INPUT EQU P3.7 ; INPUT Port |
INPUT EQU P3.7 ; INPUT Port |
||
MODE EQU P3.5 ; Serial input mode |
MODE EQU P3.5 ; Serial input mode |
||
ACLK EQU P3.6 ; ADC Serial input Clock |
ACLK EQU P3.6 ; ADC Serial input Clock |
||
ADR EQU P3. |
ADR EQU P3.3 ; RS pin |
||
ADW EQU P3. |
ADW EQU P3.4 ; WR pin |
||
ADI EQU P3.4 ; INTR pin |
|||
CLK EQU P2.0 ; LCD Serial output Clock |
CLK EQU P2.0 ; LCD Serial output Clock |
||
Line 61: | Line 61: | ||
ORG 23H |
ORG 23H |
||
;JB RI, UA_RI |
|||
;CLR RI |
|||
;CLR TI |
|||
RETI |
RETI |
||
UA_RI: |
|||
JMP UA_RX |
|||
;----------------; |
;----------------; |
||
; ; |
; ; |
||
Line 81: | Line 77: | ||
MOV UA_READ, #0 |
MOV UA_READ, #0 |
||
MOV AIRCON, #0 |
|||
JNB P1.4, MAIN_CONT |
|||
MOV |
MOV AIRCON, #1 |
||
MAIN_CONT: |
|||
;SETB PS ;SET PRIORITY |
|||
MOV IE, #10010010B ;SET INTERRUPT |
|||
MOV TMOD, #20H ;SET TIMER1 |
MOV TMOD, #20H ;SET TIMER1 |
||
MOV TH1, #243 ;SET PRELOAD VALUE |
MOV TH1, #243 ;SET PRELOAD VALUE |
||
Line 93: | Line 90: | ||
ANL TMOD, #11110010B |
ANL TMOD, #11110010B |
||
ORL TMOD, #00000010B |
ORL TMOD, #00000010B |
||
MOV TH0, # |
MOV TH0, #01H |
||
MOV TL0, #06H |
MOV TL0, #06H |
||
MOV HOUR, # |
MOV HOUR, #0 |
||
MOV MIN, # |
MOV MIN, #0 |
||
MOV SEC, # |
MOV SEC, #0 |
||
MOV SHOURON, #0 |
MOV SHOURON, #0 |
||
MOV SMINON, #0 |
MOV SMINON, #0 |
||
Line 111: | Line 108: | ||
MOV STMP2, #0 |
MOV STMP2, #0 |
||
MOV STMP3, #0 |
MOV STMP3, #0 |
||
MOV P1, #0 |
|||
SETB TR0 |
SETB TR0 |
||
CLR BUZZER |
|||
LCALL LCD_INIT ; Subroutine for LCD INITIZATION |
LCALL LCD_INIT ; Subroutine for LCD INITIZATION |
||
LCALL AD |
|||
LCALL SHOW_STARTUP ; Subroutine for Showing Startup Message |
|||
LCALL AD |
|||
;MOV SBUF, #113 |
|||
JMP $ |
JMP $ |
||
Line 142: | Line 138: | ||
MOV A, #00001111B ; DISPLAY ON, CURSOR ON, BLINKING |
MOV A, #00001111B ; DISPLAY ON, CURSOR ON, BLINKING |
||
LCALL W_INS |
LCALL W_INS |
||
RET |
|||
SHOW_STARTUP: |
|||
SETB STARTUP |
|||
MOV A,#10000000B ; SET CURSOR POSITION 00H, LINE 1, POS 1 |
|||
LCALL W_INS |
|||
MOV R0, #16 |
|||
MOV DPTR, #MSG0 |
|||
LCALL W_STR |
|||
MOV A, #11000000B ; SET CURSOR POSITION 40H, LINE 2, POS 2 |
|||
LCALL W_INS |
|||
MOV R0, #16 |
|||
MOV DPTR, #MSG1 |
|||
LCALL W_STR |
|||
RET |
|||
SHOW_DEBUG: |
|||
MOV A, #00001100B |
|||
LCALL W_INS |
|||
MOV A, #10000000B ; SET CURSOR POSITION 00H, LINE 1, POS 1 |
|||
LCALL W_INS |
|||
MOV R0, #16 |
|||
MOV DPTR, #MSG_BUG |
|||
LCALL W_STR |
|||
MOV A, #11000000B ; SET CURSOR POSITION 40H, LINE 2, POS 1 |
|||
LCALL W_INS |
|||
MOV A, MEM_ADC |
|||
LCALL W_TEMP |
|||
MOV A, #1 |
|||
LCALL W_NULL |
|||
MOV A, MEM_SWV |
|||
LCALL W_D2 |
|||
MOV A, #2 |
|||
LCALL W_NULL |
|||
MOV A, MEM_CNT |
|||
LCALL W_TEMP |
|||
MOV A, #2 |
|||
LCALL W_NULL |
|||
MOV A, MEM_SER |
|||
LCALL W_DATA |
|||
RET |
RET |
||
Line 245: | Line 199: | ||
CLR EN |
CLR EN |
||
JB P2.2, BUSY |
JB P2.2, BUSY |
||
RET |
|||
W_D3: |
|||
MOV B, #100 |
|||
DIV AB |
|||
ADD A,# 30H |
|||
LCALL W_DATA |
|||
MOV A, B |
|||
MOV B, #10 |
|||
DIV AB |
|||
ADD A,#30H |
|||
LCALL W_DATA |
|||
MOV A, B |
|||
ADD A,#30H |
|||
LCALL W_DATA |
|||
RET |
RET |
||
Line 338: | Line 277: | ||
RET |
RET |
||
;------------------; |
|||
; ; |
|||
; SERIAL FUNCTIONS ; |
|||
; ; |
|||
;------------------; |
|||
UA_RX: |
|||
;MOV A, SBUF |
|||
;ANL A, #01111111B |
|||
;MOV MEM_SER, A |
|||
;MOV A, SBYTERE |
|||
;CJNE A, #3, GETDATA |
|||
;CHECKMODE: |
|||
;MOV SBYTERE, #0 |
|||
;MOV A, MEM_SER |
|||
;JZ UA_END |
|||
;MODE1: |
|||
;CJNE A, #1, MODE2 |
|||
;POP HOUR |
|||
;POP MIN |
|||
;POP SEC |
|||
;JMP UA_END |
|||
;MODE2: |
|||
;CJNE A, #2, MODE3 |
|||
;POP STMP |
|||
;MOV MEM_ADC,STMP ;(????) |
|||
;POP STMP |
|||
;MOV MEM_SWV,STMP |
|||
;POP STMP |
|||
;MOV MEM_SER,STMP |
|||
;CJNE MEM_SER, #2BH, UA_MINUS |
|||
;INC MEM_CNT |
|||
;UA_MINUS: |
|||
;CJNE MEM_SER, #2DH, UA_END |
|||
;DEC MEM_CNT |
|||
;JMP UA_END |
|||
;MODE3: |
|||
;CJNE A, #3, MODE4 |
|||
;POP SON |
|||
;POP SHOURON |
|||
;POP SMINON |
|||
;JMP UA_END |
|||
;MODE4: |
|||
;CJNE A, #4, UA_END |
|||
;POP SOFF |
|||
;POP SHOUROFF |
|||
;POP SMINOFF |
|||
;JMP UA_END |
|||
;GETDATA: |
|||
;MOV STMP, MEM_SER |
|||
;PUSH STMP |
|||
;INC SBYTERE |
|||
;UA_END: |
|||
;CLR RI |
|||
;RETI |
|||
;UA_RX: |
|||
;MOV A, SBUF |
|||
;ANL A, #01111111B |
|||
;MOV MEM_SER, A |
|||
;MOV A, UA_READ |
|||
;JZ UA_TIME |
|||
;UA_TIME3: |
|||
;CJNE A, #3, UA_TIME2 |
|||
;MOV HOUR, MEM_SER |
|||
;MOV UA_READ, #2 |
|||
;JMP UA_END |
|||
;UA_TIME2: |
|||
;CJNE A, #2, UA_TIME1 |
|||
;MOV MIN, MEM_SER |
|||
;MOV UA_READ, #1 |
|||
;JMP UA_END |
|||
;UA_TIME1: |
|||
;MOV SEc, MEM_SER |
|||
;MOV UA_READ, #0 |
|||
;JMP UA_END |
|||
;UA_TIME: |
|||
;CJNE MEM_SER, #84, UA_PLUS |
|||
;MOV UA_READ, #3 |
|||
;UA_PLUS: |
|||
;CJNE MEM_SER, #2BH, UA_MINUS |
|||
;INC MEM_CNT |
|||
;UA_MINUS: |
|||
;CJNE MEM_SER, #2DH, UA_MON |
|||
;DEC MEM_CNT |
|||
;UA_MON: |
|||
;CJNE MEM_SER, #51, UA_MOFF |
|||
;MOV MEM_SWV, #3 |
|||
;UA_MOFF: |
|||
;CJNE MEM_SER, #49, UA_AUTO |
|||
;MOV MEM_SWV, #1 |
|||
;UA_AUTO: |
|||
;CJNE MEM_SER, #48, UA_END |
|||
;MOV MEM_SWV, #0 |
|||
;UA_END: |
|||
;CLR RI |
|||
;RETI |
|||
;------------------; |
;------------------; |
||
Line 581: | Line 418: | ||
ANL A, #00111111B |
ANL A, #00111111B |
||
MOV MEM_SWS, A |
MOV MEM_SWS, A |
||
RET |
RET |
||
Line 664: | Line 499: | ||
;250us |
;250us |
||
INC US250 |
INC US250 |
||
MOV A, # |
MOV A, #187 |
||
;MOV A, #21 |
|||
CJNE A, US250, TIMER_EXIT |
CJNE A, US250, TIMER_EXIT |
||
;50ms |
;50ms |
||
Line 673: | Line 507: | ||
CJNE A, MS50, SHOW_OUTPUT |
CJNE A, MS50, SHOW_OUTPUT |
||
;1 second |
;1 second |
||
;JB BUZZER, CLR_BUZZER |
|||
;SETB BUZZER |
|||
;JMP END_BUZZER |
|||
;CLR_BUZZER: |
|||
;CLR BUZZER |
|||
;END_BUZZER: |
|||
LCALL AIRCON_STATE |
|||
LCALL TX |
LCALL TX |
||
MOV MS50, #0 |
MOV MS50, #0 |
||
Line 681: | Line 522: | ||
MOV A, B |
MOV A, B |
||
JNZ END_ADC_COUNT |
JNZ END_ADC_COUNT |
||
LCALL AD |
|||
END_ADC_COUNT: |
END_ADC_COUNT: |
||
MOV A, #60 |
MOV A, #60 |
||
Line 716: | Line 557: | ||
MANUAL_ON: |
MANUAL_ON: |
||
LCALL ON_AIRCON |
|||
SETB AIRCON |
|||
MOV C, AIRCON |
|||
CPL C |
|||
MOV P2.5, C |
|||
MOV R0, #5 |
MOV R0, #5 |
||
MOV DPTR, #MSG_MANUAL_ON |
MOV DPTR, #MSG_MANUAL_ON |
||
Line 726: | Line 564: | ||
MANUAL_OFF: |
MANUAL_OFF: |
||
LCALL OFF_AIRCON |
|||
CLR AIRCON |
|||
MOV C, AIRCON |
|||
CPL C |
|||
MOV P2.5, C |
|||
MOV R0, #5 |
MOV R0, #5 |
||
MOV DPTR, #MSG_MANUAL_OFF |
MOV DPTR, #MSG_MANUAL_OFF |
||
Line 846: | Line 681: | ||
RET |
RET |
||
AIRCON_STATE: |
|||
MOV A, AIRCON |
|||
MOV A, #11000000B ; SET CURSOR POSITION 40H, LINE 2, POS 1 |
|||
JZ AIRCON_STATE_OFF |
|||
LCALL W_INS |
|||
JB P1.4, AIRCON_STATE_EXIT |
|||
MOV R0, #6 |
|||
LCALL OFF_AIRCON |
|||
MOV DPTR, #MSG_SCH_OFF |
|||
MOV MEM_SWV, #1 |
|||
LCALL W_STR |
|||
JMP AIRCON_STATE_EXIT |
|||
MOV A, SHOUROFF |
|||
AIRCON_STATE_OFF: |
|||
LCALL W_D2 |
|||
JNB P1.4, AIRCON_STATE_EXIT |
|||
MOV A, #00111010B |
|||
LCALL |
LCALL ON_AIRCON |
||
MOV |
MOV MEM_SWV, #3 |
||
AIRCON_STATE_EXIT: |
|||
LCALL W_D2 |
|||
MOV A, #1 |
|||
LCALL W_NULL |
|||
MOV A, SCH_OPTION |
|||
JZ SCH_MODE_OFF |
|||
MOV A, #1 |
|||
CJNE A, SCH_OPTION, SCH_MODE_CLR |
|||
SCH_MODE_SETB: |
|||
RET |
|||
SCH_MODE_CLR: |
|||
RET |
|||
SCH_MODE_OFF: |
|||
RET |
RET |
||
FEEDBACK: |
FEEDBACK: |
||
MOV A, AIRCON |
|||
JNB AIRCON, AIRCON_OFF |
|||
JZ FEEDBACK_AIRCON_OFF |
|||
FEEDBACK_AIRCON_ON: |
|||
AIRCON_ON: |
|||
MOV A, MEM_ADC |
MOV A, MEM_ADC |
||
INC A |
INC A |
||
Line 885: | Line 705: | ||
SUBB A, MEM_CNT |
SUBB A, MEM_CNT |
||
JNB ACC.7, FEEDBACK_EXIT |
JNB ACC.7, FEEDBACK_EXIT |
||
LCALL OFF_AIRCON |
|||
CLR AIRCON |
|||
JMP FEEDBACK_EXIT |
JMP FEEDBACK_EXIT |
||
FEEDBACK_AIRCON_OFF: |
|||
AIRCON_OFF: |
|||
MOV A, MEM_CNT |
MOV A, MEM_CNT |
||
INC A |
INC A |
||
Line 894: | Line 714: | ||
SUBB A, MEM_ADC |
SUBB A, MEM_ADC |
||
JNB ACC.7, FEEDBACK_EXIT |
JNB ACC.7, FEEDBACK_EXIT |
||
LCALL ON_AIRCON |
|||
SETB AIRCON |
|||
FEEDBACK_EXIT: |
FEEDBACK_EXIT: |
||
MOV C, AIRCON |
|||
CPL C |
|||
MOV P2.5, C |
|||
RET |
RET |
||
TX: |
TX: |
||
MOV SBUF, SEC |
|||
JNB TI, $ |
|||
CLR TI |
|||
MOV SBUF, MEM_ADC |
MOV SBUF, MEM_ADC |
||
JNB TI, $ |
JNB TI, $ |
||
Line 952: | Line 772: | ||
MOV A, SBUF |
MOV A, SBUF |
||
CLR RI |
CLR RI |
||
JZ RX_END |
JZ RX_END |
||
Line 963: | Line 782: | ||
MODE2: |
MODE2: |
||
CJNE A, #2, MODE3 |
CJNE A, #2, MODE3 |
||
MOV MEM_ADC, STMP1 ;(????) |
|||
MOV MEM_SWV, STMP2 |
|||
MOV MEM_SER, STMP3 |
|||
JMP RX_END |
|||
MODE3: |
|||
CJNE A, #3, MODE4 |
|||
MOV SON, STMP1 |
MOV SON, STMP1 |
||
MOV SHOURON, STMP2 |
MOV SHOURON, STMP2 |
||
MOV SMINON, STMP3 |
MOV SMINON, STMP3 |
||
JMP RX_END |
|||
MODE3: |
|||
CJNE A, #3, MODE4 |
|||
MOV SOFF, STMP1 |
|||
MOV SHOUROFF, STMP2 |
|||
MOV SMINOFF, STMP3 |
|||
JMP RX_END |
JMP RX_END |
||
MODE4: |
MODE4: |
||
Line 997: | Line 816: | ||
;---------------; |
;---------------; |
||
; |
; ; |
||
; SCHEDULE ; |
|||
; |
; ; |
||
; ; |
|||
;---------------; |
;---------------; |
||
Line 1,011: | Line 830: | ||
CJNE A, SMINON, SCHEDULE_OFF |
CJNE A, SMINON, SCHEDULE_OFF |
||
SETB AIRCON |
|||
LCALL ON_AIRCON |
LCALL ON_AIRCON |
||
MOV MEM_SWV, #0 |
MOV MEM_SWV, #0 |
||
Line 1,023: | Line 841: | ||
CJNE A, SMINOFF, SCHEDULE_END |
CJNE A, SMINOFF, SCHEDULE_END |
||
CLR AIRCON |
|||
LCALL OFF_AIRCON |
LCALL OFF_AIRCON |
||
MOV MEM_SWV, #1 |
MOV MEM_SWV, #1 |
||
Line 1,031: | Line 848: | ||
ON_AIRCON: |
ON_AIRCON: |
||
MOV A, AIRCON |
|||
CJNE A, #0, ON_AIRCON_EXIT |
|||
SETB P1.0 |
|||
CLR P1.1 |
|||
JNB P1.4, $ |
|||
MOV R1, #10 |
|||
ON_AIRCON_WAIT1: |
|||
MOV MEM_DJ, #255 |
|||
ON_AIRCON_WAIT2: |
|||
NOP |
|||
DJNZ MEM_DJ, ON_AIRCON_WAIT2 |
|||
DJNZ R1, ON_AIRCON_WAIT1 |
|||
CLR P1.0 |
|||
SETB P1.1 |
|||
MOV R1, #255 |
|||
ON_AIRCON_DELAY1: |
|||
MOV MEM_DJ, #255 |
|||
ON_AIRCON_DELAY2: |
|||
NOP |
|||
NOP |
|||
NOP |
|||
NOP |
|||
NOP |
|||
DJNZ MEM_DJ, ON_AIRCON_DELAY2 |
|||
DJNZ R1, ON_AIRCON_DELAY1 |
|||
CLR P1.1 |
|||
MOV AIRCON, # 1 |
|||
ON_AIRCON_EXIT: |
|||
RET |
RET |
||
OFF_AIRCON: |
OFF_AIRCON: |
||
MOV A, AIRCON |
|||
CJNE A, #1, OFF_AIRCON_EXIT |
|||
CLR P1.0 |
|||
SETB P1.1 |
|||
JB P1.4, $ |
|||
MOV R1, #100 |
|||
OFF_AIRCON_WAIT1: |
|||
MOV MEM_DJ, #255 |
|||
OFF_AIRCON_WAIT2: |
|||
NOP |
|||
DJNZ MEM_DJ, OFF_AIRCON_WAIT2 |
|||
DJNZ R1, OFF_AIRCON_WAIT1 |
|||
CLR P1.1 |
|||
SETB P1.0 |
|||
MOV R1, #255 |
|||
OFF_AIRCON_DELAY1: |
|||
MOV MEM_DJ, #255 |
|||
OFF_AIRCON_DELAY2: |
|||
NOP |
|||
NOP |
|||
NOP |
|||
NOP |
|||
NOP |
|||
DJNZ MEM_DJ, OFF_AIRCON_DELAY2 |
|||
DJNZ R1, OFF_AIRCON_DELAY1 |
|||
CLR P1.0 |
|||
MOV AIRCON, #0 |
|||
OFF_AIRCON_EXIT: |
|||
RET |
RET |
||
Line 1,042: | Line 920: | ||
;---------------; |
;---------------; |
||
MSG0: DB ' ELEC254 LAB5 ' |
|||
MSG1: DB ' LCD INTERFACING' |
|||
MSG_BUG: DB 'ADC SW CNT SE' |
|||
NULL: DB ' ' |
NULL: DB ' ' |
||
MSG_MENU: DB 'TIME ' |
MSG_MENU: DB 'TIME ' |
||
MSG_MANUAL_ON: DB 'M-ON ' |
MSG_MANUAL_ON: DB 'M-ON ' |
||
MSG_MANUAL_OFF: DB 'M-OFF' |
MSG_MANUAL_OFF: DB 'M-OFF' |
||
MSG_SCHEDULE1: DB 'SCHEDULING MODE ' |
|||
MSG_SCHEDULE2: DB 'ON FOR MIN' |
|||
MSG_AUTO: DB 'AUTO ' |
MSG_AUTO: DB 'AUTO ' |
||
MSG_SCH_ON: DB 'S-ON ' |
MSG_SCH_ON: DB 'S-ON ' |
||
Line 1,056: | Line 929: | ||
MSG_ON: DB 'ON ' |
MSG_ON: DB 'ON ' |
||
MSG_OFF: DB 'OFF' |
MSG_OFF: DB 'OFF' |
||
END |
END |
||
� |
Latest revision as of 20:58, 6 December 2009
- ELEC254 Fall 2009
- Group 9
- tm_cks tm_clh tm_wmh
- Version 2009-11-30
BUZZER EQU P3.2 INPUT EQU P3.7 ; INPUT Port MODE EQU P3.5 ; Serial input mode ACLK EQU P3.6 ; ADC Serial input Clock ADR EQU P3.3 ; RS pin ADW EQU P3.4 ; WR pin
CLK EQU P2.0 ; LCD Serial output Clock RS EQU P2.1 ; RS Pin RW EQU P2.2 ; RW Pin EN EQU P2.3 ; Enable Pin OUTPUT EQU P2.4 ; Output Port
MEM_DJ EQU R0 MEM_SER EQU R3 MEM_SWS EQU R4 MEM_SWV EQU R5 MEM_CNT EQU R6 MEM_ADC EQU R7
STARTUP EQU 20H CNT EQU 30H OFFSET EQU 31H CURPOS EQU 32H KEYIN EQU 33H
STMP1 EQU 6DH STMP2 EQU 6EH STMP3 EQU 6FH
TEMP EQU 70H
SHOUROFF EQU 71H SMINOFF EQU 72H SHOURON EQU 73H SMINON EQU 74H SON EQU 75H SOFF EQU 76H MENU_MODE EQU 77H SCH_OPTION EQU 78H AIRCON EQU 79H UA_READ EQU 7AH HOUR EQU 7BH MIN EQU 7CH SEC EQU 7DH MS50 EQU 7EH US250 EQU 7FH
- ----- PROGRAM START -----
ORG 00H LJMP MAIN
ORG 0BH LJMP TIMER_INT
ORG 23H RETI
- ----------------;
- ;
- MAIN PROGRAM ;
- ;
- ----------------;
MAIN: MOV SP, #5FH MOV MEM_SER, #20H MOV MEM_ADC, #60 MOV MEM_CNT, #60 MOV MEM_SWV,#00H MOV UA_READ, #0
MOV AIRCON, #0 JNB P1.4, MAIN_CONT MOV AIRCON, #1 MAIN_CONT: MOV IE, #10010010B ;SET INTERRUPT MOV TMOD, #20H ;SET TIMER1 MOV TH1, #243 ;SET PRELOAD VALUE SETB TR1 ;SET TIMER 1 ON MOV SCON, #50H ;SET SERIAL PORT MODE 1 MOV PCON, #80H ;SET SMOD
ANL TMOD, #11110010B ORL TMOD, #00000010B MOV TH0, #01H MOV TL0, #06H MOV HOUR, #0 MOV MIN, #0 MOV SEC, #0 MOV SHOURON, #0 MOV SMINON, #0 MOV SHOUROFF, #0 MOV SMINOFF, #0 MOV SON, #0 MOV SOFF, #0 MOV US250, #0 MOV MS50, #0 MOV SCH_OPTION, #0 MOV MENU_MODE, #0 MOV STMP1, #0 MOV STMP2, #0 MOV STMP3, #0 MOV P1, #0 SETB TR0 CLR BUZZER LCALL LCD_INIT ; Subroutine for LCD INITIZATION LCALL AD
JMP $
- ---------------;
- ;
- LCD FUNCTIONS ;
- ;
- ---------------;
LCD_INIT: MOV A, #00111000B ; SET FUNCTION 8 BIT 2 LINE 5*8 LCALL W_INS MOV A, #00111000B ; SET FUNCTION 8 BIT 2 LINE 5*8 LCALL W_INS MOV A, #00111000B ; SET FUNCTION 8 BIT 2 LINE 5*8 LCALL W_INS MOV A, #00111000B ; SET FUNCTION 8 BIT 2 LINE 5*8 LCALL W_INS MOV A, #00001000B ; DISPLAY OFF LCALL W_INS MOV A, #00000001B ; CLEAR DISPLAY LCALL W_INS MOV A, #00000110B ; SET ENTRY MODE LCALL W_INS MOV A, #00001111B ; DISPLAY ON, CURSOR ON, BLINKING LCALL W_INS RET
- ---------------------;
- ;
- BASIC LCD FUNCTIONS ;
- ;
- ---------------------;
W_TEMP: MOV B, #2 SUBB A, #16 DIV AB MOV R0, B LCALL W_D2 MOV A, #00101110B LCALL W_DATA MOV A, R0 MOV B, #5 MUL AB ORL A, #00110000B LCALL W_DATA RET
W_INS:
- LCALL W_CHECK
CLR EN CLR RS CLR RW SETB EN LCALL LCD_SERIAL_OUT CLR EN RET
W_STR: MOV OFFSET, #0 W_STRN: MOV A, OFFSET MOVC A, @A+DPTR LCALL W_DATA INC OFFSET DJNZ R0, W_STRN RET
W_DATA:
- LCALL ;W_CHECK
CLR EN SETB RS CLR RW SETB EN LCALL LCD_SERIAL_OUT CLR EN RET
W_CHECK: BUSY: CLR RS
SETB RW SETB EN SETB P2.2 CLR EN JB P2.2, BUSY RET
W_D2: MOV B, #10 DIV AB ADD A,#30H LCALL W_DATA MOV A, B ADD A,#30H LCALL W_DATA RET W_NULL: MOV R0, A MOV DPTR, #NULL LCALL W_STR RET
- --------------------;
- ;
- SERIAL OUT FOR LCD ;
- ;
- --------------------;
LCD_SERIAL_OUT: CLR CLK
SERIAL_OUT: RLC A MOV OUTPUT,C NOP SETB CLK NOP CLR CLK
RLC A MOV OUTPUT,C NOP SETB CLK NOP CLR CLK RLC A MOV OUTPUT,C NOP SETB CLK NOP CLR CLK RLC A MOV OUTPUT,C NOP SETB CLK NOP CLR CLK RLC A MOV OUTPUT,C NOP SETB CLK NOP CLR CLK RLC A MOV OUTPUT,C NOP SETB CLK NOP CLR CLK RLC A MOV OUTPUT,C NOP SETB CLK NOP CLR CLK RLC A MOV OUTPUT,C NOP SETB CLK NOP CLR CLK
RET
- ------------------;
- ;
- SWITCH FUNCTIONS ;
- ;
- ------------------;
SW: SWMENU: MOV A, P0 ANL A, #00100000B JZ MENU_SELECT MOV A, MEM_SWS JNZ MENU_SELECT XRL MENU_MODE, #1 MENU_SELECT: MOV A, MENU_MODE JNZ MENU_SCHEDULE SWAUTO: MOV A, P0 ANL A, #00000001B JZ SWMOFF MOV A, MEM_SWS JNZ SWEND MOV MEM_SWV, #0 SWMOFF: MOV A, P0 ANL A, #00000010B JZ SWMON MOV A, MEM_SWS JNZ SWEND MOV MEM_SWV, #1 SWMON: MOV A, P0 ANL A, #00000100B JZ SWINC MOV A, MEM_SWS JNZ SWEND MOV MEM_SWV, #3 SWINC: MOV A, P0 ANL A, #00001000B JZ SWDEC MOV A, MEM_SWS JNZ SWEND INC MEM_CNT SWDEC: MOV A, P0 ANL A, #00010000B JZ SWEND MOV A,MEM_SWS JNZ SWEND DEC MEM_CNT SWEND: MOV A, P0 ANL A, #00111111B MOV MEM_SWS, A RET
MENU_SCHEDULE: SWSOPT: MOV A, P0 ANL A, #00000001B JZ SWON MOV A, MEM_SWS JNZ TO_SWSEND XRL SCH_OPTION, #1 JMP SWON TO_SWSEND: JMP SWSEND SWON: MOV A, P0 ANL A, #00000010B JZ SWOFF MOV A, MEM_SWS JNZ SWSEND MOV A, SCH_OPTION JZ SWON_UPPER MOV SOFF, #1 JMP SWOFF SWON_UPPER: MOV SON, #1 SWOFF: MOV A, P0 ANL A, #00000100B JZ SWMIN MOV A, MEM_SWS JNZ SWSEND MOV A, SCH_OPTION JZ SWOFF_UPPER MOV SOFF, #0 JMP SWMIN SWOFF_UPPER: MOV SON, #0 SWMIN: MOV A, P0 ANL A, #00001000B JZ SWHOUR MOV A, MEM_SWS JNZ SWSEND MOV A, SCH_OPTION JZ SWMIN_UPPER INC SMINOFF INC SMINOFF INC SMINOFF INC SMINOFF INC SMINOFF MOV A, #60 CJNE A, SMINOFF, SWHOUR MOV SMINOFF, #0 JMP SWHOUR SWMIN_UPPER: INC SMINON INC SMINON INC SMINON INC SMINON INC SMINON MOV A, #60 CJNE A, SMINON, SWHOUR MOV SMINON, #0 SWHOUR: MOV A, P0 ANL A, #00010000B JZ SWSEND MOV A,MEM_SWS JNZ SWSEND MOV A, SCH_OPTION JZ SWHOUR_UPPER INC SHOUROFF MOV A, #24 CJNE A, SHOUROFF, SWSEND MOV SHOUROFF, #0 JMP SWSEND SWHOUR_UPPER: INC SHOURON MOV A, #24 CJNE A, SHOURON, SWSEND MOV SHOURON, #0 SWSEND: MOV A, P0 ANL A, #00111111B MOV MEM_SWS, A
RET
- ---------------;
- ;
- ADC FUNCTIONS ;
- ;
- ---------------;
AD: SETB ADR SETB ADW CLR ADW SETB ADW MOV MEM_DJ, #200
ADWAIT: DJNZ MEM_DJ, ADWAIT
CLR ADR NOP NOP
CLR ACLK
SETB MODE SETB ACLK CLR ACLK CLR MODE
MOV C,INPUT RLC A
SETB ACLK CLR ACLK MOV C,INPUT RLC A
SETB ACLK CLR ACLK MOV C,INPUT RLC A
SETB ACLK CLR ACLK MOV C,INPUT RLC A
SETB ACLK CLR ACLK MOV C,INPUT RLC A
SETB ACLK CLR ACLK MOV C,INPUT RLC A
SETB ACLK CLR ACLK MOV C,INPUT RLC A
SETB ACLK CLR ACLK MOV C,INPUT RLC A
MOV MEM_ADC,A RET
- -------------------;
- ;
- TIMER INTERRUPT ;
- ;
- -------------------;
TIMER_INT:
- INTERRUPT Start
MOV TEMP, A
- 250us
INC US250 MOV A, #187 CJNE A, US250, TIMER_EXIT
- 50ms
MOV US250, #0 INC MS50 MOV A, #20 CJNE A, MS50, SHOW_OUTPUT
- 1 second
- JB BUZZER, CLR_BUZZER
- SETB BUZZER
- JMP END_BUZZER
- CLR_BUZZER
- CLR BUZZER
- END_BUZZER
LCALL AIRCON_STATE LCALL TX MOV MS50, #0 INC SEC MOV A, SEC MOV B, #5 DIV AB MOV A, B JNZ END_ADC_COUNT LCALL AD END_ADC_COUNT: MOV A, #60 CJNE A, SEC, SHOW_OUTPUT
- 1 minute
MOV SEC, #0 INC MIN LCALL SCHEDULE MOV A, #60 CJNE A, MIN, TIMER_UPDATE
- 1 hour
MOV MIN, #0 INC HOUR MOV A, #24 CJNE A, HOUR, SHOW_OUTPUT
- 24 hour
MOV HOUR, #0
- LCALL SHOW_DEBUG
TIMER_UPDATE: MOV SBUF, MEM_ADC SHOW_OUTPUT: LCALL SW LCALL SHOW_MENU SHOW_SCHEDULE: LCALL DECISION TIMER_EXIT: MOV A,TEMP RETI
DECISION: MOV A, MEM_SWV JNB ACC.0, AUTO JNB ACC.1, MANUAL_OFF
MANUAL_ON: LCALL ON_AIRCON MOV R0, #5 MOV DPTR, #MSG_MANUAL_ON LCALL W_STR RET
MANUAL_OFF: LCALL OFF_AIRCON MOV R0, #5 MOV DPTR, #MSG_MANUAL_OFF LCALL W_STR RET
AUTO: LCALL FEEDBACK MOV R0, #5 MOV DPTR, #MSG_AUTO LCALL W_STR RET
SHOW_MENU: MOV A, #00001100B LCALL W_INS MOV A, #10000000B ; SET CURSOR POSITION 00H, LINE 1, POS 1 LCALL W_INS
MOV A, MENU_MODE JNZ SHOW_MENU_SCHEDULE
MOV R0, #4 MOV DPTR, #MSG_MENU LCALL W_STR MOV A, #1 LCALL W_NULL MOV A, HOUR LCALL W_D2 MOV A, #00111010B LCALL W_DATA MOV A, MIN LCALL W_D2 MOV A, #00111010B LCALL W_DATA MOV A, SEC LCALL W_D2 MOV A, #3 LCALL W_NULL
MOV A, #11000000B ; SET CURSOR POSITION 40H, LINE 2, POS 1 LCALL W_INS MOV A, MEM_ADC LCALL W_TEMP MOV A, #2 LCALL W_NULL MOV A, MEM_CNT LCALL W_TEMP MOV A, #1 LCALL W_NULL RET
SHOW_MENU_SCHEDULE: SHOW_MENU_SCHEDULE_FIRST_LINE: MOV R0, #6 MOV DPTR, #MSG_SCH_ON LCALL W_STR MOV A, SHOURON LCALL W_D2 MOV A, #00111010B LCALL W_DATA MOV A, SMINON LCALL W_D2 MOV A, #1 LCALL W_NULL MOV A, SON MOV R0, #3 JZ MSG_ON_OFF MOV DPTR, #MSG_ON JMP MSG_ON_WSTR MSG_ON_OFF: MOV DPTR, #MSG_OFF MSG_ON_WSTR: LCALL W_STR MOV A, SCH_OPTION JNZ MSG_ON_SPACE MOV A, #01111111B LCALL W_DATA JMP SHOW_MENU_SCHEDULE_SECOND_LINE MSG_ON_SPACE: MOV A, #1 LCALL W_NULL
SHOW_MENU_SCHEDULE_SECOND_LINE: MOV A, #11000000B ; SET CURSOR POSITION 40H, LINE 2, POS 1 LCALL W_INS MOV R0, #6 MOV DPTR, #MSG_SCH_OFF LCALL W_STR MOV A, SHOUROFF LCALL W_D2 MOV A, #00111010B LCALL W_DATA MOV A, SMINOFF LCALL W_D2 MOV A, #1 LCALL W_NULL MOV A, SOFF MOV R0, #3 JZ MSG_OFF_OFF MOV DPTR, #MSG_ON JMP MSG_OFF_WSTR MSG_OFF_OFF: MOV DPTR, #MSG_OFF MSG_OFF_WSTR: LCALL W_STR MOV A, SCH_OPTION JZ MSG_OFF_SPACE MOV A, #01111111B LCALL W_DATA RET MSG_OFF_SPACE: MOV A, #1 LCALL W_NULL
RET
AIRCON_STATE: MOV A, AIRCON JZ AIRCON_STATE_OFF JB P1.4, AIRCON_STATE_EXIT LCALL OFF_AIRCON MOV MEM_SWV, #1 JMP AIRCON_STATE_EXIT AIRCON_STATE_OFF: JNB P1.4, AIRCON_STATE_EXIT LCALL ON_AIRCON MOV MEM_SWV, #3 AIRCON_STATE_EXIT: RET
FEEDBACK: MOV A, AIRCON JZ FEEDBACK_AIRCON_OFF
FEEDBACK_AIRCON_ON: MOV A, MEM_ADC INC A INC A SUBB A, MEM_CNT JNB ACC.7, FEEDBACK_EXIT LCALL OFF_AIRCON JMP FEEDBACK_EXIT
FEEDBACK_AIRCON_OFF: MOV A, MEM_CNT INC A INC A SUBB A, MEM_ADC JNB ACC.7, FEEDBACK_EXIT LCALL ON_AIRCON
FEEDBACK_EXIT: RET
TX: MOV SBUF, SEC JNB TI, $ CLR TI MOV SBUF, MEM_ADC JNB TI, $ CLR TI MOV SBUF, MEM_CNT JNB TI, $ CLR TI MOV SBUF, MEM_SWV JNB TI, $ CLR TI MOV SBUF, AIRCON JNB TI, $ CLR TI MOV SBUF, SON JNB TI, $ CLR TI MOV SBUF, SHOURON JNB TI, $ CLR TI MOV SBUF, SMINON JNB TI, $ CLR TI MOV SBUF, SOFF JNB TI, $ CLR TI MOV SBUF, SHOUROFF JNB TI, $ CLR TI MOV SBUF, SMINOFF JNB TI, $ CLR TI
JNB RI, $ MOV A, SBUF MOV STMP1, A CLR RI
JNB RI, $ MOV A, SBUF MOV STMP2, A CLR RI
JNB RI, $ MOV A, SBUF MOV STMP3, A CLR RI
JNB RI, $ MOV A, SBUF CLR RI
JZ RX_END MODE1: CJNE A, #1, MODE2 MOV HOUR, STMP1 MOV MIN, STMP2 MOV SEC, STMP3 JMP RX_END MODE2: CJNE A, #2, MODE3 MOV SON, STMP1 MOV SHOURON, STMP2 MOV SMINON, STMP3 JMP RX_END MODE3: CJNE A, #3, MODE4 MOV SOFF, STMP1 MOV SHOUROFF, STMP2 MOV SMINOFF, STMP3 JMP RX_END MODE4: CJNE A, #43, MODE5 INC MEM_CNT JMP RX_END MODE5: CJNE A, #45, MODE6 DEC MEM_CNT JMP RX_END MODE6: CJNE A, #65, MODE7 MOV MEM_SWV, #0 JMP RX_END MODE7: CJNE A, #66, MODE8 MOV MEM_SWV, #1 JMP RX_END MODE8: CJNE A, #67, RX_END MOV MEM_SWV, #3 JMP RX_END RX_END: RET
- ---------------;
- ;
- SCHEDULE ;
- ;
- ---------------;
SCHEDULE: SCHEDULE_ON: MOV A, SON JZ SCHEDULE_OFF MOV A, HOUR CJNE A, SHOURON, SCHEDULE_OFF MOV A, MIN CJNE A, SMINON, SCHEDULE_OFF
LCALL ON_AIRCON MOV MEM_SWV, #0
SCHEDULE_OFF: MOV A, SOFF JZ SCHEDULE_END MOV A, HOUR CJNE A, SHOUROFF, SCHEDULE_END MOV A, MIN CJNE A, SMINOFF, SCHEDULE_END
LCALL OFF_AIRCON MOV MEM_SWV, #1
SCHEDULE_END: RET
ON_AIRCON: MOV A, AIRCON CJNE A, #0, ON_AIRCON_EXIT SETB P1.0 CLR P1.1 JNB P1.4, $ MOV R1, #10 ON_AIRCON_WAIT1: MOV MEM_DJ, #255 ON_AIRCON_WAIT2: NOP DJNZ MEM_DJ, ON_AIRCON_WAIT2 DJNZ R1, ON_AIRCON_WAIT1
CLR P1.0 SETB P1.1
MOV R1, #255 ON_AIRCON_DELAY1: MOV MEM_DJ, #255 ON_AIRCON_DELAY2: NOP NOP NOP NOP NOP DJNZ MEM_DJ, ON_AIRCON_DELAY2 DJNZ R1, ON_AIRCON_DELAY1 CLR P1.1 MOV AIRCON, # 1 ON_AIRCON_EXIT: RET
OFF_AIRCON: MOV A, AIRCON CJNE A, #1, OFF_AIRCON_EXIT CLR P1.0 SETB P1.1 JB P1.4, $
MOV R1, #100 OFF_AIRCON_WAIT1: MOV MEM_DJ, #255 OFF_AIRCON_WAIT2: NOP DJNZ MEM_DJ, OFF_AIRCON_WAIT2 DJNZ R1, OFF_AIRCON_WAIT1
CLR P1.1 SETB P1.0
MOV R1, #255 OFF_AIRCON_DELAY1: MOV MEM_DJ, #255 OFF_AIRCON_DELAY2: NOP NOP NOP NOP NOP DJNZ MEM_DJ, OFF_AIRCON_DELAY2 DJNZ R1, OFF_AIRCON_DELAY1 CLR P1.0 MOV AIRCON, #0 OFF_AIRCON_EXIT: RET
- ---------------;
- ;
- STRINGS ;
- ;
- ---------------;
NULL: DB ' ' MSG_MENU: DB 'TIME ' MSG_MANUAL_ON: DB 'M-ON ' MSG_MANUAL_OFF: DB 'M-OFF' MSG_AUTO: DB 'AUTO ' MSG_SCH_ON: DB 'S-ON ' MSG_SCH_OFF: DB 'S-OFF ' MSG_ON: DB 'ON ' MSG_OFF: DB 'OFF'
END �