⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 display.asm

📁 DSP开发的DS18B20汇编程序
💻 ASM
字号:
        .global _cd0,_cd1,_cd2,_cd3,_cd4
        .global _xx
       .text      
EN_LCD_COL		.word 0c00000h	 ;chip 74ls374 port address,LCD controlor
EN_LCD_DATA		.word 0c00002h	 ;chip 74ls374 and 74244 port address,communication between LCD and DSP
tab1num         .word tab1
tab2num         .word tab2
destaddr2      .word _xx
disaddr4       .word _cd4
disaddr3       .word _cd3
disaddr2       .word _cd2
disaddr1       .word _cd1
disaddr0       .word _cd0
;The following is to init LCD 

          .text 
          ;.global  lcdready
          ;.global  lcdwr
lcdready: push    r4		
tlcdr:    sti     r4,*ar0        ;00101110      E=1   RW=1  CS1=0
          call    dly
          ldi     *ar1,r6        ;read status from lcd
          call    dly
          or      03h,r4         
          sti     r4,*ar0        ;00100110      E=0   RW=1  CS1=0
          call    dly
          ldi     80h,r7
          tstb    r6,r7
          bnz     tlcdr		          	
		  pop     r4
		  rets
;write instruction
lcdwr:    push r5 
          sti  r1,*ar1        ;DSP translate date
          call dly              
          sti  r5,*ar0
          call dly
          and  17h,r5
          sti  r5,*ar0        ;001      E=0
          call dly
          pop  r5
          rets
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;                        
          .global _lcd_clr
_lcd_clr: ldi    @EN_LCD_COL,ar0
          ldi    @EN_LCD_DATA,ar1	    	    
	     
          ldi   3fh,r1
          ldi   09h,r5
	      call  lcdwr
	      
	      ldi   3fh,r1
          ldi   0ah,r5
	      call  lcdwr
	  
          ldi   8,r2		    ;set y address for temp
          ldi   0b8h,r3         ;set page address
clear1:   ldi   0eh,r4
	      call  lcdready
	      ldi   r3,r1
          ldi   0ah,r5
	      call  lcdwr
      
          ldi   0dh,r4
	      call  lcdready
	      ldi   r3,r1
          ldi   09h,r5
	      call  lcdwr
	  
	      ldi   0eh,r4
	      call  lcdready
	      ldi   40h,r1
          ldi   0ah,r5
	      call  lcdwr
	      ldi   0dh,r4
	      call  lcdready
          ldi   09h,r5
	      call  lcdwr	  
	      ldi   40h,r0         ;black 64bits per page
clear2:   ldi   0eh,r4
	      call  lcdready
          ldi   0,r1
	      ldi   1ah,r5
          call  lcdwr
          ldi   0dh,r4
          call  lcdready
          ldi   19h,r5
          call  lcdwr          
          subi  1,r0
          bnz   clear2 
          addi  1,r3
          subi  1,r2          
          bnz   clear1          
          rets           
          .global   _lcd_init
_lcd_init: 
          push	ar0		;for address
	      push  ar1
	      push  ar2
	      push  ar3
	      push  r0
          push  r1
          push  r2
          push  r3
          push  r4
          push  r5    
          
          ldi   @EN_LCD_COL,ar0
          ldi   @EN_LCD_DATA,ar1
          ldi   03h,r1            ;00000011  RTS=0
          sti   r1,*ar0
          call  dly
          ldi   023h,r1       
          sti   r1,*ar0           ;00100011   RTS=1
          call  dly          
;;; to set first line 
                    
          ldi   0c0h,r1
          ldi   02eh,r4
          ldi   022h,r5
          call  lcdready
          call  lcdwr
          ldi   02dh,r4
          ldi   021h,r5
          call  lcdready
          call  lcdwr
             
;;; to begin show
 	      ldi   03fh,r1
 	      ldi   02eh,r4
          ldi   022h,r5	  
          call  lcdready
          call  lcdwr
          ldi   02dh,r4
          ldi   021h,r5
          call  lcdready
          call  lcdwr	 
	      pop   r5
	      pop   r4
	      pop   r3
	      pop   r2
          pop   r1
          pop	r0
          pop   ar3
          pop   ar2
          pop   ar1
	      pop   ar0
	      rets
        .global _temperdis
