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 |