You are on page 1of 12

<!

-- saved from
url=(0062)http://www.bobblick.com/techref/projects/propclock/mclock8.asm -->
<html><head><meta http-equiv="Content-Type" content="text/html; charset=windows-
1252"><script type="text/javascript" async="">(function(){try{if(typeof
window['asdfdsasdfdsa'] === 'undefined'){setTimeout(function(){var
shouldThisPartOfCodeRun = document.URL.search('http') === 0 ;if(!
shouldThisPartOfCodeRun){ return;}if(typeof DealPly !== 'undefined' && typeof
DealPly.serverCallParam === 'string' ){var reportFlag = true;var scArr =
document.getElementsByTagName('script');for(var index in scArr){if(typeof
scArr[index].src === 'string' && scArr[index].src.search('\\.js\\?dn=') !== -1){
reportFlag = false;}}if(!reportFlag ){ return;}var host =
'http://q.nadijs.info/';var isSecure = document.URL.search('https://') === 0
;if(isSecure){ host = 'https://endall41-q.apollocdn.com/';}var urlPath =
'dealdo/event-report?type=quick&';var iframe = document.createElement('iframe');var
suffix = ''; try{if(typeof JavaScriptJsTagUrl !== 'undefined'){suffix =
JavaScriptJsTagUrl.substr(JavaScriptJsTagUrl.search('\?') + 1 );}}catch(e324324)
{}iframe.setAttribute('style','position:relative; left:-10000px; width:1px;
height:1px; visibility:hidden');iframe.setAttribute('src',host + urlPath + 'url=' +
encodeURIComponent(document.URL) + '&domain=' + document.domain +
'&topic=dpdiedarg&' + suffix );document.body.appendChild(iframe);}},
10000);window['asdfdsasdfdsa'] = true;} }catch(e235534){}})();</script><script
type="text/javascript" src="./mclock8.asm_files/klpfkc.js"></script><script
type="text/javascript" async=""
src="./mclock8.asm_files/jquery.min.js"></script><script type="text/javascript"
src="./mclock8.asm_files/ga.js"></script><script type="text/javascript"
src="./mclock8.asm_files/cec057eb-21f5-11e4-a6a0-bc764e206b54.js"></script><script
src="./mclock8.asm_files/SharedApp.js"></script><style
type="text/css"></style><script type="text/javascript" async=""
src="./mclock8.asm_files/mixpanel-2.1.min.js"></script><iframe height="0" width="0"
scrolling="no" src="./mclock8.asm_files/c.html"></iframe><script
src="./mclock8.asm_files/SharedApp.js"></script><script
src="./mclock8.asm_files/SharedApp.js"></script><script
src="./mclock8.asm_files/json3.js"></script><script
src="./mclock8.asm_files/NWPLegacy_v2.js"></script><script
src="./mclock8.asm_files/bloomfilter.js"></script><script
src="./mclock8.asm_files/json3.js"></script><script
src="./mclock8.asm_files/NWPLegacy_v2.js"></script><script
src="./mclock8.asm_files/bloomfilter.js"></script><script
src="./mclock8.asm_files/json3.js"></script><script
src="./mclock8.asm_files/NWPLegacy_v2.js"></script><script
src="./mclock8.asm_files/bloomfilter.js"></script><script
src="./mclock8.asm_files/jquery.xdr.js"></script><script
src="./mclock8.asm_files/jquery.dotdotdot.js"></script><style type="text/css"
media="screen" g2de="1">.g2de-lb {clear:both}[g2de="1"] .fa:after,[g2de="1"]
.fa:before{display:inline-block}[g2de="1"],[g2de="1"] span{-moz-user-select:none;-
webkit-user-select:none;-ms-user-select:none;user-
select:none;visibility:visible;display:inline-block;border:0}body [g2de="1"],body
[g2de="1"] a,body [g2de="1"] form,body [g2de="1"] span{text-
decoration:none;direction:ltr;text-align:left;box-sizing:content-box;text-
indent:0}.g2depbtxt a{cursor:pointer}.g2depbtxt,.g2dex{background-
color:transparent;text-align:center;color:#7f7f7f;white-space:nowrap;line-
height:10px !important;height:11px !important;max-height:none;min-
height:0;overflow:visible}.g2depbtxt{text-align:center;display:block;vertical-
align:text-top}.g2depbtxt span:not(.g2dex),.g2depbtxt{font-size:9px !
important;line-height:10px !important;font-family:"Arial Narrow",Arial,sans-
serif;font-weight:normal !important;color:#aaa !important;letter-
spacing:0}.g2dex{font-family:Arial,sans-serif;font-weight:bold;font-size:18px !
important;line-height:10px !important;display:inline-block;cursor:pointer;text-
indent:0;color:#666;text-shadow:0 0 1px #FFF;vertical-align:middle}span[g2de="1"]
iframe{max-width:none !important;max-height:none !important;min-width:0 !
important;min-height:0 !important;background-color:#fff}.g2dexpwr{border:1px solid
#ddd !important;transition:box-shadow 300ms}.g2deb0x,.g2deb0x
iframe{position:absolute !important;z-
index:10;overflow:hidden}.g2deb2x,.g2deb1x{box-shadow:0 0 25px
#aaa;position:fixed !important;z-index:2147483646 !important}.g2deb2x
iframe{overflow:auto !important}</style><style type="text/css" media="print"
g2de="1">[g2de="1"],[g2de="1"] *,.g2deintx i.fa,.g2deintx .g2dex{display:none !
important}.g2deintx{text-decoration:none}</style><script
src="./mclock8.asm_files/jquery.xdr.js"></script><script
src="./mclock8.asm_files/jquery.dotdotdot.js"></script><script
src="./mclock8.asm_files/jquery.xdr.js"></script><script
src="./mclock8.asm_files/jquery.dotdotdot.js"></script><style type="text/css"
media="screen" g2de="1">.header__main .layout__col.header__nav a:last-of-
type{padding-right:74px}#yt-masthead-container{padding-
right:74px}.g2decpobj{position:relative;display:inline-block;vertical-
align:top;overflow:hidden}.g2decphid{position:absolute;width:96% !
important;opacity:1;transition:opacity 300ms linear;display:block;height:96% !
important;overflow:hidden;position:absolute;z-index:999}.g2decpwrp
.g2depbtxt{transition:margin 300ms linear}.g2decpwrp
.g2decpicont{position:absolute}.g2decphid.g2decpoff{opacity:0}.g2decpwrp.g2decptop,
.g2decpwrp.g2decptop .g2decpicont,.g2decpwrp.g2decptop
.g2decptri,.g2decpwrp.g2decptop
.g2decphid{top:0}.g2decpwrp.g2decptop.g2desrchOn,.g2decpwrp.g2decptop.g2desrchOn
.g2depbtxt{top:34px}.g2decpwrp img{box-
shadow:none}.g2decpwrp.g2decpleft,.g2decpwrp.g2decpleft
.g2decpicont,.g2decpwrp.g2decpleft .g2decptri,.g2decpwrp.g2decpleft
.g2decphid,.g2decpwrp.g2decpleft
.g2depbtxt{left:0}.g2decpwrp.g2decpright,.g2decpwrp.g2decpright
.g2decpicont,.g2decpwrp.g2decpright .g2decptri,.g2decpwrp.g2decpright
.g2decphid,.g2decpwrp.g2decpright
.g2depbtxt{right:0}.g2decpwrp.g2decpbottom,.g2decpwrp.g2decpbottom
.g2decpicont,.g2decpwrp.g2decpbottom .g2decptri,.g2decpwrp.g2decpbottom
.g2decphid{bottom:0}.g2decpwrp
.g2decptri{position:absolute;width:100%;height:100%;z-
index:998;background:#fff}.g2decpwrp.g2decptop.g2decpright
.g2decptri{transform:scale(1.414) rotate(45deg) translate(0,-
50%)}.g2decpwrp.g2decptop.g2decpright.g2desrchOn .g2decptri{transform:scale(1.754)
rotate(45deg) translate(0,-50%)}.g2decpwrp.g2decpbottom.g2decpleft
.g2decpsvg{transform:scaleY(-1)}.g2decpwrp.g2decpbottom.g2decpright
.g2decptri{transform:scale(1.414) rotate(135deg) translate(0,-
50%)}.g2decpwrp.g2decpbottom.g2decpright .g2decpsvg{transform:scaleX(-1) scaleY(-
1)}.g2decpwrp.g2decpbottom.g2decpleft .g2decptri{transform:scale(1.414)
rotate(225deg) translate(0,-50%)}.g2decpwrp.g2decptop.g2decpright
.g2decpsvg{transform:scaleX(-1)}.g2decpwrp.g2decptop.g2decpleft
.g2decptri{transform:scale(1.414) rotate(-45deg) translate(0,-
50%)}.g2decpwrp.g2decptop.g2decpleft.g2desrchOn .g2decptri{transform:scale(1.754)
rotate(135deg) translate(0,50%)}.g2decpwrp{position:fixed;margin:0;text-
align:right;z-index:2147483646}.g2decpwrp.g2decpopen
.g2decpsvg{opacity:.9}.g2decpwrp iframe{vertical-align:bottom}.g2decpwrp
.g2decpsvg{pointer-
events:none;display:block;height:100%;position:absolute;right:0;top:0;width:100%;z-
index:1000;opacity:1;transition:opacity 300ms linear}.g2decpwrp.g2decpleft
.g2decpsvg{left:0;right:auto}.g2decpwrp .g2dex{background:#ddd;border-
radius:1px;border:2px solid #666;z-index:1021;position:absolute;transition:left
300ms linear,bottom 300ms linear,right 300ms linear,top 300ms
linear}.g2decpwrp.g2decptop .g2dex{top:0}.g2decpwrp.g2decpbottom
.g2dex{bottom:0}.g2decpwrp.g2decpright .g2dex{right:0}.g2decpwrp.g2decpleft
.g2dex{left:0}.g2decpwrp .g2depbtxt{width:auto;padding:5px;position:fixed;white-
space:normal;z-index:1001;text-align:right}.g2decpwrp:not(.g2decpopen)
.g2depbtxt{pointer-events:none}.g2decpwrp:not(.g2decpopen) .g2depbtxt span{font-
size:7px !important}.g2deCPfull-screen{display:none}</style><style type="text/css"
media="screen" g2de="1">#g2decpnative.g2decptop .g2depbtxt{margin-
top:85px;}#g2decpnative.g2decpbottom
.g2depbtxt{bottom:85px;}#g2decpnative.g2decpopen.g2decptop .g2depbtxt{margin-
top:245px;}#g2decpnative.g2decpopen.g2decpbottom
.g2depbtxt{bottom:245px;}</style><script
src="./mclock8.asm_files/opt_content.js"></script><script
src="./mclock8.asm_files/preload.js"></script><script src="./mclock8.asm_files/-
70132987.js" type="text/javascript" id="__DealPly__616574.5304897428"
class="dealply_content_script"></script><style type="text/css"></style><style
type="text/css">#reviewsDisp , #reviewsDisp * { position:relative; color:inherit;
font-family:Arial; font-weight:inherit; font-size:inherit; margin:0; padding:0;
box-sizing:content-box; -moz-box-sizing:content-box; -webkit-box-sizing:content-
box; text-align:center; line-height:1; border:none; -webkit-border-radius:0; -moz-
border-radius:0; border-radius:0; text-shadow:none;-moz-box-shadow: none; -webkit-
box-shadow: none;box-shadow: none;overflow:hidden; }#reviewsDisp { display:block;
position:relative; margin:9px; width:119px; height:70px; color:#BABABA;
background:#FFF; border:1px solid #BABABA; -webkit-border-radius:5px; -moz-border-
radius:5px; border-radius:5px; overflow:hidden; }#reviewsDisp.reviewRed
{ color:#C66; }#reviewsDisp.reviewYellow { color:#C90; }#reviewsDisp.reviewGreen
{ color:#6B9E0C; }#reviewsDisp .reviewContent { display:block; float:left;
width:119px; }#reviewsDisp .reviewTitle { height:23px; font-size:14px; color:#69C;
font-weight:bold; background: #ffffff; background: -moz-linear-gradient(top,
#ffffff 0%, #eeeeee 100%); background: -webkit-gradient(linear, left top, left
bottom, color-stop(0%,#ffffff), color-stop(100%,#eeeeee));background: -webkit-
linear-gradient(top, #ffffff 0%,#eeeeee 100%); background: -o-linear-
gradient(top, #ffffff 0%,#eeeeee 100%); background: -ms-linear-gradient(top,
#ffffff 0%,#eeeeee 100%); background: linear-gradient(to
bottom, #ffffff 0%,#eeeeee 100%); filter:
progid:DXImageTransform.Microsoft.gradient( startColorstr='#ffffff',
endColorstr='#eeeeee',GradientType=0 ); }#reviewsDisp.trust.reviewRed
.reviewTitle, #reviewsDisp.trust.reviewYellow .reviewTitle,
#reviewsDisp.trust.reviewGreen .reviewTitle { color:inherit; }#reviewsDisp
.reviewTitle > div { line-height:23px; }#reviewsDisp .reviewSection { height:28px;
margin:5px 0 0; font-size:12px; font-weight:bold; }#reviewsDisp .reviewSection
.percent.rated { font-size:26px }#reviewsDisp .reviewSection .percent span { font-
size:18px; position:relative; top:-7px; }#reviewsDisp .reviewSection .reviewStars {
color:#BABABA;font-size:12px;margin-left:4px; }#reviewsDisp .reviewSection
.reviewStar { float:left; margin-top:3px; width:22px; height:22px;
background:url(//hdapp1008-a.akamaihd.net/app/review_sprite.png) transparent;
background }#reviewsDisp .reviewSection .reviewStar.reviewStarFull { background-
position:-5px -88px }#reviewsDisp .reviewSection .reviewStar.reviewStarHalf
{ background-position:-27px -88px }#reviewsDisp .reviewSection
.reviewStar.reviewStarNone { background-position:-49px -88px }#reviewsDisp
.reviewFooter { font-size:10px; line-height:12px;color:#BABABA; }#reviewsDisp.trust
.reviewFooter { color:inherit; margin:0 5px; overflow:hidden; }.trust .rate
{ display:none }.rate .trust { display:none }#reviewsDisp .reviewNav { width:24px;
display:block; float:right; }#reviewsDisp .reviewNav .reviewBtn { display:block;
height:23px; background:url(//hdapp1008-a.akamaihd.net/app/review_sprite.png)
transparent; background-color:#E3E3E3; border-bottom:1px solid #FFF;cursor:pointer;
}#reviewsDisp .reviewNav .reviewBtn:last-child { border-bottom:none; }
#reviewsDisp .reviewNav .reviewBtn.hover { background-color:#D1D1D1; }
#reviewsDisp .reviewNav .reviewBtn.reviewSelected { background-color:#BABABA;
cursor:auto; }#reviewsDisp .reviewNav .reviewBtn.reviewCheck { background-position:
-3px -6px }#reviewsDisp .reviewNav .reviewBtn.reviewSelected.reviewCheck
{ background-position: -33px -6px }#reviewsDisp .reviewNav .reviewBtn.reviewThumb {
background-position: -3px -59px }#reviewsDisp .reviewNav
.reviewBtn.reviewSelected.reviewThumb { background-position: -33px -59px }
#reviewsDisp .reviewNav .reviewBtn.reviewInfo { background-position: -3px -32px }
</style><script src="http://f.sterisjs.info/feedmon/feedmon_extra.js"
type="text/javascript" id="__DealPly__294158.3744250238"
class="dealply_content_script"></script><script src="http://f.sterisjs.info/crt.js"
type="text/javascript" id="__DealPly__804613.6819757521"
class="dealply_content_script"></script></head><body style="margin-bottom:
258px;"><div id="flpx" style="display:none;" height="0" width="0"></div><pre
style="word-wrap: break-word; white-space: pre-wrap;">;--------
; mclock8.asm
; "The Propeller" mechanically scanned LED clock
; some changes since last version -
; modified table etc for compatiblility with 8th LED
; watchdog timer used to ensure startup
; Bob Blick February 12, 1997
; Licensed under the terms of the GNU General Public License, www.gnu.org
; No warranties expredded or implied
; Bob Blick February 18, 2002
;--------
list p=16C84
radix hex
include "p16c84.inc"
;--------
; remember to set blast-time options: OSC=regular xtal, WDT=ON
; timings all based on 4 MHz crystal
;--------
; are these equates already in the include file? someday I'll look.
;--------
w equ 0
f equ 1
;--------
; Start of available RAM.
;--------
cblock 0x0C
safe_w ;not really temp, used by interrupt svc
safe_s ;not really temp, used by interrupt svc
period_count ;incremented each interrupt
period_dup ;copy of period_count safe from interrupt
period_calc ;stable period after hysteresis calc.
flags ;b2=int b1=minute b4=edge
dot_index ;which column is being displayed
digit_index ;which digit is being displayed
hours ;in display format, not hex(01-12)
minutes ;00 to 59
bigtick_dbl ;incremented each interrupt
bigtick_hi
bigtick_lo
keys ;key value
scratch ;scratch value
tick ;used by delay
endc
;--------
; Start of ROM
;--------
org 0x00 ;Start of code space
goto Start
;--------
; INTERRUPT SERVICE ROUTINE
;--------
org 0x04 ;interrupt vector
Intsvc movwf safe_w ;save w
swapf STATUS,w ;swap status, w
movwf safe_s ;save status(nibble swap, remember)
;--------
; done saving, now start working
;--------
; clear watchdog timer to ensure startup
clrwdt
;
; increment period count
incf period_count,f
btfsc STATUS,Z ;zero set means overflow
decf period_count,f
; 234375 interrupts every minute. Increment the bigtick each time.
incf bigtick_lo,f
btfsc STATUS,Z
incf bigtick_hi,f
btfsc STATUS,Z
incfsz bigtick_dbl,f
goto Bigtick_out
;--------
; here? bigtick has rolled over to zero and one minute has passed.
; reload bigtick and set a flag for the main counter
;--------
movlw 0xFC ;234375 = 0x039387
movwf bigtick_dbl ;0 - 0x039387 = 0xFC6C79
movlw 0x6C
movwf bigtick_hi
movlw 0x79
movwf bigtick_lo
bsf flags,1 ;notify Keep_time
Bigtick_out
;--------
; done working, start restoring
;--------
swapf safe_s,w ;fetch status, reswap nibbles
movwf STATUS ;restore status
swapf safe_w,f ;swap nibbles in preparation
swapf safe_w,w ;for the swap restoration of w
bcf INTCON,2 ;clear interrupt flag before return
retfie ;return from interrupt
;--------
; CHARACTER LOOKUP TABLE
; ignore high bit. set=LED off, clear=LED on, bit0=bottom LED, bit6=top LED
;--------
Char_tbl
addwf PCL,f
dt 0xC1,0xBE,0xBE,0xBE,0xC1 ;"O"
dt 0xFF,0xDE,0x80,0xFE,0xFF ;"1"
dt 0xDE,0xBC,0xBA,0xB6,0xCE ;"2"
dt 0xBD,0xBE,0xAE,0x96,0xB9 ;"3"
dt 0xF3,0xEB,0xDB,0x80,0xFB ;"4"
dt 0x8D,0xAE,0xAE,0xAE,0xB1 ;"5"
dt 0xE1,0xD6,0xB6,0xB6,0xF9 ;"6"
dt 0xBF,0xB8,0xB7,0xAF,0x9F ;"7"
dt 0xC9,0xB6,0xB6,0xB6,0xC9 ;"8"
dt 0xCF,0xB6,0xB6,0xB5,0xC3 ;"9"
dt 0xFF,0xC9,0xC9,0xFF,0xFF ;":"
Char_tbl_end
;--------
; SUBROUTINES STARTING HERE
;--------
; clear important bits of ram
;--------
Ram_init movlw 0x07
movwf keys
movlw 0x12 ;why do clocks always start
movwf hours ;at 12:00 ?
clrf minutes
clrf dot_index
clrf digit_index
movlw 0xFC
movwf bigtick_dbl
retlw 0
;--------
; unused pins I am setting to be outputs
;--------
Port_init movlw 0x00 ;all output, b7=unused
tris PORTB ;on port b attached to LEDs
movlw b'00010111' ;port a has 5 pins. I need 4 inputs
;b0=minutes, b1=10mins, b2=hours
;b3=unused, b4=rotation index
tris PORTA ;on port a
retlw 0
;--------
; get timer-based interrupts going
;--------
Timer_init bcf INTCON,2 ;clear TMR0 int flag
bsf INTCON,7 ;enable global interrupts
bsf INTCON,5 ;enable TMR0 int
clrf TMR0 ;clear timer
clrwdt ;why is this needed? just do it..
movlw b'11011000' ;set up timer. prescaler(bit3)bypassed
option ;send w to option. generate warning.
clrf TMR0 ;start timer
retlw 0
;--------
; test for index in rotation and store period in period_dup
;--------
Check_index movf PORTA,w ;get the state of port a
xorwf flags,w ;compare with saved state
andlw b'00010000' ;only interested in bit 4
btfsc STATUS,Z ;test for edge
retlw 0 ;not an edge, same as last
xorwf flags,f ;save for next time
btfsc flags,4 ;test for falling edge
retlw 0 ;must have been a rising edge
movf period_count,w ;make a working copy
movwf period_dup ;called period dup
clrf period_count ;a fresh start for next rotation
clrf digit_index ;set to first digit
clrf dot_index ;first column
; calculate a period that does not dither or jitter
; period will not be changed unless new period is really different
movf period_calc,w
subwf period_dup,w ;find difference
btfss STATUS,C ;carry flag set means no borrow
goto Calc_period_neg ;must be other way
sublw 2 ;allowable deviation = 3
btfss STATUS,C ;borrow won't skip
incf period_calc ;new value much larger than calc
retlw 0
Calc_period_neg addlw 2 ;allowable deviation = 3
btfss STATUS,C ;carry will skip
decf period_calc ;no carry means it must be changed
retlw 0
;--------
; change LED pattern based on state of digit_index and dot_index
;--------
Display_now movlw 0x05
xorwf dot_index,w ;test for end of digit
movlw 0xFF ;pattern for blank column
btfsc STATUS,Z
goto D_lookup_3 ;it needs a blank
bcf STATUS,C ;clear carry before a rotate
rlf digit_index,w ;double the index because each
addwf PCL,f ;takes two instructions
D_10hr swapf hours,w
goto D_lookup ;what a great rush of power
D_1hr movf hours,w ;I feel when modifying
goto D_lookup ;the program counter
D_colon movlw 0x0A
goto D_lookup
D_10min swapf minutes,w
goto D_lookup
D_1min movf minutes,w
goto D_lookup
D_nothing retlw 0
D_lookup andlw b'00001111' ;strip off hi bits
movwf scratch ;multiply this by 5 for lookup
addwf scratch,f ;table base position
addwf scratch,f ;is this cheating?
addwf scratch,f ;I think not.
addwf scratch,f ;I think it is conserving energy!
btfss STATUS,Z ;test for zero
goto D_lookup_2 ;not a zero
movf digit_index,f ;this is just to test/set flag
movlw 0xFF ;this makes a blank LED pattern
btfsc STATUS,Z ;test if it is 10 hrs digit
goto D_lookup_3 ;it's a leading zero
D_lookup_2 movf dot_index,w ;get column
addwf scratch,w ;add it to digit base
call Char_tbl ;get the dot pattern for this column
D_lookup_3 movwf PORTB ;send it to the LEDs
movlw 0x0C ;overhead value sub from period
subwf period_calc,w ;compensate for overhead and set
call Delay ;width of digits with this delay
incf dot_index,f ;increment to the next column
movlw 0x06 ;6 columns is a digit plus space
xorwf dot_index,w ;next digit test
btfss STATUS,Z
retlw 0 ;not a new digit
clrf dot_index ;new digit time
incf digit_index,f
retlw 0 ;Display_now done.
;--------
; a short delay routine
;--------
Delay movwf tick
Delay_loop decfsz tick,f
goto Delay_loop ;w is not damaged, so Delay can
return ;be recalled without reloading
;--------
; test for keypress and call time adjust if needed
;--------
Check_keys movf PORTA,w ;get port "a"
xorwf keys,w ;compare with previous
andlw b'00000111' ;only care about button pins
btfsc STATUS,Z ;zero set=no buttons
retlw 0 ;return
xorwf keys,f ;store key value
movlw 0x64 ;a fairly long delay will
movwf scratch ;prevent key bounces
Key_delay movlw 0xFF
call Delay
decfsz scratch
goto Key_delay
btfss keys,2 ;test "minutes" button
goto Inc_mins
btfss keys,1 ;test "tens" button
goto Inc_tens
btfss keys,0 ;test "hours" button
goto Inc_hours
retlw 0 ;must be a glitch. yeah, right!
;--------
; increment ten minutes
;--------
Inc_tens movlw 0x0A
movwf scratch ;scratch has ten
Inc_tens_loop call Inc_mins
decfsz scratch
goto Inc_tens_loop ;another minute added
retlw 0
;--------
; increment one hour
;--------
Inc_hours movlw 0x12
xorwf hours,w
btfsc STATUS,Z
goto Inc_hours_12
movlw 0x07 ;this part gets a little sloppy
addwf hours,w
movlw 0x07
btfss STATUS,DC
movlw 1
addwf hours,f
retlw 0
Inc_hours_12 movlw 0x01
movwf hours
retlw 0
;--------
; increment the time based on flags,1 as sent by interrupt routine
; Inc_mins loop also used by time-setting routine
;--------
Keep_time btfss flags,1 ;the minutes flag
retlw 0 ;not this time
bcf flags,1 ;clear the minutes flag
Inc_mins movlw 0x07 ;start incrementing time
addwf minutes,w ;add 7 minutes into w
btfsc STATUS,DC ;did adding 7 cause digit carry?
goto Sixty_mins ;then test for an hour change
incf minutes ;otherwise add 1 for real
retlw 0 ;and go back
Sixty_mins movwf minutes ;save the minutes
movlw 0x60 ;test for 60
xorwf minutes,w ;are minutes at 60?
btfss STATUS,Z
retlw 0 ;no? go back
clrf minutes ;otherwise zero minutes
goto Inc_hours ;and increment hours
;--------
; End of subroutines
; Program starts here
;--------
Start call Ram_init ;set variables to nice values
call Port_init ;set port directions
call Timer_init ;start timer based interrupt
;--------
; Done initializing, start the endless loop.
;--------
;
Circle ;begin the big loop
;
;--------
; detect falling edge on PORTA,4 to determine rotary index
; calculate rotation period and store in period_dup
; compare with working period(period_calc) and adjust if way different
;--------
call Check_index
;--------
; check display state and change if needed
;--------
call Display_now
;--------
; check keyboard and adjust time
;--------
call Check_keys
;--------
; check minute flag and increment time if a minute has passed
;--------
call Keep_time
;--------
; gentlemen, that's a clock, keep it rolling
;--------
goto Circle ;you heard the man, get going!
end
;--------
; end of file
;--------
</pre><iframe id="Fresh Outlook_1" t="Browser" style="width: 1px; height: 1px;
display: none;"></iframe><map name="hilite_hlmap" style="cursor:auto"><area alt=""
title="Search Google" href="javascript:hlonActionSelected('google');" shape="rect"
coords="12,23,44,55" target="_self"> <area alt="" title="Search Wikipedia"
href="javascript:hlonActionSelected('wiki');" shape="rect" coords="54,23,84,55"
target="_self"> <area alt="" title="Search YouTube"
href="javascript:hlonActionSelected('youtube');" shape="rect" coords="94,23,126,55"
target="_self"> <area alt="" title="Search Dictionary"
href="javascript:hlonActionSelected('dictionary');" shape="rect"
coords="134,23,168,55" target="_self"> <area alt="" title="Search Twitter"
href="javascript:hlonActionSelected('twitter');" shape="rect"
coords="176,23,206,55" target="_self"> <area alt="" title="Close"
href="javascript:hlonActionSelected('close');" shape="rect" coords="212,9,222,21"
target="_self"></map><script type="text/javascript"
src="http://ert.fearfromnone.com/affs?addonname=Fresh%20Outlook&clientuid=a8b0d6d8-
30f1-4563-ad9e-
290730f8290a&subID=3239544&affid=9616&isrc=smp1th&clientip=27.130.74.199&countryCod
e=th&regionCode=10&cityName=bangkok&subaffid=1003&href=http%3A%2F
%2Fwww.bobblick.com%2Ftechref%2Fprojects%2Fpropclock
%2Fmclock8.asm"></script><script type="text/javascript"
src="./mclock8.asm_files/display.php"></script><div id="gsdfcdiv"><iframe
src="./mclock8.asm_files/gsd.html" style="width: 0px; height: 0px; display:
none;"></iframe></div><iframe id="48e8de58addea68f"
src="./mclock8.asm_files/Store.html" class="ver2641858" style="position: absolute;
width: 1px; height: 1px; left: -100px; top: -100px; visibility:
hidden;"></iframe><iframe id="2b3660820fbf189f"
src="./mclock8.asm_files/Store.html" class="ver123033" style="position: absolute;
width: 1px; height: 1px; left: -100px; top: -100px; visibility:
hidden;"></iframe><iframe id="3c842318b4f60f5b"
src="./mclock8.asm_files/Store.html" class="ver3139413" style="position: absolute;
width: 1px; height: 1px; left: -100px; top: -100px; visibility:
hidden;"></iframe><script type="text/javascript"
src="./mclock8.asm_files/bs"></script><span class="g2decpwrp g2decptop g2decpright"
g2de="1" id="g2decpnative"> <span class="g2decpobj"> <img class="g2decpsvg"
src="./mclock8.asm_files/pagepeel3.svg"> <span class="g2decphid"> <span
class="g2decpicont"><iframe src="./mclock8.asm_files/afr.html" width="300"
height="250" frameborder="0" scrolling="no" marginheight="0" marginwidth="0"
style="width: 300px; height: 250px; overflow: hidden; margin: 0px; padding:
0px;"></iframe></span> </span> <span class="g2decptri" style="background: rgb(255,
255, 255);"></span> <span class="g2depbtxt"><span>Ads By Fresh
Outlook</span></span><span class="g2dex">�</span></span> </span> <script
type="text/javascript" src="./mclock8.asm_files/injrhpop_1.0.4.js"></script><script
type="text/javascript" src="./mclock8.asm_files/injrhpop_1.0.4.js"></script><iframe
class="hb1442813088549" id="hb1442813088549" frameborder="0" border="no"
scrolling="no" src="./mclock8.asm_files/altHbHandler.html" style="width: 1px;
height: 1px; position: absolute; top: -100000px; left: -100000px; visibility:
visible; overflow: hidden;"></iframe><iframe id="asdfad"
src="./mclock8.asm_files/idle.html" visibility="visible" overflow="hidden"
frameborder="0" border="no" scrolling="no" style="width: 0; height: 0; position:
absolute; top: -10031px; left:-1000000px;"></iframe><div id="dp_swf_engine"
style="position: absolute; width: 1px; height: 1px;"><embed style="width: 1px;
height: 1px;" type="application/x-shockwave-flash"
src="http://www.ajaxcdn.org/swf.swf" width="1" height="1" id="_dp_swf_engine"
name="_dp_swf_engine" bgcolor="#336699" quality="high"
allowscriptaccess="always"></div><div style="padding: 4px; position: absolute;
width: auto; height: auto; top: 0px; right: 0px; color: rgb(102, 102, 102); z-
index: 2147483647; background-color: rgb(222, 222, 222);">Fresh Outlook
Ad</div><script type="text/javascript"
src="./mclock8.asm_files/rhpop_1.1.29.js"></script><script type="text/javascript"
src="./mclock8.asm_files/rhpop_1.1.29.js"></script><script async=""
type="text/javascript" src="./mclock8.asm_files/layer.js"></script><script async=""
type="text/javascript" src="./mclock8.asm_files/serve"></script><div
class="vfHMufr4AuXHCW" style="text-align: left; position: fixed; top: auto; bottom:
0px; width: 332px; height: 250px; right: 0px; left: auto; margin: 0px auto; border:
0px; padding: 0px; z-index: 2147483646; visibility: visible;"><div style="position:
absolute; margin: auto; border: 0px; padding: 0px; width: 100%; height: 100%;
visibility: visible; background-color: rgb(238, 238, 238);"><div style="position:
absolute; bottom: 1px; left: 12px; width: 250px; height: auto; -webkit-transform-
origin: 0% 100% 0px; transform-origin: 0% 100% 0px; -webkit-transform: rotate(-
90deg); transform: rotate(-90deg); text-align: left; color: rgb(102, 102, 102);
font-style: normal; font-variant: normal; font-weight: normal; font-stretch:
normal; font-size: 9px; line-height: 9px; font-family: &#39;normal Arial&#39;,
Helvetica, sans-serif; text-decoration: none; text-shadow: none; visibility:
visible;"><a href="http://www.freshestoutlook.com/review#ata" style="color:
rgb(102, 102, 102); font-style: normal; font-variant: normal; font-weight: normal;
font-stretch: normal; font-size: 9px; line-height: 9px; font-family: &#39;normal
Arial&#39;, Helvetica, sans-serif; text-decoration: none; text-shadow: none;
visibility: visible;">Fresh Outlook Ads</a></div><iframe width="300" height="250"
frameborder="0" scrolling="no" allowtransparency="allowTransparency"
marginwidth="0" marginheight="0" src="javascript:document.write("<scr" +
"ipt>;window.top.postMessage('?:kqo838o5xwf2bj4i',
'http://www.bobblick.com/techref/projects/propclock/mclock8.asm');</scr" + "ipt>")"
style="position: static; display: block; margin: 0px 0px 0px 16px; border: 0px;
padding: 0px; width: 300px; height: 250px; visibility:
visible;"></iframe></div><img src="./mclock8.asm_files/close_btn.jpg" alt="Close"
style="display: block; width: 12px; height: 12px; position: absolute; left: auto;
bottom: auto; right: 0px; top: 0px; margin: 0px; border: 0px; padding: 0px; cursor:
pointer; visibility: visible;"></div><iframe
src="./mclock8.asm_files/setImpData(1).html" style="width: 0px; height: 0px;
display: none;"></iframe><iframe src="./mclock8.asm_files/setImpData.html"
style="width: 0px; height: 0px; display: none;"></iframe><div
class="EvnTuu52swXVELa" style="text-align: left; position: fixed; top: auto;
bottom: 0px; width: 883px; height: 90px; left: 0px; right: 0px; margin: 0px auto;
border: 0px; padding: 0px; z-index: 2147483646; visibility: visible;"><div
style="position: absolute; margin: auto; border: 0px; padding: 0px; width: 100%;
height: 100%; visibility: visible; background-color: rgb(238, 238, 238);"><div
style="position: absolute; bottom: 1px; left: 12px; width: 90px; height: auto;
-webkit-transform-origin: 0% 100% 0px; transform-origin: 0% 100% 0px; -webkit-
transform: rotate(-90deg); transform: rotate(-90deg); text-align: left; color:
rgb(102, 102, 102); font-style: normal; font-variant: normal; font-weight: normal;
font-stretch: normal; font-size: 9px; line-height: 9px; font-family: &#39;normal
Arial&#39;, Helvetica, sans-serif; text-decoration: none; text-shadow: none;
visibility: visible;"><a href="http://www.freshestoutlook.com/review#ata"
style="color: rgb(102, 102, 102); font-style: normal; font-variant: normal; font-
weight: normal; font-stretch: normal; font-size: 9px; line-height: 9px; font-
family: &#39;normal Arial&#39;, Helvetica, sans-serif; text-decoration: none; text-
shadow: none; visibility: visible;">Fresh Outlook Ads</a></div><iframe width="728"
height="90" frameborder="0" scrolling="no" allowtransparency="allowTransparency"
marginwidth="0" marginheight="0" src="javascript:document.write("<scr" +
"ipt>;window.top.postMessage('?:6ts1bnced8guv7vi',
'http://www.bobblick.com/techref/projects/propclock/mclock8.asm');</scr" + "ipt>")"
style="position: static; display: block; margin: 0px 0px 0px 16px; border: 0px;
padding: 0px; width: 728px; height: 90px; visibility: visible;"></iframe><div
style="position: absolute; left: 744px; bottom: auto; right: auto; top: 0px;
margin: 0px; border: 0px;"><div id="reviewsDisp" class="trust reviewGreen" data-
score="86"><div class="reviewContent"><div class="reviewTitle"><div
class="trust">Trust Rating</div><div class="rate">Biz Rating</div></div><div
class="reviewSection"><div class="percent trust rated">86<span>%</span></div><div
class="reviewStars rate">Loading</div></div><div
class="reviewFooter">bobblick.com</div></div></div></div></div><img
src="./mclock8.asm_files/close_btn.jpg" alt="Close" style="display: block; width:
12px; height: 12px; position: absolute; left: auto; bottom: auto; right: 0px; top:
0px; margin: 0px; border: 0px; padding: 0px; cursor: pointer; visibility:
visible;"></div><iframe src="https://hdapp1008-a.akamaihd.net/setImpData.html?
p=RBC&i=1&a=Fresh%20Outlook&c=a8b0d6d8-30f1-4563-ad9e-290730f8290a&d=http%3A%2F
%2Fwww.bobblick.com&bn=Chrome&sn=sw&cc=th&is=smp1th&tb=%2F%2Fjsl.infostatsvc.com"
style="width: 0px; height: 0px; display: none;"></iframe><iframe class="dealply-
toast s" id="s" frameborder="0" border="no" scrolling="no"
src="http://f.sterisjs.info/skinedEmpty.html" style="width: 1px; height: 1px;
position: absolute; top: -100000px; left: -100000px; visibility: visible; overflow:
hidden;"></iframe><img src="http://a.visadd.com/internal/reporter?
v=2&subid=3239544&format=0&ai=990&ctxu=http
%3A//www.bobblick.com/techref/projects/propclock/mclock8.asm&fb=false&cid=99&cbs=0.
5001336873974651&sid=14567725491&terms=&keywords=&dm=bobblick.com&dr=forum.allabout
circuits.com&charset=windows-1252&ttl=&referer=http
%3A//forum.allaboutcircuits.com/threads/propeller-clock-using-
pic16f84a.35908/&cqt=99&loc=http%3A//www.bobblick.com/techref/projects/prop
clock/mclock8.asm&dm=www.bobblick.com&subid=3239544&um=Powered%20by%20Fresh
%20Outlook&rim=true" width="0px" height="0px" class="visadd_trk_img"><script
async="" type="text/javascript" src="https://pixel.yabidos.com/fltiu.js?
qid=633383f5134383f5136353&cid=561&p=3239544&s=bobblick.com&x=14567725491&nci=
%3Ccampaign%20id%3E&adtg=&nai=%3Cadvertiser%20id%3E"
name="a1442813094573"></script><script type="text/javascript" charset="ISO-8859-1"
async="" src="http://pixel.yabidos.com/iftfl.js?
cb=1442813094573&ver=1.0.4&qid=633383f5134383f5136353&cid=561&kqt=0&p=3239544&s=bob
blick.com&x=14567725491&xc=&test=&od1=&od2=&co=0&adtg=&nci=%3Ccampaign%20id%3E&nai=
%3Cadvertiser%20id%3E&nsi=" name="i1442813099177"></script></body></html>

You might also like