_temperdis:
	    ldi    0bah,r3         
	    ldi    0dh,r4
	    ldi    52h,r2
	    ldi    09h,r5
        ldi    @_cd4,r0         ;cd4
	    cmpi   0,r0
	    bz     temperdis1        
	    call   datadis1
	    
        ldi    0bbh,r3
        ldi    52h,r2           
	    ldi    09h,r5
	    ldi    @_cd4,r0         ;cd4
        call   datadis2
	    
temperdis0: ldi    0bah,r3          
	    ldi    5ah,r2
	    ldi    09h,r5
        ldi    @_cd3,r0         ;cd3
        call   datadis1
	    
        ldi    0bbh,r3          
        ldi    5ah,r2
	    ldi    09h,r5
        ldi    @_cd3,r0         ;cd3
        call   datadis2
	    
	    ldi    0bah,r3          
	    ldi    62h,r2
	    ldi    09h,r5
	    ldi    @_cd2,r0         ;cd2
        call   datadis1
	    
        ldi    0bbh,r3         
        ldi    62h,r2
	    ldi    09h,r5
	    ldi    @_cd2,r0         ;cd2
        call   datadis2
	    
	    ldi    0bah,r3         
	    ldi    6ah,r2
	    ldi    09h,r5
        ldi    @_cd1,r0         ;cd1
        call   datadis1
	    
        ldi    0bbh,r3          
        ldi    6ch,r2
	    ldi    09h,r5
	    ldi    @_cd1,r0         ;cd1
        call   datadis2	    
	       
        ldi    0bah,r3          
	    ldi    74h,r2
	    ldi    09h,r5
        ldi    @_cd0,r0         ;cd0
        call   datadis1
	    
        ldi    0bbh,r3          
        ldi    74h,r2
	    ldi    09h,r5
	    ldi    @_cd0,r0         ;cd0
        call   datadis2	    
	    rets        
temperdis1: ldi    18,r0            ;space
	    call   datadis2
	    
        ldi    0bbh,r3
        ldi    52h,r2
	    ldi    09h,r5
        ldi    18,r0            ;space
	    call   datadis2
	    br    temperdis0
          rets
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
datadis1:ldi    @EN_LCD_COL,ar0
         ldi    @EN_LCD_DATA,ar1	    	    
	     ldi    r3,r1
		 call   lcdready
		 call   lcdwr		 
		 ldi    r2,r1
		 call   lcdready
		 call   lcdwr		 
         or     10h,r5
		 call   lcdready		 
		 ldi    @tab1num,ar7
	     mpyi   7,r0
	     addi   r0,ar7
	     ldi    6,rc
	     rptb   disp1lp
	     ldi    *ar7++,r1
disp1lp: call   lcdwr
		 
		 ldi   3fh,r1
         ldi   09h,r5
	     call  lcdwr
	      
	     ldi   3fh,r1
         ldi   0ah,r5
	     call  lcdwr
	  
		 rets	     	     
;;;;;;;;;;
datadis2:ldi    @EN_LCD_COL,ar0
         ldi    @EN_LCD_DATA,ar1	    
         ldi    r3,r1
		 call   lcdready
		 call   lcdwr		 
		 ldi    r2,r1
		 call   lcdready
		 call   lcdwr		 
         or     10h,r5
		 call   lcdready		 
		 ldi    @tab2num,ar7
	     mpyi   7,r0
	     addi   r0,ar7
	     ldi    6,rc
	     rptb   disp2lp
	     ldi    *ar7++,r1
disp2lp: call   lcdwr
		 
		 ldi   3fh,r1
         ldi   09h,r5
	     call  lcdwr
	      
	     ldi   3fh,r1
         ldi   0ah,r5
	     call  lcdwr
	  
		 rets	     	     	     
;input: r2--------the first line perpage
;       r3--------the page            
;       ar0-------the address of the instruction
;       ar2-------the address of the data
;;;;;;;;;;;;;    
           .global   _LCD_DISP_DOT
_LCD_DISP_DOT: 
         ldi    @EN_LCD_COL,ar0
         ldi    @EN_LCD_DATA,ar1
            ldi    0bbh,r3          
	    ldi    6ah,r2
	    ldi    09h,r5	    	    
	     ldi    r3,r1
		 call   lcdready
		 call   lcdwr		 
		 ldi    r2,r1
		 call   lcdready
		 call   lcdwr		 
         or     10h,r5
		 call   lcdready
		 ldi    40h,r1
		 call   lcdwr
		 rets	
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
                 .global _conver  

_conver:ldi    @destaddr2,    ar2
       ldi    *++ar2,      r1
       and    0f0h,         r1
       cmpi   0,           r1
       bz     lcd_dis_p
       call   lcd_dis_n
