.module main.c .area text(rom, con, rel) 0000 .dbfile ./main.c 0000 .dbfunc e main _main fV 0000 _main:: 0000 .dbline -1 0000 .dbline 21 0000 ; //---------------------------------------------------------------------------- 0000 ; // C main line 0000 ; //---------------------------------------------------------------------------- 0000 ; 0000 ; #include "psoc_defrostapi.h" 0000 ; 0000 ; #define MINUTE 60 0000 ; #define TIMER_CLK 93750L // Needs to have the 'L' or the next two lines won't work 0000 ; #define HYSTERESIS 10 * TIMER_CLK // 10 Seconds 0000 ; #define DE_ICE 30 * MINUTE * TIMER_CLK // 30 Minutes 0000 ; #define HEATER 0x10 0000 ; #define FAN 0x20 0000 ; #define ACT 0x80 0000 ; #define AIR_IN 4 0000 ; 0000 ; extern unsigned char done; 0000 ; 0000 ; void delay(DWORD timer_value); 0000 ; 0000 ; void main(void) 0000 ; { 0000 .dbline 23 0000 ; // Set pins 1, 2, and 7 to outputs 0000 ; PRT0DM0 = HEATER + FAN + ACT; 0000 7110 or F,0x10 ; iopage = 1 0002 6200B0 mov REG[0],-80 0005 70EF and F,0xEF ; iopage = 0 0007 .dbline 24 0007 ; Timer32_1_EnableInt(); 0007 10 push X 0008 7C0000 xcall _Timer32_1_EnableInt 000B 20 pop X 000C .dbline 25 000C ; M8C_EnableGInt; 000C 7101 or F, 01h 000E 000E 8046 xjmp L3 0010 L2: 0010 .dbline 27 0010 ; while (1) 0010 ; { 0010 .dbline 29 0010 ; // Turn on fan and actuator 0010 ; PRT0DR = FAN + ACT; 0010 6200A0 mov REG[0],-96 0013 .dbline 30 0013 ; delay(HYSTERESIS); 0013 5000 mov A,0 0015 08 push A 0016 500E mov A,14 0018 08 push A 0019 504E mov A,78 001B 08 push A 001C 501C mov A,28 001E 08 push A 001F 9037 xcall _delay 0021 38FC add SP,-4 0023 L5: 0023 .dbline 32 0023 L6: 0023 .dbline 31 0023 ; while (PRT0DR & AIR_IN) 0023 490004 tst REG[0],4 0026 BFFC jnz L5 0028 .dbline 34 0028 ; ; 0028 ; 0028 ; delay(HYSTERESIS); 0028 5000 mov A,0 002A 08 push A 002B 500E mov A,14 002D 08 push A 002E 504E mov A,78 0030 08 push A 0031 501C mov A,28 0033 08 push A 0034 9022 xcall _delay 0036 38FC add SP,-4 0038 .dbline 35 0038 ; if (!(PRT0DR & AIR_IN)) 0038 490004 tst REG[0],4 003B B019 jnz L8 003D .dbline 36 003D ; { 003D .dbline 38 003D ; // Turn off fan and actuator; turn on heater 003D ; PRT0DR = HEATER; 003D 620010 mov REG[0],16 0040 .dbline 39 0040 ; delay(DE_ICE); 0040 500A mov A,10 0042 08 push A 0043 500E mov A,14 0045 08 push A 0046 50EB mov A,-21 0048 08 push A 0049 50B0 mov A,-80 004B 08 push A 004C 900A xcall _delay 004E 38FC add SP,-4 0050 .dbline 41 0050 ; #if (!LOOP) 0050 ; PRT0DR = 0; 0050 620000 mov REG[0],0 0053 .dbline 42 0053 ; return; 0053 8003 xjmp L1 0055 L8: 0055 .dbline 45 0055 L3: 0055 .dbline 26 0055 8FBA xjmp L2 0057 X0: 0057 .dbline -2 0057 .dbline 46 0057 ; #endif 0057 ; } 0057 ; } 0057 ; } 0057 L1: 0057 .dbline 0 ; func end 0057 7F ret 0058 .dbend 0058 .dbfunc e delay _delay fV 0058 ; timer_value -> X-7 0058 _delay:: 0058 .dbline -1 0058 10 push X 0059 4F mov X,SP 005A .dbline 49 005A ; 005A ; void delay(DWORD timer_value) 005A ; { 005A .dbline 50 005A ; Timer32_1_WritePeriod(timer_value); 005A 10 push X 005B 52F9 mov A,[X-7] 005D 08 push A 005E 52FA mov A,[X-6] 0060 08 push A 0061 52FB mov A,[X-5] 0063 08 push A 0064 52FC mov A,[X-4] 0066 08 push A 0067 4F mov X,SP 0068 79 dec X 0069 7C0000 xcall _Timer32_1_WritePeriod 006C 38FC add SP,-4 006E .dbline 51 006E ; Timer32_1_Start(); 006E 7C0000 xcall _Timer32_1_Start 0071 20 pop X 0072 L11: 0072 .dbline 53 0072 L12: 0072 .dbline 52 0072 ; while (!done) 0072 3C0000 cmp [_done],0 0075 AFFC jz L11 0077 .dbline 55 0077 ; ; 0077 ; 0077 ; done = 0; 0077 550000 mov [_done],0 007A .dbline -2 007A .dbline 56 007A ; } 007A L10: 007A 20 pop X 007B .dbline 0 ; func end 007B 7F ret 007C .dbsym l timer_value -7 l 007C .dbend