📄 1.txt
字号:
Listing 5
;*****************************************************************************
graph_data
;graph data in memory - set or clr
;temperature and dash flags
;write from left to right
;*****************************************************************************
movl offset,h'00' ;start at left axis (offset includes nibble
;bits)…shift data memory one address over
;(use short term)
movl f_pointer,h'f0' ;from pointer…start at next to last
;location (was "c0h')
clrf dash_count ;use to draw dashes on line
next_point ;copy to next location
swapf f_pointer,0 ;w=f_pointer (swapped)
andlw h'0f' ;mask lsn
btfss temperature ;check flag
iorlw h'10' ;msn for short term address
btfsc temperature
iorlw h'00'
movwf addr_msd ;RAM address
movf f_pointer,0 ;w=f_pointer
andlw h'0f' ;mask msn
iorlw h'f0' ;msn "F"
movwf addr_lsd ;RAM address
call ram_read ;read RAM (data returned in mem_data)
movf mem_data,0 ;w = mem_data (group_row = 72d - mem_data)
sublw d'72' ;w = 72d - mem_data
movwf mem_data ;mem_data = 72d - mem_data
compute_change ;compute change from last point
mov current_pt,mem_data ;current_pt = mem_data
movf last_pt,0 ;w = last_pt
subwf current_pt,0 ;w = current_pt - last_pt
btfsc zero ;check for zero
movlw h'01' ;1 is minimum
movwf change ;change = current_pt - last_pt
point_read ;point loaded into memory.
;determine lowest point and work up (for
;drawing lines between dots)
jb change,7,current_lower
mov center_pt,last_pt
btfss thin ;check for thin flag
incf change,same ;draw double thickness
mov var3,change
goto l_bold_point
current_lower ;current_pt last_pt
movf current_pt,0 ;w = current_pt
subwf last_pt,0 ;w = last_pt - current_pt
btfsc zero ;check for zero
movlw h'01'
movwf change
mov center_pt,current_pt
btfss thin ;check for thin flag
incf change,same ;draw double thickness
mov var3,change
goto l_bold_point
l_bold_point
call bold_point ;preload mem_data,offset,var3(w/change)
ready_next ;ready for next point
incf offset,same ;go to next point
mov last_pt,current_pt ;last_pt = current_pt
djnz f_pointer,next_point
return
bold_point ;draw actual data points
;preload center_pt,offset,var3(w/change)
btfsc dash ;only increment dash_count if dash flag is set
incf dash_count,same ;keep track to insert dashes
mov mem_data,center_pt
mov addr_msd,mem_data ;preload addr_msdd
bcf carry
rrf addr_msd,same ;shift right two places
bcf carry
rrf addr_msd,same
andl mem_data,b'00000011' ;mask all but last two bits
btfsc zero ;preload addr_lsd with mem_data info
movlw h'00'
decf mem_data,same
btfsc zero
movlw h'3c'
decf mem_data,same
btfsc zero
movlw h'78'
decf mem_data,same
btfsc zero
movlw h'b4'
movwf addr_lsd ;now add column offset
mov var1,offset ;var1 = offset
bcf carry ;divide by four
rrf var1,same
bcf carry
rrf var1,same
add addr_lsd,var1 ;cannot roll over to msd (remains fixed)
;now read current pixel data (from DISPLAY memory)
call ram_read ;data returned in mem_data @ addr_msd,lsd
;determine bit position from lsb's of offset
mov var1,offset ;var1 = offset
andl var1,b'00000011' ;var1 = offset(1,0)
btfsc zero
movlw b'00001000' ;bit position zero
decf var1,same
btfsc zero
movlw b'00000100' ;bit position one
decf var1,same
btfsc zero
movlw b'00000010' ;bit position two
decf var1,same
btfsc zero
movlw b'00000001' ;bit position three
;or bit position (in w) with pixel data
iorwf mem_data,same
mov ram_data,mem_data
btfss dash_count,1 ;skip every two points (when dash flag set)
call ram_write
incf center_pt,same ;go up one row
djnz var3,bold_point ;draw next points (triple)
return
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -