| The Datasheet Archive - 100 Million Datasheets from 7500 Manufacturers. |
Low-Power Real-Time Clock selected units values displayed. Upon r
Top Searches for this datasheetAN582 Low-Power Real-Time Clock selected units values displayed. Upon release, Timer counts second begins flashing selected units. CLR_MIN (S3) clears minutes seconds. CLR_MIN useful exactly setting time "top hour" announced radio broadcasts. After SELECT_UNITS keys depressed, user seconds depress next key. keypress detected within seconds, unit returns clock mode. simplify design time minimize cost, standard Hitachi display module used. Most applications that require LCDs custom display. interface software would need modified suit specific display driver being used. Figure block diagram design. RA2:RA0 pins control signals display, RB3:RB0 acts 4-bit data bus, RB7:RB5 input switches. OSC1 connected network, which generates approximate device frequency. Because Timer1 operates asynchronously device, device's oscillator configured mode. oscillator mode least expensive quickest start-up time. Timer1 where accurate frequency required. Timer1's crystal connected T1OSI T1OSO pins. good choice crystal 32.786 (watch) crystal. Table list components their part numbers. Mark Palmer Microchip Technology Inc. INTRODUCTION This application note uses Timer1 module, from mid-range PIC16CXXX microcontroller, control low-power real-time clock. Timer1 chosen because crystal which allows module operate during sleep. events that will wake device from sleep (for this application) keypress Timer1 overflow. OPERATION Upon power-up, device initialized with display starting 12:00 Timer1 configured generate interrupt (every second). Timer1 overflow interrupt wakes device from sleep. This causes time registers (HRS, MIN, SECS) updated. SECS register contains even value (SECS<0> colon (":") displayed. This gives visual indication each second. Then device returns sleep. There three keys setting clock. SELECT_UNITS (S1) selects which units modified (hours, minutes, off). selected units blanked second then flashed second. (S2) increments selected units. While incrementing, FIGURE CLOCK BLOCK DIAGRA PIC16CXXX 3x100 MCLR T1OSO T1OSI OSC1 OSC2 Module 1997 Microchip Technology Inc. DS00582B-page AN582 Relative most microelectronics, LCD's slow devices. good portion time spent Interrupt Service Routine, talking updating module. minimize power consumption, device should SLEEP mode much possible. using conditional assembly, flag (called Debug) true, total time spent subroutine seen PORTD<0> (the high time). Measuring this time oscilloscope displayed typical time that device awake. This operation second time that device needs service interrupt Timer1 overflow). accuracy real-time clock using Timer1 depends accuracy crystal being used. more accurate crystal, higher cost. always there cost performance trade-off made. crystal rated with accuracy (parts million), could cause error about seconds day. many applications, this should adequate (said from someone doesn't wear watch). program written this application note shows method real-time clock. Trade-offs between code size, current consumption desired operation have been made. Some possible alternative implementations are: When displaying time, update only characters that changed. Turn display during sleep module data interface 8-bits, as-opposed-to 4-bit interface. Alternative reduce time awake keeping track which characters need updated. majority time will only position which contains either Next would ones place minutes, then tens place minutes, etc. display would only need completely updated times every hours. This would reduce amount time talking with display cost some program data memory. Depending requirements application characteristics display, Alternative could implemented turning power given rate) display. This technique lead lower system current consumption. Evaluation desired display display driver recommended. Alternative uses module 8-bit mode, which will reduce size display routines (save about words program memory) cost four additional lines. some applications this good trade-off additional program memory space. percentage operating time saved slight should give substantial power savings. TABLE LIST COMPONENTS Description Part Number LM032L EVQPADO4M PIC16C64 NC26 NC38 ECS-40-20-1 Manufacturer Hitachi Panasonic Microchip Quantity Module Characters) Switches Microcontroller 32.768 Crystal Crystal Most components available from DigiKey. DS00582B-page 1997 Microchip Technology Inc. AN582 CONCLUSION Timer1 module allows many applications include real-time clock minimal system cost. This time function useful consumer applications (display time) well industrial applications (data time stamp). accuracy time strictly dependent accuracy crystal. Table shows program resource requirements. TABLE PROGRAM RESOURCE REQUIREMENTS Resource Initialization Words Bytes Increment Time Input Cycles Display Display Time 526(1) N.A. N.A. Program Memory Clock Operation Display(2) Data Memory Variables Scratch Dependent Module (re; BUSY_CHECK subroutine). Assumes worst case (WC) numbers best case response from module. 1997 Microchip Technology Inc. DS00582B-page DS00582B-page 1997 Microchip Technology Inc. AN582 Please check Microchip latest version source code. Microchip's Worldwide Address: www.microchip.com; Bulletin Board Support: MCHIPBBS using CompuServe® (CompuServe membership required). APPENDIX SOURCE CODE LISTING (CLOCK_01.LST) MPASM 01.40 Released CLOCK.ASM 1-16-1997 17:05:59 PAGE OBJECT CODE VALUE LINE SOURCE TEXT 00000000 00000001 00001 00002 00003 00004 00005 00006 00007 00008 00009 00010 00011 00012 00013 00014 00015 00016 00017 00018 00019 00020 00021 00022 00023 00024 00025 00026 00027 00028 00029 00001 00002 00318 00030 00031 00032 LIST 16C74, ERRORLEVEL -302 This program implements real time clock using TMR1 module PIC16CXXX family. display module used display (update) time every second. Three keys used time. Program CLOCK.ASM Revision Date: 5-15-94 1-15-97 Compatibility with MPASMWIN 1.40 HARDWARE SETUP Control Lines (Enable) (Read/Write) (Register Select) Data Lines RB<3:0> Switch Inputs Select Hour Minute Increment Hour Minute Reset Minutes INCLUDE <p16c74.inc> LIST P16C74.INC Standard Header File, Version 1.00 Microchip Technology, Inc. LIST FALSE TRUE 1997 Microchip Technology Inc. DS00582B-page 00000006 00000086 00000005 00000000 00000000 00000001 0000 0000 0001 0002 0003 1683 188E 290C 295E 0004 0004 0004 0005 0006 0007 0008 0009 0009 000A 000B 000C 000D 000E 000F 0010 1283 180C 2843 1C0B 28D0 0806 39E0 00B5 3002 08B3 01B4 0BB4 280F 00033 00034 00076 00035 00036 00037 00038 00039 00040 00041 00042 00043 00044 00045 00046 00047 00048 00049 00050 00051 00052 00053 00054 00055 00056 00058 00059 00060 00061 00062 00063 00064 00065 00066 00067 00068 00069 00070 00071 00072 00073 00074 00075 00076 00077 00078 00079 INCLUDE <CLOCK.h> list LCD_DATA PORTB data lower 4-bits LCD_DATA_TRIS TRISB TRIS register data LCD_CNTL PORTA Three control lines PICMaster FALSE Debugging Flag Debug FALSE Debugging Flag Debug_PU TRUE Debugging Flag Reset address. Determine type RESET RESET_V RESET vector location RESET STATUS, Bank BTFSC PCON, NOT_POR Power-up reset? GOTO START GOTO OTHER_RESET MCLR reset This Periperal Interrupt routine. Need determine type interrupt that occurred. following interrupts enabled: PORTB Change (RBIF) TMR1 Overflow Interrupt (T1IF) page ISR_V Interrupt vector location PER_INT_V Debug PORTD, high, measure total endif time Service Routine STATUS, Bank BTFSC PIR1, TMR1IF Timer overflowed? GOTO T1_OVRFL YES, Service Timer1 Overflow Interrupt BTFSS INTCON, RBIF PORTB change? GOTO ERROR1 Error Condition Unknown Interrupt PORTB_FLAG PORTB's inputs active? MOVF PORTB, ANDLW 0xE0 Keep only switch values DEBOUNCE MOVWF TEMP MOVLW DB_HI_BYTE This debounce delay MOVF MSD, CLRF KB_D_LP1 DECFSZ LSD, GOTO KB_D_LP1 AN582 DS00582B-page 1997 Microchip Technology Inc. AN582 0011 0012 0013 0014 0015 0016 0BB3 280F 0806 39E0 02B5 1D03 0017 280B 0018 00B5 0019 001A 001B 001C 001D 001E 001F 0020 0021 0022 3080 008F 018E 100C 1FB5 2826 1F35 282B 1EB5 2835 0023 0023 0886 0024 100B 0025 0009 0026 0026 0027 0028 0029 002A 002B 002B 002C 002D 002E 002F 30FF 00C0 0AA0 1620 2875 01C0 1820 285C 1CA0 2823 00080 00081 00082 00083 00084 00085 00086 00087 00088 00089 00090 00091 00092 00093 00094 00095 00096 00097 00098 00099 00100 00101 00102 00103 00104 00105 00106 00107 00108 00109 00110 00111 00112 00113 00114 00115 00116 00117 00118 00119 00120 00121 00122 00123 00124 00125 00126 END_DELAY DECFSZ GOTO MOVF ANDLW SUBWF BTFSS GOTO MOVWF MOVLW MOVWF CLRF BTFSS GOTO BTFSS GOTO BTFSS GOTO MSD, KB_D_LP1 PORTB, 0xE0 TEMP, STATUS, DEBOUNCE TEMP 0x80 TMR1H TMR1L PIR1, TMR1IF TEMP, HR_MIN_SW SELECT_UNITS TEMP, INC_SW INC_UNIT TEMP, CLR_MIN_SW CLR_MIN KEY_MATCH Keep only switch values Zero set? (switches were same reads) another read YES, need which depressed. Since doing inputs, clear TMR1 overflow. Clear Timer Interrupt Flag hour-min-off switch depressed? YES, specify units selected switch depressed? YES, Increment selected Units clear minute switch depressed? YES, clear minutes. match occured, CLR_RB MOVF Debug endif RETFIE page SELECT_UNITS MOVLW MOVWF INCF GOTO INC_UNIT CLRF BTFSC GOTO BTFSS GOTO finished with PortB interrupt need clear interrupt condition. RB<7:5> keys depressed (rising edge Int.) Clear PORTB mismatch condition Clear PORTB Flag low, measure total time Service Routine Return Enable Global Interrupts PORTB, INTCON, RBIF PORTD, 0xFF WAIT_CNTR WAIT_CNTR after each SELECT UNIT press. FLAG_REG, Increment pointer MIN_UNIT:HR_UNIT FLAG_REG, KEY_INPUT DISPLAY Flash Display selected unit WAIT_CNTR FLAG_REG, HR_UNIT INC_HRS FLAG_REG, MIN_UNIT CLR_RB WAIT_CNTR cleared zero after each press. hour units selected? YES, Increment hour units minute units selected? valid key. Clear flags 1997 Microchip Technology Inc. DS00582B-page 0030 0031 0032 0033 0034 0035 0036 0037 0038 0039 003A 003B 003C 003D 003E 003F 0040 0041 0042 0AB1 303C 0231 1D03 2875 01B1 3004 00B2 3080 008F 018E 100C 01C0 1AB5 2875 10A0 1020 1220 2875 0043 0043 0044 0045 0046 0047 0048 0049 004A 004B 004C 004D 004E 100C 1E20 284F 0AC0 300A 0240 1D03 2875 01C0 1220 1020 10A0 004F 0050 0051 0052 0053 0054 0055 0056 3080 008F 0AB2 1F32 2875 3004 00B2 0AB1 00127 00128 00129 00130 00131 00132 00133 00134 00135 00136 00137 00138 00139 00140 00141 00142 00143 00144 00145 00146 00147 00148 00149 00150 00151 00152 00153 00154 00155 00156 00157 00158 00159 00160 00161 00162 00163 00164 00165 00166 00167 00168 00169 00170 00171 00172 00173 INCF MOVLW SUBWF BTFSS GOTO CLR_MIN CLRF MOVLW MOVWF MOVLW MOVWF CLRF CLRF BTFSC GOTO GOTO MIN, 0x3C MIN, STATUS, DISPLAY 0x04 SECS 0x80 TMR1H TMR1L PIR1, TMR1IF WAIT_CNTR TEMP, CLR_MIN_SW DISPLAY FLAG_REG, MIN_UNIT FLAG_REG, HR_UNIT FLAG_REG, KEY_INPUT DISPLAY YES, Increment minute units This Decimal display time YES, (use code from CLR_MIN) Clear seconds Initial Second count Clear Timer overflow Clear TMR1 overflow interrupt. WAIT_CNTR cleared zero after each press. clear minute switch depressed? Rollover from increment YES, Clear relevant flags page T1_OVRFL BTFSS GOTO INCF MOVLW SUBWF BTFSS GOTO CLRF INC_TIME PIR1, TMR1IF FLAG_REG, KEY_INPUT INC_TIME WAIT_CNTR, 0x0A WAIT_CNTR, STATUS, DISPLAY WAIT_CNTR FLAG_REG, KEY_INPUT FLAG_REG, HR_UNIT FLAG_REG, MIN_UNIT Clear Timer Interrupt Flag using inputs? Need Increment time YES, counts seconds wait expired? result Display value YES, Clear WAIT_CNTR MOVLW MOVWF INCF BTFSS GOTO MOVLW MOVWF INCF 0x80 TMR1H SECS, SECS, DISPLAY 0x04 SECS MIN, Second Overflow AN582 DS00582B-page 1997 Microchip Technology Inc. AN582 0057 0058 0059 005A 005B 005C 005D 005E 005F 0060 0061 0062 0063 0064 0065 0066 0067 0068 0069 006A 006B 006C 006D 303C 0231 1D03 2875 01B1 0AB0 300C 0230 1D03 2867 1FA0 2865 13A0 2875 17A0 2875 300D 0230 1D03 2875 01B0 0AB0 2875 006E 006E 006F 0070 0071 0072 0073 0074 300C 20E3 3001 20E3 3006 20E3 0008 0075 0075 3080 0076 20E3 0077 0078 0079 007A 007B 007C 1A20 287D 20A4 20AD 20B2 28BB 00174 00175 00176 00177 00178 00179 00180 00181 00182 00183 00184 00185 00186 00187 00188 00189 00190 00191 00192 00193 00194 00195 00196 00197 00198 00199 00200 00201 00202 00203 00204 00205 00206 00207 00208 00209 00210 00211 00212 00213 00214 00215 00216 00217 00218 00219 00220 INC_HRS MOVLW SUBWF BTFSS GOTO CLRF INCF MOVLW SUBWF BTFSS GOTO BTFSS GOTO GOTO GOTO MOVLW SUBWF BTFSS GOTO CLRF INCF GOTO 0x3C MIN, STATUS, DISPLAY HRS, 0x0C HRS, STATUS, CK_13 FLAG_REG, SET_AM FLAG_REG, DISPLAY FLAG_REG, DISPLAY 0x0D HRS, STATUS, DISPLAY HRS, DISPLAY 12:00, Toggle Need check Needs SET_A CK_13 Check page INIT_DISPLAY MOVLW CALL MOVLW CALL MOVLW CALL RETURN DISPLAY MOVLW CALL BTFSC GOTO CALL CALL CALL GOTO FLAG_REG, KEY_INPUT FLASH_UNITS LOAD_HRS LOAD_COLON LOAD_MIN LOAD_AM need flash selected units? YES, need flash selected units normal display DD_RAM_ADDR SEND_CMD DISP_ON SEND_CMD CLR_DISP SEND_CMD ENTRY_INC SEND_CMD Display Cursor Send This command Display Module Clear Display Send This command Display Module Entry Mode Inc., shift Send This command Display Module 1997 Microchip Technology Inc. DS00582B-page 007D 007D 007E 007F 0080 0080 0081 0082 0083 0084 0084 018A 0820 3903 0782 289F 2887 2893 30FC 0085 05A0 0086 289F 0087 0087 1C40 0088 0089 008A 008B 008C 008D 008D 008E 008F 0090 0091 0092 288D 3020 20D4 3020 20D4 1C40 20A4 303A 20D4 20B2 28BB 0093 0093 0094 0095 0096 20A4 303A 20D4 1C40 0097 289C 0098 3020 0099 20D4 00221 FLASH_UNITS 00222 CLRF PCLATH This clears PCLATH, This table 00223 MOVF FLAG_REG, bytes program memory 00224 ANDLW 0x03 only HR_UNIT MIN_UNIT non-zero 00225 UNIT_TBL 00226 ADDWF PCL, HR_UNIT:MIN_UNIT 00227 GOTO NO_UNITS Display everything. 00228 GOTO HR_UNITS Flash hour units 00229 GOTO MIN_UNITS Flash minute units 00230 UNIT_TBL_END 00231 MOVLW 0xFC Need clear FLAG_REG<HR_UNIT:MIN_UN 00232 ANDWF FLAG_REG, 00233 GOTO NO_UNITS Display everything. 00234 00235 (UNIT_TBL 0x0FF) (UNIT_TBL_END 0x0FF) 00236 MESSG "Warning: Table UNIT_TBL crosses page boundry computed jump" 00237 endif 00238 00239 00240 HR_UNITS 00241 BTFSS WAIT_CNTR, WAIT_CNTR odd, 00242 hour digits displayed blank 00243 GOTO SKIP_BLK_HRS 00244 MOVLW 00245 CALL SEND_CHAR 00246 MOVLW 00247 CALL SEND_CHAR 00248 SKIP_BLK_HRS 00249 BTFSS WAIT_CNTR, WAIT_CNTR even, display hour digits 00250 CALL LOAD_HRS 00251 00252 MOVLW always display other character 00253 CALL SEND_CHAR 00254 CALL LOAD_MIN 00255 GOTO LOAD_AM 00256 00257 page 00258 MIN_UNITS 00259 CALL LOAD_HRS Display hours 00260 MOVLW always 00261 CALL SEND_CHAR 00262 BTFSS WAIT_CNTR, WAIT_CNTR odd, 00263 minute digits displayed blank 00264 GOTO SKIP_BLK_MIN 00265 MOVLW 00266 CALL SEND_CHAR AN582 DS00582B-page 1997 Microchip Technology Inc. AN582 009A 009B 009C 009C 009D 009E 009F 009F 00A0 00A1 00A2 00A3 00A4 00A4 00A5 00A6 00A7 00A8 00A9 00AA 00AB 00AC 3020 20D4 1C40 20B2 28BB 20A4 303A 20D4 20B2 28BB 0830 20C7 0833 2400 20D4 0834 2400 20D4 0008 00AD 3020 00AE 1832 00AF 3E1A 00B0 20D4 00B1 0008 00B2 00B2 00B3 00B4 00B5 00B6 00B7 00B8 00B9 00BA 0831 20C7 0833 2400 20D4 0834 2400 20D4 0008 00BB 3020 00267 00268 00269 00270 00271 00272 00273 00274 00275 00276 00277 00278 00279 00280 00281 00282 00283 00284 00285 00286 00287 00288 00289 00290 00291 00292 00293 00294 00295 00296 00297 00298 00299 00300 00301 00302 00303 00304 00305 00306 00307 00308 00309 00310 00311 00312 00313 MOVLW CALL SKIP_BLK_MIN BTFSS CALL GOTO NO_UNITS CALL MOVLW CALL CALL GOTO LOAD_HRS MOVF CALL MOVF CALL CALL MOVF CALL CALL RETURN LOAD_COLON MOVLW BTFSC ADDLW CALL RETURN LOAD_MIN MOVF CALL MOVF CALL CALL MOVF CALL CALL RETURN page LOAD_AM MOVLW SEND_CHAR WAIT_CNTR, LOAD_MIN LOAD_A WAIT_CNTR even, display minute digits LOAD_HRS SEND_CHAR LOAD_MIN LOAD_A Display character HRS, BIN_2_BCD MSD, NUM_TABLE SEND_CHAR LSD, NUM_TABLE SEND_CHAR Load Wreg with value convert Load value into Wreg ASCII code Send this Character Display Load value into Wreg ASCII code Send this Character Display SECS, SEND_CHAR ASCII value Blank space EVEN second ODD, Second colon delta offset ASCII Characters Send this Character Display MIN, BIN_2_BCD MSD, NUM_TABLE SEND_CHAR LSD, NUM_TABLE SEND_CHAR Load Wreg with value convert Load value into Wreg ASCII code Send this Character Display Load value into Wreg ASCII code Send this Character Display ASCII value Blank space 1997 Microchip Technology Inc. DS00582B-page 00BC 00BD 00BE 00BF 00C0 00C1 00C2 00C3 00C4 00C5 00C6 20D4 3041 1FA0 3E0F 20D4 304D 20D4 1683 1381 1283 2823 00C7 00C8 00C9 00CA 00CB 00CC 00CD 00CE 00CF 01B3 00B4 300A 0234 1C03 3400 00B4 0AB3 28C9 00D0 1283 00D1 1407 00D2 1007 00D3 28D0 00314 00315 00316 00317 00318 00319 00320 00321 00322 00323 00324 00325 00326 00327 00328 00329 00330 00331 00332 00333 00334 00335 00336 00337 00338 00339 00340 00341 00342 00343 00344 00345 00346 00347 00348 00349 00350 00351 00352 00353 00354 00355 00356 00357 00358 00359 00360 CALL MOVLW BTFSS ADDLW CALL MOVLW CALL GOTO SEND_CHAR FLAG_REG, SEND_CHAR SEND_CHAR STATUS, OPTION_REG, NOT_RBPU STATUS, CLR_RB Send this Character Display ASCII value Blank space delta offset ASCII Characters Send this Character Display Send this Character Display Bank Turn PORTB Pull-up Bank You've displayed time, Clear RBIF BIN_2_BCD routine converts binary number, register, binary coded decimal (BCD) munber. This number stored MSD:LSD. This routine used DISPLAY subroutine, convert time values. BIN_2_BCD CLRF This value contain 10's digit value MOVWF This value contain digit value TENS_SUB MOVLW decimal SUBWF LSD, BTFSS STATUS, this subtract cause Negative Result? RETLW YES, Return from this Routine MOVWF move result into INCF MSD, Increment most significat digit GOTO TENS_SUB Should NEVER here ERROR1 STATUS, Bank Debug PORTD, PORTD, else PORTC, PORTC, endif GOTO ERROR1 page AN582 DS00582B-page 1997 Microchip Technology Inc. AN582 00D4 00D4 00D5 00D6 00D7 00D8 00D9 00DA 00DB 00DC 00DD 00DE 00DF 00E0 00E1 00E2 00B6 20F2 0E36 390F 0086 1085 1505 1405 1005 0836 390F 0086 1405 1005 0008 00E3 00E3 00E4 00E5 00E6 00E7 00E8 00E9 00EA 00EB 00EC 00ED 00EE 00EF 00F0 00F1 00B6 20F2 0E36 390F 0086 1085 1105 1405 1005 0836 390F 0086 1405 1005 0008 00361 00362 00363 00364 00365 00366 00367 00368 00369 00370 00371 00372 00373 00374 00375 00376 00377 00378 00379 00380 00381 00382 00383 00384 00385 00386 00387 00388 00389 00390 00391 00392 00393 00394 00395 00396 00397 00398 00399 00400 00401 00402 00403 00404 00405 00406 00407 SendChar Sends character This routine splits character into upper lower nibbles sends them LCD, upper nibble first. data transmitted PORT<3:0> pins SEND_CHAR MOVWF CALL SWAPF ANDLW MOVWF MOVF ANDLW MOVWF RETURN CHAR BUSY_CHECK CHAR, 0x0F LCD_DATA LCD_CNTL, LCD_CNTL, LCD_CNTL, LCD_CNTL, CHAR, 0x0F LCD_DATA LCD_CNTL, LCD_CNTL, Character sent Wait ready upper nibble Send data read data mode toggle lower nibble Send data toggle SendCmd Sends command This routine splits command into upper lower nibbles sends them LCD, upper nibble first. data transmitted PORT<3:0> pins SEND_CMD MOVWF CALL SWAPF ANDLW MOVWF MOVF ANDLW MOVWF RETURN page CHAR BUSY_CHECK CHAR, 0x0F LCD_DATA LCD_CNTL, LCD_CNTL, LCD_CNTL, LCD_CNTL, CHAR, 0x0F LCD_DATA LCD_CNTL, LCD_CNTL, Character sent Wait ready upper nibble Send data read command mode toggle lower nibble Send data toggle 1997 Microchip Technology Inc. DS00582B-page 00F2 00F2 00F3 00F4 00F5 00F6 00F7 00F8 00F9 00FA 00FB 00FC 00FD 00FE 00FF 0100 0101 0102 0103 0104 0105 0106 0107 0108 0109 010A 010B 0186 1683 1781 30FF 0086 1283 1105 1485 1405 1005 0E06 39F0 00B5 1405 1005 0806 390F 04B5 1BB5 28F2 1085 1683 30F0 0086 1283 0008 010C 010C 1283 00408 00409 00410 00411 00412 00413 00414 00415 00416 00417 00418 00419 00420 00421 00422 00423 00424 00425 00426 00427 00428 00429 00430 00431 00432 00433 00434 00435 00436 00437 00438 00439 00440 00441 00442 00443 00444 00445 00446 00447 00448 00449 00450 00451 00452 00453 00454 This routine checks busy flag, returns when busy Affects: TEMP Returned with busy/address BUSY_CHECK Debug PORTD, PORTD, endif CLRF LCD_DATA Have PORTB<3:0> output STATUS, Bank OPTION_REG, NOT_RBPU Turn PORTB Pull-up MOVLW 0xFF PortB input MOVWF LCD_DATA_TRIS STATUS, Bank LCD_CNTL, Command mode LCD_CNTL, Setup read busy flag LCD_CNTL, high LCD_CNTL, SWAPF LCD_DATA, Read upper nibble busy flag, DDRam address ANDLW 0xF0 Mask lower nibble MOVWF TEMP LCD_CNTL, Toggle lower nibble LCD_CNTL, MOVF LCD_DATA, Read lower nibble busy flag, DDRam address ANDLW 0x0F Mask upper nibble IORWF TEMP, Combine nibbles BTFSC TEMP, Check busy flag, high busy GOTO BUSY_CHECK busy, check again LCD_CNTL, STATUS, Bank MOVLW 0xF0 MOVWF LCD_DATA_TRIS inputs, output STATUS, Bank RETURN page ;***** Start program here, Power-On Reset occurred. START POWER_ON Reset (Beginning program) STATUS, Bank AN582 DS00582B-page 1997 Microchip Technology Inc. AN582 010D 010E 010F 0110 0111 0112 0113 300C 00B0 01B1 3000 00A0 3004 00B2 0114 3080 0115 008F 0116 018E 0117 0117 0118 0119 011A 011B 011C 011D 011E 011F 0183 018B 018C 1683 3000 0081 018C 30FF 009F 0120 0121 0122 0123 0124 0125 0126 0127 0128 0129 012A 012B 012C 012D 012E 012F 0130 0131 0132 0133 1283 0185 0186 0187 0188 0189 1010 1683 0185 30F0 0086 0187 1407 0188 0189 140C 1381 1283 0886 100B 00455 00456 00457 00458 00459 00460 00461 00462 00463 00464 00465 00466 00467 00468 00469 00470 00471 00472 00473 00474 00475 00476 00477 00478 00479 00480 00481 00482 00483 00484 00485 00486 00487 00488 00489 00490 00491 00492 00493 00494 00495 00496 00497 00498 00499 00500 00501 MOVLW MOVWF CLRF MOVLW MOVWF MOVLW MOVWF MOVLW MOVWF CLRF MCLR_RESET CLRF CLRF CLRF MOVLW MOVWF CLRF MOVLW MOVWF CLRF CLRF CLRF CLRF CLRF CLRF MOVLW MOVWF CLRF CLRF CLRF MOVF page 0x0C 0x00 FLAG_REG 0x04 SECS 0x80 TMR1H TMR1L Decimal HOURS light Initial value seconds (64d 60d) This allows simple test secs elapsed. TIM1H:TMR1L 0x8000 gives second overflow, KHz. STATUS INTCON PIR1 STATUS, 0x00 OPTION_REG PIE1 0xFF ADCON1 Master Clear Reset initialization (Bank Bank module does like work weak pull-ups Disable peripheral interrupts Port Digital (for 16C7x devices). STATUS, PORTA PORTB PORTC PORTD PORTE T1CON, TMR1ON Bank PORT output should output Low. Timer incrementing STATUS, Select Bank TRISA outputs 0xF0 TRISB inputs, outputs TRISC Port outputs TRISC, T1OSO needs input oscillator function TRISD Port outputs TRISE Port outputs PIE1, TMR1IE Enable TMR1 Interrupt OPTION_REG, NOT_RBPU Enable PORTB pull-ups STATUS, Select Bank PORTB, Need clear RBIF, INTCON, RBIF PORTB 1997 Microchip Technology Inc. DS00582B-page 0134 0185 0135 0135 0136 0137 0138 3002 0086 1405 1005 0139 013A 013B 013C 013D 013E 013F 013F 3006 00B3 01B4 0BB4 293C 0BB3 293C 0140 0141 0142 0143 0144 0145 0146 0147 3002 0086 1405 1005 3008 0086 1405 1005 0148 0149 014A 014B 014C 014D 014E 014F 300C 20E3 3001 20E3 3006 20E3 3080 20E3 00502 00503 00504 00505 00506 00507 00508 00509 00510 00511 00512 00513 00514 00515 00516 00517 00518 00519 00520 00521 00522 00523 00524 00525 00526 00527 00528 00529 00530 00531 00532 00533 00534 00535 00536 00537 00538 00539 00540 00541 00542 00543 00544 00545 00546 00547 00548 Initilize Display Module CLRF LCD_CNTL PORT output should output Low. DISPLAY_INIT MOVLW 0x02 Command 4-bit interface MOVWF LCD_DATA LCD_CNTL, LCD_CNTL, This routine takes calculated times that delay loop needs executed, based LCD_INIT_DELAY EQUate that includes frequency operation. uses registers before they needed store time. LCD_DELAY MOVLW LCD_INIT_DELAY MOVWF Registers Initialize CLRF LOOP2 DECFSZ LSD, Delay time 256) GOTO LOOP2 DECFSZ MSD, END_LCD_DELAY GOTO LOOP2 Command sequence lines characters CMD_SEQ MOVLW 0X02 MOVWF LCD_DATA LCD_CNTL, LCD_CNTL, MOVLW 0x08 MOVWF LCD_DATA LCD_CNTL, LCD_CNTL, Busy Flag should valid after this point MOVLW DISP_ON CALL SEND_CMD MOVLW CLR_DISP CALL SEND_CMD MOVLW ENTRY_INC CALL SEND_CMD MOVLW DD_RAM_ADDR CALL SEND_CMD AN582 DS00582B-page 1997 Microchip Technology Inc. AN582 0150 0151 0152 0153 0154 0155 018C 300E 0090 170B 158B 178B 0156 206E 0157 2075 0158 300E 0159 0090 015A 1410 015B 0063 015C 0000 015D 295B 015E 1E03 015F 28D0 0160 290C 0400 0400 00B5 00549 00550 00551 00552 00553 00554 00555 00556 00557 00558 00559 00560 00561 00562 00563 00564 00565 00566 00567 00568 00569 00570 00571 00572 00573 00574 00575 00576 00577 00578 00579 00580 00581 00582 00583 00584 00585 00586 00587 00588 00589 00590 00591 00592 00593 00594 00595 page Initialize Special Function Registers (SFR) interrupts CLRF PIR1 MOVLW 0x0E MOVWF T1CON overridden TCKO INTCON, PEIE Enable Peripheral Interrupts INTCON, RBIE Disable PORTB<7:4> Change Interrupts INTCON, Enable Interrupts CALL INIT_DISPLAY CALL DISPLAY MOVLW 0x0E MOVWF T1CON Enable Oscillator, Clock, Async, prescaler T1CON, TMR1ON Turn Timer PICMaster goto Loop waiting interrupts (for with PICMASTER) else SLEEP_LP SLEEP Wait Change PORTB interrupt. TMR1 timeout GOTO SLEEP_LP endif Here where things depending type RESET (Not Power-On Reset). OTHER_RESET BTFSS STATUS,NOT_TO Time-out? WDT_TIMEOUT GOTO ERROR1 YES, This error condition Debug_PU goto START MCLR reset, Goto START else GOTO MCLR_RESET MCLR reset, Goto MCLR_RESET endif (Debug END_START label debug endif page TABLE_ADDR NUM_TABLE MOVWF TEMP Store value TEMP register 1997 Microchip Technology Inc. DS00582B-page 0401 0402 0403 0404 0405 0406 0407 0408 0409 040A 040B 040C 040D 040E 040F 0410 0411 0412 0413 0414 0415 3004 008A 0835 390F 0782 3430 3431 3432 3433 3434 3435 3436 3437 3438 3439 3445 3445 3445 3445 3445 3445 07FF 07FF 28D0 00596 00597 00598 00599 00600 00601 00602 00603 00604 00605 00606 00607 00608 00609 00610 00611 00612 00613 00614 00615 00616 00617 00618 00619 00620 00621 00622 00623 00624 00625 00626 00627 NUM_TBL MOVLW MOVWF MOVF ANDLW ADDWF RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW HIGH (TABLE_ADDR) PCLATH TEMP, 0x0F PCL, NUM_TBL_END (NUM_TBL 0xFF00) (NUM_TBL_END 0xFF00) MESSG "Warning: Table NUM_TBL crosses page boundry computed jump" endif PMEM_END Program Memory GOTO ERROR1 here your program lost Ensure that PCLATH high correct value Value into table Mask 4-bits 0Fh) Determine Offset into table ASCII value register ASCII value register ASCII value register ASCII value register ASCII value register ASCII value register ASCII value register ASCII value register ASCII value register ASCII value register enter after error (Display ASCII value register ASCII value register ASCII value register ASCII value register ASCII value register ASCII value register MEMORY USAGE ('X' Used, Unused) 0000 0040 0080 00C0 0100 0140 0400 07C0 XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXX- XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX AN582 DS00582B-page 1997 Microchip Technology Inc. AN582 other memory blocks unused. Program Memory Words Used: Program Memory Words Free: 3720 Errors Warnings Messages reported, reported, suppressed suppressed AN582 Please check Microchip latest version source code. Microchip's Worldwide Address: www.microchip.com; Bulletin Board Support: MCHIPBBS using CompuServe® (CompuServe membership required). APPENDIX CLOCK_01.H INCLUDE FILE nolist This custom Header File real time clock application note PROGRAM: CLOCK.H Revision:5-10-94 This used ASSEMBLER recalculate certain frequency dependant variables. value Dev_Freq must changed reflect frequency that device actually operates Dev_Freq D'4000000' Device Frequency DB_HI_BYTE (HIGH Dev_Freq D'1000' LCD_INIT_DELAY (HIGH Dev_Freq D'46' D'10000' INNER_CNTR Location OUTER_CNTR Location T1OSO T1OSO T1CKI RESET_V 0x0000 Address RESET Vector ISR_V 0x0004 Address Interrupt Vector PMEM_END 0x07FF Last address Program Memory TABLE_ADDR 0x0400 Address where start Tables HR_MIN_SW switch select units INC_SW switch increment selected units CLR_MIN_SW switch clear minutes seconds FLAG_REG 0x020 Register which contains flag bits +-+-+-+-+-+-+-+-+ KEY_INPUT MIN_UNIT HR_UNIT +-+-+-+-+-+-+-+-+ 0x07 Flag specify KEY_INPUT 0x04 Flag specify doing inputs MIN_UNIT 0x01 Flags specify which units operate HR_UNIT 0x00 (HRS, MIN, none) 0x030 Holds counter value HOURS 0x031 Holds counter value MINUTES SECS 0x032 Holds counter value SECONDS 0x033 Temporary register, Holds conversion 0x034 Temporary register, Holds conversion TEMP 0x035 Temporary register CHAR 0x036 Temporary register, Holds value send module. WAIT_CNTR 0x040 Counter that holds wait time inputs Display Commands Control Signal names. Enable control line Read/Write control line Register Select control line Module commands 1997 Microchip Technology Inc. DS00582B-page AN582 DISP_ON DISP_ON_C DISP_ON_B DISP_OFF CLR_DISP ENTRY_INC ENTRY_INC_S ENTRY_DEC ENTRY_DEC_S DD_RAM_ADDR DD_RAM_UL list 0x00C 0x00E 0x00F 0x008 0x001 0x006 0x007 0x004 0x005 0x080 0x080 Display Display Cursor Display Cursor Blink cursor Display Clear Display Least Significant 7-bit address Upper Left corner Display DS00582B-page 1997 Microchip Technology Inc. AN582 Please check Microchip latest version source code. Microchip's Worldwide Address: www.microchip.com; Bulletin Board Support: MCHIPBBS using CompuServe® (CompuServe membership required). APPENDIX C74_REG.H INCLUDE FILE NOLIST File C64_reg.h Rev. History: 08-04-93 10-18-93 make Page 11-15-93 have correct pages EQUates Special Function Registers INDF TMR0 OPTION_R STATUS PORTA TRISA PORTB TRISB PORTC TRISC PORTD TRISD PORTE TRISE PCLATH INTCON PIR1 PIE1 TMR1L PCON TMR1H T1CON TMR2 T2CON SSPBUF SSPADD SSPCON SSPSTAT CCPR1L CCPR1H CCP1CON RCSTA TXSTA TXREG SPBRG RCREG CCPR2L CCPR2H CCP2CON ADRES ADCON0 ADCON1 ;************ Definitions ************ 1997 Microchip Technology Inc. DS00582B-page AN582 STATUS register (Address 03/83) INTCON register (Address 0B/8B) PEIE T0IE INTE RBIE T0IF INTF RBIF PIR1 register (Address PSPIF SSPIF CCP1IF TMR2IF TMR1IF PIE1 register (Address PSPIE SSPIE CCP1IE TMR2IE TMR1IE OPTION register (Address RBPU INTEDG T0CS T0SE PCON register (Address TRISE register (Address IBOV PSPMODE TRISE2 TRISE1 TRISE0 T1CON register (Address DS00582B-page 1997 Microchip Technology Inc. AN582 T1CKPS1 T1CKPS0 T1OSCEN T1INSYNC TMR1CS TMR1ON T2CON register (Address TOUTPS3 TOUTPS2 TOUTPS1 TOUTPS0 TMR2ON T2CKPS1 T2CKPS0 SSPCON register (Address WCOL SSPOV SSPEN SSPM3 SSPM2 SSPM1 SSPM0 SSPSTAT register (Address CCP1CON register (Address CCP1X CCP1Y CCP1M3 CCP1M2 CCP1M1 CCP1M0 RCSTA register (Address SPEN RC89 SREN CREN FERR OERR RCD8 TXSTA register (Address CSRC TX89 TXEN SYNC BRGH TRMT TXD8 1997 Microchip Technology Inc. DS00582B-page AN582 CCP2CON register (Address CCP2X CCP2Y CCP2M3 CCP2M2 CCP2M1 CCP2M0 ADCON0 register (Address ADCS1 ADCS0 CHS2 CHS1 CHS0 DONE ADON ADCON1 register (Address PCFG2 PCFG1 PCFG0 ;**** Bits destination control ;**** register destination ;**** File register destination FALSE TRUE LIST DS00582B-page 1997 Microchip Technology Inc. Note following details code protection feature PICmicro® MCUs. PICmicro family meets specifications contained Microchip Data Sheet. Microchip believes that family PICmicro microcontrollers most secure products kind market today, when used intended manner under normal conditions. There dishonest possibly illegal methods used breach code protection feature. these methods, knowledge, require using PICmicro microcontroller manner outside operating specifications contained data sheet. person doing engaged theft intellectual property. Microchip willing work with customer concerned about integrity their code. Neither Microchip other semiconductor manufacturer guarantee security their code. Code protection does mean that guaranteeing product "unbreakable". Code protection constantly evolving. Microchip committed continuously improving code protection features product. have further questions about this matter, please contact local sales office nearest you. Information contained this publication regarding device applications like intended through suggestion only superseded updates. your responsibility ensure that your application meets with your specifications. representation warranty given liability assumed Microchip Technology Incorporated with respect accuracy such information, infringement patents other intellectual property rights arising from such otherwise. Microchip's products critical components life support systems authorized except with express written approval Microchip. licenses conveyed, implicitly otherwise, under intellectual property rights. Trademarks Microchip name logo, Microchip logo, FilterLab, KEELOQ, microID, MPLAB, PIC, PICmicro, PICMASTER, PICSTART, MATE, SEEVAL Embedded Control Solutions Company registered trademarks Microchip Technology Incorporated U.S.A. other countries. dsPIC, ECONOMONITOR, FanSense, FlexROM, fuzzyLAB, In-Circuit Serial Programming, ICSP, ICEPIC, microPort, Migratable Memory, MPASM, MPLIB, MPLINK, MPSIM, MXDEV, PICC, PICDEM, PICDEM.net, rfPIC, Select Mode Total Endurance trademarks Microchip Technology Incorporated U.S.A. Serialized Quick Turn Programming (SQTP) service mark Microchip Technology Incorporated U.S.A. other trademarks mentioned herein property their respective companies. 2002, Microchip Technology Incorporated, Printed U.S.A., Rights Reserved. Printed recycled paper. Microchip received QS-9000 quality system certification worldwide headquarters, design wafer fabrication facilities Chandler Tempe, Arizona July 1999. Company's quality system processes procedures QS-9000 compliant PICmicro® 8-bit MCUs, KEELOQ® code hopping devices, Serial EEPROMs microperipheral products. addition, Microchip's quality system design manufacture development systems 9001 certified. 2002 Microchip Technology Inc. WORLDWIDE SALES SERVICE AMERICAS Corporate Office 2355 West Chandler Blvd. Chandler, 85224-6199 Tel: 480-792-7200 Fax: 480-792-7277 Technical Support: 480-792-7627 Address: http://www.microchip.com ASIA/PACIFIC Australia Microchip Technology Australia Suite Rawson Street Epping 2121, Australia Tel: 61-2-9868-6733 Fax: 61-2-9868-6755 Japan Microchip Technology Japan K.K. Benex 3-18-20, Shinyokohama Kohoku-Ku, Yokohama-shi Kanagawa, 222-0033, Japan Tel: 81-45-471- 6166 Fax: 81-45-471-6122 Rocky Mountain 2355 West Chandler Blvd. Chandler, 85224-6199 Tel: 480-792-7966 Fax: 480-792-7456 China Beijing Microchip Technology Consulting (Shanghai) Co., Ltd., Beijing Liaison Office Unit Bldg. Chaoyangmen Beidajie Beijing, 100027, China Tel: 86-10-85282100 Fax: 86-10-85282104 Korea Microchip Technology Korea 168-1, Youngbo Bldg. Floor Samsung-Dong, Kangnam-Ku Seoul, Korea 135-882 Tel: 82-2-554-7200 Fax: 82-2-558-5934 Atlanta Sugar Mill Road, Suite 200B Atlanta, 30350 Tel: 770-640-0034 Fax: 770-640-0307 Singapore Microchip Technology Singapore Ltd. Middle Road #07-02 Prime Centre Singapore, 188980 Tel: 65-334-8870 Fax: 65-334-8850 Boston Drive, Suite Westford, 01886 Tel: 978-692-3848 Fax: 978-692-3821 China Chengdu Microchip Technology Consulting (Shanghai) Co., Ltd., Chengdu Liaison Office 2401, 24th Floor, Ming Xing Financial Tower TIDU Street Chengdu 610016, China Tel: 86-28-6766200 Fax: 86-28-6766599 Taiwan Microchip Technology Taiwan 11F-3, Tung North Road Taipei, 105, Taiwan Tel: 886-2-2717-7175 Fax: 886-2-2545-0139 Chicago Pierce Road, Suite Itasca, 60143 Tel: 630-285-0071 Fax: 630-285-0075 Dallas 4570 Westgrove Drive, Suite Addison, 75001 Tel: 972-818-7423 Fax: 972-818-2924 China Fuzhou Microchip Technology Consulting (Shanghai) Co., Ltd., Fuzhou Liaison Office Unit 28F, World Trade Plaza Wusi Road Fuzhou 350001, China Tel: 86-591-7503506 Fax: 86-591-7503521 EUROPE Denmark Microchip Technology Nordic Regus Business Centre Lautrup Ballerup DK-2750 Denmark Tel: 4420 9895 Fax: 4420 9910 Detroit Tri-Atria Office Building 32255 Northwestern Highway, Suite Farmington Hills, 48334 Tel: 248-538-2250 Fax: 248-538-2260 China Shanghai Microchip Technology Consulting (Shanghai) Co., Ltd. Room 701, Bldg. East International Plaza Xian Road Shanghai, 200051 Tel: 86-21-6275-5700 Fax: 86-21-6275-5060 Kokomo 2767 Albright Road Kokomo, Indiana 46902 Tel: 765-864-8360 Fax: 765-864-8387 France Microchip Technology SARL Parc d'Activite Moulin Massy Saule Trapu Batiment Etage 91300 Massy, France Tel: 33-1-69-53-63-20 Fax: 33-1-69-30-90-79 Angeles 18201 Karman, Suite 1090 Irvine, 92612 Tel: 949-263-1888 Fax: 949-263-1338 China Shenzhen Microchip Technology Consulting (Shanghai) Co., Ltd., Shenzhen Liaison Office 1315, 13/F, Shenzhen Kerry Centre, Renminnan Shenzhen 518001, China Tel: 86-755-2350361 Fax: 86-755-2366086 York Motor Parkway, Suite Hauppauge, 11788 Tel: 631-273-5305 Fax: 631-273-5335 Germany Microchip Technology GmbH Gustav-Heinemann Ring D-81739 Munich, Germany Tel: 49-89-627-144 Fax: 49-89-627-144-44 Jose Microchip Technology Inc. 2107 North First Street, Suite Jose, 95131 Tel: 408-436-7950 Fax: 408-436-7955 Hong Kong Microchip Technology Hongkong Ltd. Unit 901-6, Tower Metroplaza Hing Fong Road Kwai Fong, N.T., Hong Kong Tel: 852-2401-1200 Fax: 852-2401-3431 Italy Microchip Technology Centro Direzionale Colleoni Palazzo Taurus Colleoni 20041 Agrate Brianza Milan, Italy Tel: 39-039-65791-1 Fax: 39-039-6899883 Toronto 6285 Northam Drive, Suite Mississauga, Ontario 1X5, Canada Tel: 905-673-0699 Fax: 905-673-6509 India Microchip Technology Inc. India Liaison Office Divyasree Chambers Floor, Wing (A3/A4) O'Shaugnessey Road Bangalore, 025, India Tel: 91-80-2290061 Fax: 91-80-2290062 United Kingdom Arizona Microchip Technology Ltd. Eskdale Road Winnersh Triangle Wokingham Berkshire, England RG41 Tel: 5869 Fax: 44-118 921-5820 01/18/02 2002 Microchip Technology Inc. Other recent searchesSJ6147US - SJ6147US SJ6147US Datasheet FDS8984 - FDS8984 FDS8984 Datasheet F085 - F085 F085 Datasheet EM78F568N - EM78F568N EM78F568N Datasheet F668N - F668N F668N Datasheet CEP04N7G - CEP04N7G CEP04N7G Datasheet CEB04N7G - CEB04N7G CEB04N7G Datasheet CEF04N7G - CEF04N7G CEF04N7G Datasheet CEP04N7G - CEP04N7G CEP04N7G Datasheet CEB04N7G - CEB04N7G CEB04N7G Datasheet BUF405AFI - BUF405AFI BUF405AFI Datasheet 2SK2689-01MR - 2SK2689-01MR 2SK2689-01MR Datasheet 1SBD250065E1000 - 1SBD250065E1000 1SBD250065E1000 Datasheet
Privacy Policy | Disclaimer |