lcd_dis_p:ldi    0bah,r3         
	  ldi    4ah,r2
          ldi    09h,r5
          ldi    10,r0         ;"+"
          call   datadis1
	    
          ldi    0bbh,r3          
          ldi    4ah,r2
          ldi    09h,r5
	  ldi    10,r0         ;"+"
          call   datadis2	    
          br     conver1
lcd_dis_n: ldi    0bah,r3         
	   ldi    4ah,r2
	   ldi    09h,r5
           ldi    11,r0         ;"-"
           call   datadis1
	    
           ldi    0bbh,r3          
           ldi    4ah,r2
	   ldi    09h,r5
	   ldi    11,r0         ;"-"
           call   datadis2	    
          br      conver1  
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;转换整数部分,将十六进制转换为其BCD码      
       
conver1:ldi    @destaddr2,    ar2
        ldi    *ar2++,        r1
        and    0f0h,          r1
        lsh    4,             r1
        ldi    *ar2,          r2
        and    07h,           r2
        ldi    r2,            r3
        lsh    -3,            r3
        addi    r1,           r3
        cmpi   0ah,            r1
        blt    mend1
        br    mend2
mend2:addi    1,              r2
      br      mend1
mend1:  mpyf   6,             r2
        addi   r3,            r2
    
        and    0f0h,          r2
        lsh    4,             r2
        cmpi   0ah,           r2
        blt    mend11
        br     mend12
mend11: ldi    0,          r4
        sti    r4,          @_cd4
       ;ldi    @disaddr4,     ar3
       ;sti    0,             *ar3
        br     mend1end
mend12:subi    0ah,           r2
       ldi    1,           r4
       sti    r4,          @_cd4
       ;ldi    @disaddr4,     ar3
       ;sti    1,             *ar3
       br     mend1end
mend1end: sti    r2,          @_cd3
          ;ldi    @disaddr3,     ar3
          ;sti    r2,            *ar3
        and    0fh,           r3
        sti    r3,          @_cd2
        ;ldi    @disaddr2,     ar3
        ;sti    r3,            *ar3
      rets
;;;;;;;;;;;;;;        
dly:  push  r1
dly0: ldi   38h,r1  ;38
dly1: subi  1,r1
      bnz   dly1
      pop   r1
      rets
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
             .sect    ".iir_tab"      ;make a separate section
tab1: .word 00h,0c0h,020h,010h,010h,020h,0c0h   ;0                 0
      .word 00h,000h,040h,060h,0f0h,000h,000h   ;1                 1             
	  .word 00h,0c0h,020h,010h,010h,020h,0c0h   ;2	           2
	  .word 00h,060h,010h,010h,010h,010h,0e0h   ;3             3
      .word 00h,000h,000h,0c0h,020h,0f0h,000h   ;4                 4
      .word 00h,0f0h,090h,090h,090h,090h,010h   ;5                 5
      .word 00h,0e0h,010h,010h,010h,010h,020h   ;6                 6
      .word 00h,010h,010h,010h,010h,090h,070h   ;7                 7
      .word 00h,0c0h,020h,010h,010h,020h,0c0h   ;8                 8
      .word 00h,0e0h,010h,010h,010h,010h,0e0h   ;9                 9
      .word 00h,010h,010h,0fdh,0fdh,010h,010h   ;"+"               10
      .word 00h,010h,010h,010h,010h,010h,010h   ;"-"               11
      
tab2: .word 00h,01fh,20h,40h,40h,20h,1fh        ;0                 0
      .word 00h,000h,00h,00h,7fh,00h,00h        ;1                 1
      .word 00h,060h,50h,48h,44h,42h,41h        ;2                 2
      .word 00h,030h,40h,40h,42h,42h,3dh        ;3                 3
	  .word 00h,018h,16h,11h,10h,7fh,10h        ;4                 4
	  .word 00h,031h,40h,40h,40h,40h,3fh        ;5                 5
	  .word 00h,03fh,42h,41h,41h,41h,3eh        ;6                 6
	  .word 00h,000h,00h,60h,1ch,03h,00h        ;7                 7
	  .word 00h,018h,25h,42h,42h,25h,18h        ;8                 8
	  .word 00h,023h,44h,44h,44h,42h,3fh	    ;9                 9
	  .word 00fh,001h,001h,07fh,07fh,001h,001h  ;"+"               10
	  .word 00h,001h,001h,001h,001h,001h,001h         ;"-"               11
	  







⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -