001 002 003 004 005 006 007 008 009 010 011 012 013 014 015 016 017 018 019 020 021 022 023 024 025 026 027 028 029 030 031 032 033 034 035 036 037 038 039 040 041 042 043 044 045 046 047 048 049 050 051 052 053 054 055 056 057 058 059 060 061 062 063 064 065 066 067 068 069 070 071 072 073 074 075 076 077 078 079 080 081 082 083 084 085 086 087 088 089 090 091 092 093 094 095 096 097 098 099 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 | ;******************************************************** ; ; The Count-down timer processing ; ; Author : Seiichi Inoue ;******************************************************** list p=pic16f84a include p16f84a.inc __config _hs_osc & _wdt_off & _pwrte_on & _cp_off ;**************** Label Definition ******************** c10m equ h'0c' ;Counter adr (10th min) c01m equ h'0d' ;Counter adr ( 1st min) c10s equ h'0e' ;Counter adr (10th sec) c01s equ h'0f' ;Counter adr ( 1st sec) seg7_0 equ b'01000000' ;-gfedcba Pattern 0 seg7_1 equ b'01111001' ; Pattern 1 seg7_2 equ b'00100100' ; Pattern 2 seg7_3 equ b'00110000' ; Pattern 3 seg7_4 equ b'00011001' ; Pattern 4 seg7_5 equ b'00010010' ; Pattern 5 seg7_6 equ b'00000010' ; Pattern 6 seg7_7 equ b'01111000' ; Pattern 7 seg7_8 equ b'00000000' ; Pattern 8 seg7_9 equ b'00010000' ; Pattern 9 seg70 equ h'10' ;Pattern 0 set adr seg71 equ h'11' ;Pattern 1 set adr seg72 equ h'12' ;Pattern 2 set adr seg73 equ h'13' ;Pattern 3 set adr seg74 equ h'14' ;Pattern 4 set adr seg75 equ h'15' ;Pattern 5 set adr seg76 equ h'16' ;Pattern 6 set adr seg77 equ h'17' ;Pattern 7 set adr seg78 equ h'18' ;Pattern 8 set adr seg79 equ h'19' ;Pattern 9 set adr tm_cnt equ h'1a' ;Time adjust counter adr time_f equ h'1b' ;Time out flag adr bcd_in equ h'1c' ;BCD input area adr w_save equ h'1d' ;W Register save adr s_save equ h'1e' ;STATUS Register save adr cnt500u equ h'1f' ;500usec counter adr cnt1m equ h'20' ;1msec counter adr ra0 equ 0 ;RA0 of PORTA ra1 equ 1 ;RA1 of PORTA ra2 equ 2 ;RA2 of PORTA ra3 equ 3 ;RA3 of PORTA ra4 equ 4 ;RA4 of PORTA rb6 equ 6 ;RB6 of PORTB ;************** Debugging mode setting **************** ;For debugging mode, ";" of next line should be removed. ;#define _debug ;**************** Program Start *********************** org 0 ;Reset Vector goto init org 4 ;Interrupt Vector goto int ;**************** Initial Process ********************* org 5 init bsf status,rp0 ;Change to Bank1 movlw b'00010000' ;RA4:IN,RA3-0:OUT movwf trisa ;Set PORTA movlw b'00000111' ;RBPU/TOCS/PSA=0,PS=111 movwf option_reg ;Set OPTION_REG bcf status,rp0 ;Change to Bank0 movlw b'00001000' ;Set Relay OFF movwf porta ;Set PORTA movlw seg7_0 ;Set 7segment pattern 0 movwf seg70 ;Save pattern 0 movlw seg7_1 ;Set 7segment pattern 1 movwf seg71 ;Save pattern 1 movlw seg7_2 ;Set 7segment pattern 2 movwf seg72 ;Save pattern 2 movlw seg7_3 ;Set 7segment pattern 3 movwf seg73 ;Save pattern 3 movlw seg7_4 ;Set 7segment pattern 4 movwf seg74 ;Save pattern 4 movlw seg7_5 ;Set 7segment pattern 5 movwf seg75 ;Save pattern 5 movlw seg7_6 ;Set 7segment pattern 6 movwf seg76 ;Save pattern 6 movlw seg7_7 ;Set 7segment pattern 7 movwf seg77 ;Save pattern 7 movlw seg7_8 ;Set 7segment pattern 8 movwf seg78 ;Save pattern 8 movlw seg7_9 ;Set 7segment pattern 9 movwf seg79 ;Save pattern 9 clrf c10s ;Clear 10th sec counter clrf c01s ;Clear 1st sec counter bsf time_f,0 ;Set time out flag OFF ;************* Timer stand-by Process ***************** stand_by bsf status,rp0 ;Change to Bank1 movlw h'ff' ;RB7-0:IN movwf trisb ;Set PORTB to input mode bcf status,rp0 ;Change to Bank0 bcf porta,ra0 ;RA0 = 0 (10th min BCD) bcf porta,ra1 ;RA1 = 0 bcf porta,ra2 ;RA2 = 0 #ifdef _debug movlw h'fe' ;(Debugging step) #else call t1m ;Wait 1msec movf portb,w ;Read 10th of min BCD #endif xorlw h'ff' ;Reverse 0/1 andlw h'0f' ;Pick-up digit movwf c10m ;Save 10th of the minute bsf porta,ra0 ;RA0 = 1 (1st min BCD) #ifdef _debug movlw h'ff' ;(Debugging step) #else call t1m ;Wait 1msec movf portb,w ;Read 1st of min BCD #endif xorlw h'ff' ;Reverse 0/1 andlw h'0f' ;Pick-up digit movwf c01m ;Save 1st of the minute call led_cont ;Call LED Countrol sub movf c10m,w ;Read 10th of minute btfss status,z ;10th of min is 0 ? goto sw_check ;Jump to start sw check movf c01m,w ;Read 1st of minute btfsc status,z ;1st of min is 0 ? goto stand_by ;Time is 00:00 sw_check bsf status,rp0 ;Change to Bank1 bsf trisb,rb6 ;Set RB6 to input mode bcf status,rp0 ;Change to Bank0 bcf porta,ra0 ;RA0 = 0 (Start switch) bsf porta,ra1 ;RA1 = 1 bcf porta,ra2 ;RA2 = 0 #ifndef _debug call t1m ;Wait 1msec btfsc portb,rb6 ;Timer start ? goto stand_by ;No. Stand-by. #endif ;************** Timer start Process ******************* start bcf porta,ra3 ;Set Relay ON #ifdef _debug movlw d'255' ;(Debugging step) #else movlw d'43' ;Set Hard timer value #endif movwf tmr0 ;Set TMR0 #ifdef _debug movlw d'2' ;(Debugging step) #else movlw d'46' ;Set Soft count value #endif movwf tm_cnt ;Save time adjust movlw h'a0' ;GIE=1,TOIE=1 movwf intcon ;Interruption enable loop call led_cont ;Call LED Countrol sub movf time_f,w ;Read time out flag btfsc status,z ;Time out ? goto time_out ;Yes. Jump to time out #ifndef _debug btfsc porta,ra4 ;Stop switch ON ? #endif goto loop ;No. Retry time_out clrf intcon ;Interruptin disable goto init ;Jump to Initial Process ;************** LED Control Subroutine **************** led_cont bsf status,rp0 ;Change to Bank1 clrf trisb ;Set PORTB to output mode bcf status,rp0 ;Change to Bank0 bcf porta,ra0 ;RA0 = 0 (7seg 10th min) bcf porta,ra1 ;RA1 = 0 bsf porta,ra2 ;RA2 = 1 movf c10m,w ;Read 10th of min count movwf bcd_in ;Set count call bcd_7seg ;LED control bsf porta,ra0 ;RA0 = 1 (7seg 1st min) movf c01m,w ;Read 1st of min count movwf bcd_in ;Set count call bcd_7seg ;LED control bcf porta,ra0 ;RA0 = 0 (7seg 10th sec) bsf porta,ra1 ;RA1 = 1 movf c10s,w ;Read 10th of sec count movwf bcd_in ;Set count call bcd_7seg ;LED control bsf porta,ra0 ;RA0 = 1 (7seg 1st sec) movf c01s,w ;Read 1st of sec count movwf bcd_in ;Set count call bcd_7seg ;LED control return ;******* Change BCD to 7segment data Subroutine ******* bcd_7seg movlw seg70 ;Set 7seg pattern head addwf bcd_in,w ;Pattern table address movwf fsr ;Set table address movf indf,w ;Read 7seg pattern movwf portb ;Set pattern to PORTB #ifndef _debug call t1m ;Wait 1msec #endif return ;************* 1msec Timer Subroutine ***************** t1m movlw 2 ;(1) Set loop cnt1 movwf cnt1m ;(1) Save loop cnt1 tm1lp1 movlw d'249' ;(1)*2 Set loop cnt2 movwf cnt500u ;(1)*2 Save loop cnt2 tm1lp2 nop ;(1)*249*2 Time adjust nop ;(1)*249*2 Time adjust decfsz cnt500u,f ;(1)*249*2 cnt500u-1=0 ? goto tm1lp2 ;(2)*248*2 No, continue decfsz cnt1m,f ;(1)*2 cnt1m-1=0 ? goto tm1lp1 ;(2) No. Continue return ;(2) Yes. Cnt end ;Total 2501*0.4usec=1msec ;************ Begin Interruption Process ************** int movwf w_save ;Save W register movf status,w ;Read STATUS reg movwf s_save ;Save STATUS reg bcf status,rp0 ;Change to Bank0 btfsc intcon,t0if ;Time out interruption ? goto timer_int ;Jump to Timer process ;************ END of Interruption Process ************** int_end movf s_save,w ;Read saved STATUS reg movwf status ;Recover STATUS reg swapf w_save,f ;Read saved W register swapf w_save,w ;Recover W register retfie ;*********** Time-out interruption Process ************ timer_int bcf intcon,t0if ;Clear timer int flag #ifdef _debug movlw d'255' ;(Debugging step) #else movlw d'43' ;Set Hard timer value #endif movwf tmr0 ;Set TMR0 decfsz tm_cnt,f ;Time over ? goto int_end ;No. Retry #ifdef _debug movlw d'2' ;(Debugging step) #else movlw d'46' ;Set Soft count value #endif movwf tm_cnt ;Save time adjust ;************* Timer count-down Process *************** decfsz c01s,w ;1st of sec is 0 from 1 ? goto countdown ;No. Jump to countdown ;----------------- Time-out check --------------------- movf c10s,w ;Read 10th of sec counter btfss status,z ;10th of sec is 0 ? goto countdown ;Jump to countdown movf c01m,w ;Read 1st of min counter btfss status,z ;1st of min is 0 ? goto countdown ;Jump to countdown movf c10m,w ;Read 10th of min counter btfss status,z ;10th of min is 0 ? goto countdown ;Jump to countdown time_out1 clrf time_f ;Set time-out flag ON goto int_end ;Return ;---------------- Timer countdown --------------------- countdown movf c01s,w ;Read 1st of sec counter btfss status,z ;1st of sec is 0 ? goto cd_c01s ;Jump to 1st sec cntdown movlw 9 ;Set 9 movwf c01s ;Save 9 to 1st of sec movf c10s,w ;Read 10th of sec counter btfss status,z ;10th of sec is 0 ? goto cd_c10s ;Jump to 10th min cntdown movlw 5 ;Set 5 movwf c10s ;Save 5 to 10th of sec movf c01m,w ;Read 1st of min counter btfss status,z ;1st of min is 0 ? goto cd_c01m ;Jump to 1st min cntdown movlw 9 ;Set 9 movwf c01m ;Save 9 to 1st of min movf c10m,w ;Read 10th of min counter btfss status,z ;10th of min is 0 ? goto cd_c10m ;Jump to 10th min cntdown goto time_out1 ;Counter is 00:00 already cd_c01s decf c01s,f ;Count down 1st of sec goto int_end ;Return cd_c10s decf c10s,f ;Count down 10th of sec goto int_end ;Return cd_c01m decf c01m,f ;Count down 1st of min goto int_end ;Return cd_c10m decf c10m,f ;Count down 10th of min goto int_end ;Return ;******************************************************** ; END of Count-down timer processing ;******************************************************** end |
MPASM 02.40 Released COUNTDWN.ASM 6-10-2000 10:16:30 PAGE 1 LOC OBJECT CODE LINE SOURCE TEXT VALUE 00001 ;******************************************************** 00002 ; 00003 ; The Count-down timer processing 00004 ; 00005 ; Author : Seiichi Inoue 00006 ;******************************************************** 00007 00008 LIST P=PIC16F84A 00009 INCLUDE P16F84A.INC 00001 LIST 00002 ; P16F84A.INC Standard Header File, Version 2.00(modify) 00134 LIST 2007 3FF2 00010 __CONFIG _HS_OSC & _WDT_OFF & _PWRTE_ON & _CP_OFF 00011 00012 ;**************** Label Definition ******************** 0000000C 00013 C10M EQU H'0c' ;Counter adr (10th min) 0000000D 00014 C01M EQU H'0d' ;Counter adr ( 1st min) 0000000E 00015 C10S EQU H'0e' ;Counter adr (10th sec) 0000000F 00016 C01S EQU H'0f' ;Counter adr ( 1st sec) 00017 00000040 00018 SEG7_0 EQU B'01000000' ;-gfedcba Pattern 0 00000079 00019 SEG7_1 EQU B'01111001' ; Pattern 1 00000024 00020 SEG7_2 EQU B'00100100' ; Pattern 2 00000030 00021 SEG7_3 EQU B'00110000' ; Pattern 3 00000019 00022 SEG7_4 EQU B'00011001' ; Pattern 4 00000012 00023 SEG7_5 EQU B'00010010' ; Pattern 5 00000002 00024 SEG7_6 EQU B'00000010' ; Pattern 6 00000078 00025 SEG7_7 EQU B'01111000' ; Pattern 7 00000000 00026 SEG7_8 EQU B'00000000' ; Pattern 8 00000010 00027 SEG7_9 EQU B'00010000' ; Pattern 9 00028 00000010 00029 SEG70 EQU H'10' ;Pattern 0 set adr 00000011 00030 SEG71 EQU H'11' ;Pattern 1 set adr 00000012 00031 SEG72 EQU H'12' ;Pattern 2 set adr 00000013 00032 SEG73 EQU H'13' ;Pattern 3 set adr 00000014 00033 SEG74 EQU H'14' ;Pattern 4 set adr 00000015 00034 SEG75 EQU H'15' ;Pattern 5 set adr 00000016 00035 SEG76 EQU H'16' ;Pattern 6 set adr 00000017 00036 SEG77 EQU H'17' ;Pattern 7 set adr 00000018 00037 SEG78 EQU H'18' ;Pattern 8 set adr 00000019 00038 SEG79 EQU H'19' ;Pattern 9 set adr 00039 0000001A 00040 TM_CNT EQU H'1a' ;Time adjust counter adr 0000001B 00041 TIME_F EQU H'1b' ;Time out flag adr 0000001C 00042 BCD_IN EQU H'1c' ;BCD input area adr 00043 0000001D 00044 W_SAVE EQU H'1d' ;W Register save adr 0000001E 00045 S_SAVE EQU H'1e' ;STATUS Register save adr 00046 0000001F 00047 CNT500U EQU H'1f' ;500usec counter adr 00000020 00048 CNT1M EQU H'20' ;1msec counter adr 00049 00000000 00050 RA0 EQU 0 ;RA0 of PORTA MPASM 02.40 Released COUNTDWN.ASM 6-10-2000 10:16:30 PAGE 2 LOC OBJECT CODE LINE SOURCE TEXT VALUE 00000001 00051 RA1 EQU 1 ;RA1 of PORTA 00000002 00052 RA2 EQU 2 ;RA2 of PORTA 00000003 00053 RA3 EQU 3 ;RA3 of PORTA 00000004 00054 RA4 EQU 4 ;RA4 of PORTA 00055 00000006 00056 RB6 EQU 6 ;RB6 of PORTB 00057 00058 ;************** Debugging mode setting **************** 00059 ;For debugging mode, ";" of next line should be removed. 00060 ;#define _debug 00061 00062 ;**************** Program Start *********************** 0000 00063 ORG 0 ;Reset Vector 0000 2805 00064 GOTO INIT 0004 00065 ORG 4 ;Interrupt Vector 0004 287E 00066 GOTO INT 00067 00068 ;**************** Initial Process ********************* 0005 00069 ORG 5 0005 1683 00070 INIT BSF STATUS,RP0 ;Change to Bank1 0006 3010 00071 MOVLW B'00010000' ;RA4:IN,RA3-0:OUT 0007 0085 00072 MOVWF TRISA ;Set PORTA 0008 3007 00073 MOVLW B'00000111' ;RBPU/TOCS/PSA=0,PS=111 0009 0081 00074 MOVWF OPTION_REG ;Set OPTION_REG 000A 1283 00075 BCF STATUS,RP0 ;Change to Bank0 000B 3008 00076 MOVLW B'00001000' ;Set Relay OFF 000C 0085 00077 MOVWF PORTA ;Set PORTA 000D 3040 00078 MOVLW SEG7_0 ;Set 7segment pattern 0 000E 0090 00079 MOVWF SEG70 ;Save pattern 0 000F 3079 00080 MOVLW SEG7_1 ;Set 7segment pattern 1 0010 0091 00081 MOVWF SEG71 ;Save pattern 1 0011 3024 00082 MOVLW SEG7_2 ;Set 7segment pattern 2 0012 0092 00083 MOVWF SEG72 ;Save pattern 2 0013 3030 00084 MOVLW SEG7_3 ;Set 7segment pattern 3 0014 0093 00085 MOVWF SEG73 ;Save pattern 3 0015 3019 00086 MOVLW SEG7_4 ;Set 7segment pattern 4 0016 0094 00087 MOVWF SEG74 ;Save pattern 4 0017 3012 00088 MOVLW SEG7_5 ;Set 7segment pattern 5 0018 0095 00089 MOVWF SEG75 ;Save pattern 5 0019 3002 00090 MOVLW SEG7_6 ;Set 7segment pattern 6 001A 0096 00091 MOVWF SEG76 ;Save pattern 6 001B 3078 00092 MOVLW SEG7_7 ;Set 7segment pattern 7 001C 0097 00093 MOVWF SEG77 ;Save pattern 7 001D 3000 00094 MOVLW SEG7_8 ;Set 7segment pattern 8 001E 0098 00095 MOVWF SEG78 ;Save pattern 8 001F 3010 00096 MOVLW SEG7_9 ;Set 7segment pattern 9 0020 0099 00097 MOVWF SEG79 ;Save pattern 9 0021 018E 00098 CLRF C10S ;Clear 10th sec counter 0022 018F 00099 CLRF C01S ;Clear 1st sec counter 0023 141B 00100 BSF TIME_F,0 ;Set time out flag OFF 00101 00102 ;************* Timer stand-by Process ***************** 0024 00103 STAND_BY MPASM 02.40 Released COUNTDWN.ASM 6-10-2000 10:16:30 PAGE 3 LOC OBJECT CODE LINE SOURCE TEXT VALUE 0024 1683 00104 BSF STATUS,RP0 ;Change to Bank1 0025 30FF 00105 MOVLW H'ff' ;RB7-0:IN 0026 0086 00106 MOVWF TRISB ;Set PORTB to input mode 0027 1283 00107 BCF STATUS,RP0 ;Change to Bank0 0028 1005 00108 BCF PORTA,RA0 ;RA0 = 0 (10th min BCD) 0029 1085 00109 BCF PORTA,RA1 ;RA1 = 0 002A 1105 00110 BCF PORTA,RA2 ;RA2 = 0 00111 #IFDEF _DEBUG 00112 MOVLW H'fe' ;(Debugging step) 00113 #ELSE 002B 2073 00114 CALL T1M ;Wait 1msec 002C 0806 00115 MOVF PORTB,W ;Read 10th of min BCD 00116 #ENDIF 002D 3AFF 00117 XORLW H'ff' ;Reverse 0/1 002E 390F 00118 ANDLW H'0f' ;Pick-up digit 002F 008C 00119 MOVWF C10M ;Save 10th of the minute 0030 1405 00120 BSF PORTA,RA0 ;RA0 = 1 (1st min BCD) 00121 #IFDEF _DEBUG 00122 MOVLW H'ff' ;(Debugging step) 00123 #ELSE 0031 2073 00124 CALL T1M ;Wait 1msec 0032 0806 00125 MOVF PORTB,W ;Read 1st of min BCD 00126 #ENDIF 0033 3AFF 00127 XORLW H'ff' ;Reverse 0/1 0034 390F 00128 ANDLW H'0f' ;Pick-up digit 0035 008D 00129 MOVWF C01M ;Save 1st of the minute 0036 2055 00130 CALL LED_CONT ;Call LED Countrol sub 0037 080C 00131 MOVF C10M,W ;Read 10th of minute 0038 1D03 00132 BTFSS STATUS,Z ;10th of min is 0 ? 0039 283D 00133 GOTO SW_CHECK ;Jump to start sw check 003A 080D 00134 MOVF C01M,W ;Read 1st of minute 003B 1903 00135 BTFSC STATUS,Z ;1st of min is 0 ? 003C 2824 00136 GOTO STAND_BY ;Time is 00:00 003D 00137 SW_CHECK 003D 1683 00138 BSF STATUS,RP0 ;Change to Bank1 003E 1706 00139 BSF TRISB,RB6 ;Set RB6 to input mode 003F 1283 00140 BCF STATUS,RP0 ;Change to Bank0 0040 1005 00141 BCF PORTA,RA0 ;RA0 = 0 (Start switch) 0041 1485 00142 BSF PORTA,RA1 ;RA1 = 1 0042 1105 00143 BCF PORTA,RA2 ;RA2 = 0 00144 #IFNDEF _DEBUG 0043 2073 00145 CALL T1M ;Wait 1msec 0044 1B06 00146 BTFSC PORTB,RB6 ;Timer start ? 0045 2824 00147 GOTO STAND_BY ;No. Stand-by. 00148 #ENDIF 00149 00150 ;************** Timer start Process ******************* 0046 00151 START 0046 1185 00152 BCF PORTA,RA3 ;Set Relay ON 00153 #IFDEF _DEBUG 00154 MOVLW D'255' ;(Debugging step) 00155 #ELSE 0047 302B 00156 MOVLW D'43' ;Set Hard timer value MPASM 02.40 Released COUNTDWN.ASM 6-10-2000 10:16:30 PAGE 4 LOC OBJECT CODE LINE SOURCE TEXT VALUE 00157 #ENDIF 0048 0081 00158 MOVWF TMR0 ;Set TMR0 00159 #IFDEF _DEBUG 00160 MOVLW D'2' ;(Debugging step) 00161 #ELSE 0049 302E 00162 MOVLW D'46' ;Set Soft count value 00163 #ENDIF 004A 009A 00164 MOVWF TM_CNT ;Save time adjust 004B 30A0 00165 MOVLW H'a0' ;GIE=1,TOIE=1 004C 008B 00166 MOVWF INTCON ;Interruption enable 004D 00167 LOOP 004D 2055 00168 CALL LED_CONT ;Call LED Countrol sub 004E 081B 00169 MOVF TIME_F,W ;Read time out flag 004F 1903 00170 BTFSC STATUS,Z ;Time out ? 0050 2853 00171 GOTO TIME_OUT ;Yes. Jump to time out 00172 00173 #IFNDEF _DEBUG 0051 1A05 00174 BTFSC PORTA,RA4 ;Stop switch ON ? 00175 #ENDIF 0052 284D 00176 GOTO LOOP ;No. Retry 00177 0053 00178 TIME_OUT 0053 018B 00179 CLRF INTCON ;Interruptin disable 0054 2805 00180 GOTO INIT ;Jump to Initial Process 00181 00182 ;************** LED Control Subroutine **************** 0055 00183 LED_CONT 0055 1683 00184 BSF STATUS,RP0 ;Change to Bank1 0056 0186 00185 CLRF TRISB ;Set PORTB to output mode 0057 1283 00186 BCF STATUS,RP0 ;Change to Bank0 0058 1005 00187 BCF PORTA,RA0 ;RA0 = 0 (7seg 10th min) 0059 1085 00188 BCF PORTA,RA1 ;RA1 = 0 005A 1505 00189 BSF PORTA,RA2 ;RA2 = 1 005B 080C 00190 MOVF C10M,W ;Read 10th of min count 005C 009C 00191 MOVWF BCD_IN ;Set count 005D 206C 00192 CALL BCD_7SEG ;LED control 005E 1405 00193 BSF PORTA,RA0 ;RA0 = 1 (7seg 1st min) 005F 080D 00194 MOVF C01M,W ;Read 1st of min count 0060 009C 00195 MOVWF BCD_IN ;Set count 0061 206C 00196 CALL BCD_7SEG ;LED control 0062 1005 00197 BCF PORTA,RA0 ;RA0 = 0 (7seg 10th sec) 0063 1485 00198 BSF PORTA,RA1 ;RA1 = 1 0064 080E 00199 MOVF C10S,W ;Read 10th of sec count 0065 009C 00200 MOVWF BCD_IN ;Set count 0066 206C 00201 CALL BCD_7SEG ;LED control 0067 1405 00202 BSF PORTA,RA0 ;RA0 = 1 (7seg 1st sec) 0068 080F 00203 MOVF C01S,W ;Read 1st of sec count 0069 009C 00204 MOVWF BCD_IN ;Set count 006A 206C 00205 CALL BCD_7SEG ;LED control 006B 0008 00206 RETURN 00207 00208 ;******* Change BCD to 7segment data Subroutine ******* 006C 00209 BCD_7SEG MPASM 02.40 Released COUNTDWN.ASM 6-10-2000 10:16:30 PAGE 5 LOC OBJECT CODE LINE SOURCE TEXT VALUE 006C 3010 00210 MOVLW SEG70 ;Set 7seg pattern head 006D 071C 00211 ADDWF BCD_IN,W ;Pattern table address 006E 0084 00212 MOVWF FSR ;Set table address 006F 0800 00213 MOVF INDF,W ;Read 7seg pattern 0070 0086 00214 MOVWF PORTB ;Set pattern to PORTB 00215 #IFNDEF _DEBUG 0071 2073 00216 CALL T1M ;Wait 1msec 00217 #ENDIF 0072 0008 00218 RETURN 00219 00220 ;************* 1msec Timer Subroutine ***************** 0073 3002 00221 T1M MOVLW 2 ;(1) Set loop cnt1 0074 00A0 00222 MOVWF CNT1M ;(1) Save loop cnt1 0075 30F9 00223 TM1LP1 MOVLW D'249' ;(1)*2 Set loop cnt2 0076 009F 00224 MOVWF CNT500U ;(1)*2 Save loop cnt2 0077 0000 00225 TM1LP2 NOP ;(1)*249*2 Time adjust 0078 0000 00226 NOP ;(1)*249*2 Time adjust 0079 0B9F 00227 DECFSZ CNT500U,F ;(1)*249*2 cnt500u-1=0 ? 007A 2877 00228 GOTO TM1LP2 ;(2)*248*2 No, continue 007B 0BA0 00229 DECFSZ CNT1M,F ;(1)*2 cnt1m-1=0 ? 007C 2875 00230 GOTO TM1LP1 ;(2) No. Continue 007D 0008 00231 RETURN ;(2) Yes. Cnt end 00232 ;Total 2501*0.4usec=1msec 00233 00234 ;************ Begin Interruption Process ************** 007E 00235 INT 007E 009D 00236 MOVWF W_SAVE ;Save W register 007F 0803 00237 MOVF STATUS,W ;Read STATUS reg 0080 009E 00238 MOVWF S_SAVE ;Save STATUS reg 0081 1283 00239 BCF STATUS,RP0 ;Change to Bank0 0082 190B 00240 BTFSC INTCON,T0IF ;Time out interruption ? 0083 2889 00241 GOTO TIMER_INT ;Jump to Timer process 00242 00243 ;************ END of Interruption Process ************** 0084 00244 INT_END 0084 081E 00245 MOVF S_SAVE,W ;Read saved STATUS reg 0085 0083 00246 MOVWF STATUS ;Recover STATUS reg 0086 0E9D 00247 SWAPF W_SAVE,F ;Read saved W register 0087 0E1D 00248 SWAPF W_SAVE,W ;Recover W register 0088 0009 00249 RETFIE 00250 00251 ;*********** Time-out interruption Process ************ 0089 00252 TIMER_INT 0089 110B 00253 BCF INTCON,T0IF ;Clear timer int flag 00254 #IFDEF _DEBUG 00255 MOVLW D'255' ;(Debugging step) 00256 #ELSE 008A 302B 00257 MOVLW D'43' ;Set Hard timer value 00258 #ENDIF 008B 0081 00259 MOVWF TMR0 ;Set TMR0 008C 0B9A 00260 DECFSZ TM_CNT,F ;Time over ? 008D 2884 00261 GOTO INT_END ;No. Retry 00262 #IFDEF _DEBUG MPASM 02.40 Released COUNTDWN.ASM 6-10-2000 10:16:30 PAGE 6 LOC OBJECT CODE LINE SOURCE TEXT VALUE 00263 MOVLW D'2' ;(Debugging step) 00264 #ELSE 008E 302E 00265 MOVLW D'46' ;Set Soft count value 00266 #ENDIF 008F 009A 00267 MOVWF TM_CNT ;Save time adjust 00268 00269 ;************* Timer count-down Process *************** 0090 0B0F 00270 DECFSZ C01S,W ;1st of sec is 0 from 1 ? 0091 289D 00271 GOTO COUNTDOWN ;No. Jump to countdown 00272 00273 ;----------------- Time-out check --------------------- 0092 080E 00274 MOVF C10S,W ;Read 10th of sec counter 0093 1D03 00275 BTFSS STATUS,Z ;10th of sec is 0 ? 0094 289D 00276 GOTO COUNTDOWN ;Jump to countdown 0095 080D 00277 MOVF C01M,W ;Read 1st of min counter 0096 1D03 00278 BTFSS STATUS,Z ;1st of min is 0 ? 0097 289D 00279 GOTO COUNTDOWN ;Jump to countdown 0098 080C 00280 MOVF C10M,W ;Read 10th of min counter 0099 1D03 00281 BTFSS STATUS,Z ;10th of min is 0 ? 009A 289D 00282 GOTO COUNTDOWN ;Jump to countdown 00283 009B 00284 TIME_OUT1 009B 019B 00285 CLRF TIME_F ;Set time-out flag ON 009C 2884 00286 GOTO INT_END ;Return 00287 00288 ;---------------- Timer countdown --------------------- 009D 00289 COUNTDOWN 009D 080F 00290 MOVF C01S,W ;Read 1st of sec counter 009E 1D03 00291 BTFSS STATUS,Z ;1st of sec is 0 ? 009F 28B0 00292 GOTO CD_C01S ;Jump to 1st sec cntdown 00A0 3009 00293 MOVLW 9 ;Set 9 00A1 008F 00294 MOVWF C01S ;Save 9 to 1st of sec 00A2 080E 00295 MOVF C10S,W ;Read 10th of sec counter 00A3 1D03 00296 BTFSS STATUS,Z ;10th of sec is 0 ? 00A4 28B2 00297 GOTO CD_C10S ;Jump to 10th min cntdown 00A5 3005 00298 MOVLW 5 ;Set 5 00A6 008E 00299 MOVWF C10S ;Save 5 to 10th of sec 00A7 080D 00300 MOVF C01M,W ;Read 1st of min counter 00A8 1D03 00301 BTFSS STATUS,Z ;1st of min is 0 ? 00A9 28B4 00302 GOTO CD_C01M ;Jump to 1st min cntdown 00AA 3009 00303 MOVLW 9 ;Set 9 00AB 008D 00304 MOVWF C01M ;Save 9 to 1st of min 00AC 080C 00305 MOVF C10M,W ;Read 10th of min counter 00AD 1D03 00306 BTFSS STATUS,Z ;10th of min is 0 ? 00AE 28B6 00307 GOTO CD_C10M ;Jump to 10th min cntdown 00AF 289B 00308 GOTO TIME_OUT1 ;Counter is 00:00 already 00309 00B0 00310 CD_C01S 00B0 038F 00311 DECF C01S,F ;Count down 1st of sec 00B1 2884 00312 GOTO INT_END ;Return 00313 00B2 00314 CD_C10S 00B2 038E 00315 DECF C10S,F ;Count down 10th of sec MPASM 02.40 Released COUNTDWN.ASM 6-10-2000 10:16:30 PAGE 7 LOC OBJECT CODE LINE SOURCE TEXT VALUE 00B3 2884 00316 GOTO INT_END ;Return 00317 00B4 00318 CD_C01M 00B4 038D 00319 DECF C01M,F ;Count down 1st of min 00B5 2884 00320 GOTO INT_END ;Return 00321 00B6 00322 CD_C10M 00B6 038C 00323 DECF C10M,F ;Count down 10th of min 00B7 2884 00324 GOTO INT_END ;Return 00325 00326 ;******************************************************** 00327 ; END of Count-down timer processing 00328 ;******************************************************** 00329 00330 END MPASM 02.40 Released COUNTDWN.ASM 6-10-2000 10:16:30 PAGE 8 SYMBOL TABLE LABEL VALUE BCD_7SEG 0000006C BCD_IN 0000001C C 00000000 C01M 0000000D C01S 0000000F C10M 0000000C C10S 0000000E CD_C01M 000000B4 CD_C01S 000000B0 CD_C10M 000000B6 CD_C10S 000000B2 CNT1M 00000020 CNT500U 0000001F COUNTDOWN 0000009D DC 00000001 EEADR 00000009 EECON1 00000008 EECON2 00000009 EEDATA 00000008 EEIE 00000006 EEIF 00000004 F 00000001 FSR 00000004 GIE 00000007 INDF 00000000 INIT 00000005 INT 0000007E INTCON 0000000B INTE 00000004 INTEDG 00000006 INTF 00000001 INT_END 00000084 IRP 00000007 LED_CONT 00000055 LOOP 0000004D NOT_PD 00000003 NOT_RBPU 00000007 NOT_TO 00000004 OPTION_REG 00000001 PCL 00000002 PCLATH 0000000A PORTA 00000005 PORTB 00000006 PS0 00000000 PS1 00000001 PS2 00000002 PSA 00000003 RA0 00000000 RA1 00000001 RA2 00000002 RA3 00000003 RA4 00000004 RB6 00000006 MPASM 02.40 Released COUNTDWN.ASM 6-10-2000 10:16:30 PAGE 9 SYMBOL TABLE LABEL VALUE RBIE 00000003 RBIF 00000000 RD 00000000 RP0 00000005 RP1 00000006 SEG70 00000010 SEG71 00000011 SEG72 00000012 SEG73 00000013 SEG74 00000014 SEG75 00000015 SEG76 00000016 SEG77 00000017 SEG78 00000018 SEG79 00000019 SEG7_0 00000040 SEG7_1 00000079 SEG7_2 00000024 SEG7_3 00000030 SEG7_4 00000019 SEG7_5 00000012 SEG7_6 00000002 SEG7_7 00000078 SEG7_8 00000000 SEG7_9 00000010 STAND_BY 00000024 START 00000046 STATUS 00000003 SW_CHECK 0000003D S_SAVE 0000001E T0CS 00000005 T0IE 00000005 T0IF 00000002 T0SE 00000004 T1M 00000073 TIMER_INT 00000089 TIME_F 0000001B TIME_OUT 00000053 TIME_OUT1 0000009B TM1LP1 00000075 TM1LP2 00000077 TMR0 00000001 TM_CNT 0000001A TRISA 00000005 TRISB 00000006 W 00000000 WR 00000001 WREN 00000002 WRERR 00000003 W_SAVE 0000001D Z 00000002 _CP_OFF 00003FFF _CP_ON 0000000F MPASM 02.40 Released COUNTDWN.ASM 6-10-2000 10:16:30 PAGE 10 SYMBOL TABLE LABEL VALUE _HS_OSC 00003FFE _LP_OSC 00003FFC _PWRTE_OFF 00003FFF _PWRTE_ON 00003FF7 _RC_OSC 00003FFF _WDT_OFF 00003FFB _WDT_ON 00003FFF _XT_OSC 00003FFD __16F84A 00000001 MEMORY USAGE MAP ('X' = Used, '-' = Unused) 0000 : X---XXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX 0040 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX 0080 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXX-------- 2000 : -------X-------- ---------------- ---------------- ---------------- All other memory blocks unused. Program Memory Words Used: 181 Program Memory Words Free: 843 Errors : 0 Warnings : 0 reported, 0 suppressed Messages : 0 reported, 0 suppressed |
countdwn_source.zip countdwn_hex.zip |