;-------------------------- DEVICE DIRECTIVES -------------------------- DEVICE SX28,OSC4MHZ,TURBO ID 'temp 1.0' IFDEF __SASM ;SASM Directives DEVICE STACKX,OPTIONX IRC_CAL IRC_SLOW ELSE ;Parallax Assember Directives DEVICE STACKX_OPTIONX ENDIF RESET Initialize ;------------------------------ COSTANTS ------------------------------- CE_dac EQU rb.2 data_dac EQU rb.1 sclk_dac EQU rb.0 ;------------------------------ VARIABLES ------------------------------ Count1 EQU $08 Count2 EQU $09 ORG $0a i DS 2 isr_tmp DS 1 isr_digi DS 1 display ds 2 temp ds 2 ;---------------------------- DEBUG SETTINGS --------------------------- FREQ 4_000_000 WATCH i,16,ubin WATCH display,16,udec ;-------------------------- INTERRUPT ROUTINE -------------------------- ;------------------------ SUB ROUTINES --------------------------------- ;-------------------------------- MACROS ------------------------------- INCLUDE "links_macros.SRC" ; the two macros used in this file are copied below. ; Will read data from a shift register or similar device ; -- adapted for http://www.mikroe.com/en/books/picbook/7_07chapter.htm ; result register to return value ; bit_counter temp reg = number of bits > 8 _shiftinw MACRO sclk,data,result,bit_counter LOCAL loop clr result clr result+1 clc :loop clc setb sclk ; toggle sclk jmp $+1 ;delay 3 cycles nop clrb sclk rl result rl result+1 movb result.0, data decsz bit_counter jmp :loop ENDM ; makes jump+nop delays ; -- From parallax Dev System manuel pg 68 _delay MACRO cycles IF(cycles > 0) REPT (cycles/3) jmp $+1 ; delay 3 cycels ENDR REPT (cycles//3) nop ; delay 1 cycles ENDR ENDIF ENDM ;------------------------ INITIALIZATION ROUTINE ----------------------- Initialize ;Configure port settings mov ra, #%0000 ;Port a output zero mov !ra,#%1100 ;Port a.bit7-0 output dir. mov rb, #%00000100 ;Port b output zero mov !rb,#%00000010 ;Port b output dir. mov rc, #%00000000 ;Port C output zero mov !rc,#%00000000 ;Port C.bit7-0 output dir. clr i clr isr_digi ;RTCC Rollover Interrupt Configuration ;MOV !OPTION,#%10011111 ;Enable RTCC rollover interrupt ;RTCC inc on clock cycle, no prescaler ;---------------------------- MAIN PROGRAM ----------------------------- Main call delay ;delay clrb sclk_dac _delay 30 mov Count1,#10 clrb CE_dac _delay 6 _shiftinw sclk_dac,data_dac,i,Count1 _delay 6 setb CE_dac ; scale & format data mov display,i mov display+1,i+1 break jmp Main Delay clr Count1 ;Initialize Count1, Count2 clr Count2 Loop nop nop nop djnz Count1,loop ;Decrement until all are zero djnz Count2,loop ret ;then return