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

📄 sloid_1.asm

📁 该程序是用汇编语言编写的用于测试石油凝固点的程序,该程序对于应用汇编编程的初学者有很大的参考 价值
💻 ASM
字号:
lcd_clk       bit        p1.0
lcd_do        bit        p1.1    
lcd_buf       equ        3ch ;3ch,3dh,3eh,3fh,40h分别存放显示温度的高-低
                  
tim8253co     equ        0fbffh
tim8253a      equ        0f8ffh
tim8253b      equ        0f9ffh
tim8253c      equ        0faffh

dog_so        bit        p0.0
dog_si        bit        p0.1
dog_sck       bit        p0.2
dog_cs        bit        p2.4

wren          equ        00000110b    ;设置写使能锁存器(准许)
wrdi          equ        00000100b    ;复位写使能锁存器(不准许)
rdsr          equ        00000101b    ;读状态据存器
wrsr1         equ        00000001b    ;写状态据存器

key           equ        30h
key_bit       bit        00h          ;确实有键按下标志
key_on        bit        01h          ;防止按键连续按下处理
finsh         bit        02h          ;凝固点到
judge_key     bit        03h          ;判断是否有延时

ray_vol       equ        31h          ;测试键按下时光电初始值
ray_voh       equ        32h

ray_vo3h      equ        33h          ;凝固时光电电压与初始值的
ray_vo3l      equ        34h          ;固定值差值,在调试时补上
count         equ        35h          ;凝固点到的次数,防止误动作


sloid_sign    equ        36h
sloid_temph   equ        37h
sloid_templ   equ        38h          ;凝固点温度
temp_sign     equ        39h
temph         equ        3ah
templ         equ        3bh

tlc_do        bit        p0.1
tlc_clk       bit        p0.0
tlc_cs        bit        p2.3


;-----------------------------------
        
        org   0000h
        nop
        ajmp  main
        org   000bh
        nop
        nop
        ajmp  intp
        org   0030h
intp:   clr   dog_cs
        nop
        nop
        setb  dog_cs
        push  acc
        push  psw
        mov   psw,#08h
        mov   th0,#0b8h
        mov   tl0,#0f0h
        setb  tr0   
        ;----------------------------
        clr   p1.4
        mov   a,p0
        cjne  a,#0ffh,hav_key
        ajmp  abb
hav_key:jb    key_on,abd
        jnb   judge_key,abc
        clr   judge_key
        setb  key_bit
        setb  key_on
        mov   key,a
        ajmp  abd
abc:    setb  judge_key
        ajmp  abd
abb:    clr   key_on
abd:    setb  p1.4
        ;----------------------------
        jb    p1.5,break        ;测试没开始不用比较光电
        acall tlc549
;*************************************
;*      
;*************************************        
        mov   a,r5
        jnz   qq1
        mov   a,r6
        clr   c
        subb  a,#3dh    
        jc    qq2
qq1:    mov   count,#00h
        ajmp  break
;*************************************
;*
;*************************************
       
        mov   a,#9ah
        clr   c
        subb  a,ray_vol
        mov   r1,a
        mov   a,#99h
        subb  a,ray_voh
        mov   r2,a
        clr   c
        mov   a,r1
        add   a,r6
        da    a
        mov   a,r2
        addc  a,r5
        da    a
     
        jc    break             ;C=1说明光电的初始值<测量值
   
        mov   a,r6
        mov   r2,a
        mov   a,r5
        mov   r3,a
        mov   r4,ray_vol
        mov   r5,ray_voh
        lcall dubcds             ;计算光电的差值
        mov   a,#9ah
        subb  a,r4
        mov   r1,a
        mov   a,#99h
        subb  a,r5
        mov   r2,a
        clr   c
        mov   a,ray_vo3l          ;光电的差值>固定差值,则凝固
        add   a,r1
        da    a
        mov   a,ray_vo3h
        addc  a,r2
        da    a
        jc    break
qq2:  
        inc   count
        mov   a,count
        cjne  a,#32h,break         ;连续判断5次,才能防止误动作
        mov   count,#00h
        setb  finsh
        setb  p1.5
        mov   sloid_sign,temp_sign
        mov   sloid_temph,temph
        mov   sloid_templ,templ
                
break:  pop   psw
        pop   acc
        reti        
        
        
        
main:   mov   sp,#60h
        mov   psw,#00h
        mov   p1,#0ffh
        mov   20h,#00h
        mov   ray_vo3l,#00h      ;光电电压固定差值
        mov   ray_vo3h,#02h
        mov   r0,#20h
        mov   r7,#40h
        clr   a
inta:   mov   @r0,a                ;初始化
        djnz  r7,inta
        mov   p1,#0ffh
        mov   p2,#0ffh
        lcall dog
        mov   tmod,#21h              
        mov   th0,#0b8h
        mov   tl0,#0f0h
        mov   ie,#82h
        setb  tr0
        lcall wr_53
circe:  ;-------------------------主程序开始
        clr   dog_cs
        nop
        nop
        setb  dog_cs
        jnb   key_bit,read_temp
        clr   key_bit
        mov   a,key
        jb    acc.0,p11
        jnb   p1.5,read_temp
        clr   p1.5                ;制冷开始
        lcall tlc549
        mov   ray_vol,r6
        mov   ray_voh,r5
        ajmp  read_temp        
p11:    jb    acc.1,read_temp
        setb  p1.5                ;停止制冷
        clr   finsh
read_temp:
                 
        jb    p1.3,circe
        mov   dptr,#tim8253c
        movx  a,@dptr
        cpl   a
        mov   r0,a
        movx  a,@dptr
        cpl   a
        mov   r1,a
        clr   c
        mov   a,r0
        subb  a,#60h
        mov   r0,a
        mov   a,r1
        subb  a,#63h
        mov   r1,a
        jc    dc1
        lcall dubcd
        mov   temp_sign,#0ah     ;temp_sign=0ah说明温度为正
        mov   temph,r5
        mov   templ,r4
        ajmp  wr_lcd
dc1:    clr   c
        mov   a,r0
        cpl   a
        add   a,#01h
        mov   r0,a
        mov   a,r1
        cpl   a
        addc  a,#00h
        mov   r1,a
        lcall dubcd
        mov   temp_sign,#0bh     ;temp_sign=0bh说明温度为负 
        mov   temph,r5
        mov   templ,r4
wr_lcd: jnb   finsh,abh
        mov   temp_sign,sloid_sign
        mov   temph,sloid_temph
        mov   templ,sloid_templ

abh:    mov   r0,#lcd_buf
        mov   @r0,#0ah            ;-
        inc   r0
        mov   @r0,temp_sign
        inc   r0
        mov   a,temph
        anl   a,#0f0h
        swap  a
        mov   @r0,a
        inc   r0
        mov   a,temph
        anl   a,#0fh
        mov   @r0,a
        inc   r0
        mov   a,templ
        anl   a,#0f0h
        swap  a
        mov   @r0,a
        mov   r7,#05h
        mov   r1,#lcd_buf
        mov   r0,#lcd_buf 
aaq:    mov   a,@r0
        mov   dptr,#arry
        movc  a,@a+dptr
        mov   @r1,a
        inc   r1
        inc   r0
        djnz  r7,aaq
        ajmp  data_lcd
arry:   db    88h,0bbh,0c1h,91h,0b2h,94h,84h,0b8h,80h,90h
        db    0ffh,0f7h,0cch,83h,0c4h,0e4h
data_lcd:
        mov   r7,#05h
        mov   r1,#lcd_buf
        ;-----------------------
        mov   a,r1
        add   a,#03h
        mov   r1,a
        mov   a,@r1
        anl   a,#7fh          ;第三位要显示小数点
        mov   @r1,a
        mov   r1,#lcd_buf
        ;-----------------------
tsr_pa: mov   a,@r1         
        acall transbyte
        inc   r1
        djnz  r7,tsr_pa
        lcall wr_53
        ajmp  circe
        
        
;-----------------------------------        
transbyte:
        mov   r0,#08h
tsb_pa: rrc   a
        acall transbit
        djnz  r0,tsb_pa
        rrc   a
        ret
transbit:
        mov   lcd_do,c     ;先送数据到数据口线DI
        setb  lcd_clk      ;再使时钟口线发一个负脉冲
        clr   lcd_clk
        setb  lcd_clk        
        ret

;*************************************
tlc549: clr   a
        setb  tlc_do
        clr   tlc_cs       ;/cs
        mov   r7,#02h
        lcall readata
        mov   r5,a
        mov   r7,#08h
        lcall readata
        mov   r6,a
        setb  tlc_cs
        clr   tlc_clk
      
        
        ret
;------------------------------------------
readata:clr   tlc_clk      ;clk
        mov   c,tlc_do     ;do
        rlc   a
        setb  tlc_clk
        djnz  r7,readata
        ret
                
        

        
        
;*************************************        
wr_53:  clr   p1.2
        clr   p1.3
        mov   dptr,#tim8253co
	mov   a,#36h
        movx  @dptr,a
        mov   a,#72h
        movx  @dptr,a
        mov   a,#0b0h
        movx  @dptr,a
        mov   dptr,#tim8253a
        mov   a,#12h
        movx  @dptr,a 
        clr   a
        movx  @dptr,a
        mov   dptr,#tim8253b
        mov   a,#3ch
        movx  @dptr,a
        mov   a,#0e9h
        movx  @dptr,a
        setb  p1.2
        mov   dptr,#tim8253c
        mov   a,#0ffh
        movx  @dptr,a
        movx  @dptr,a
        setb  p1.3
        ret                
        
        
;*************************************        
dog:    lcall readsr
        jnb   acc.0,writesr1
        ret
;------------------
readsr: mov   a,#rdsr
        clr   dog_cs
        lcall write8
        lcall read8
        setb  dog_cs
        ret
;-----------------
writesr1:
        clr   dog_cs
        mov   a,#wren  ; 00000110b设置写使能锁存器(准许)
        lcall write8
        setb  dog_cs
        clr   dog_cs
        mov   a,#wrsr1
        lcall write8
        mov   a,#00h
        lcall write8
        setb  dog_cs
        clr   dog_cs
        nop
        setb  dog_cs
        ret
;------------
write8: mov   r3,#08h
write81:
        rlc   a
        mov   dog_si,c
        clr   dog_sck
        lcall atly
        setb  dog_sck
        djnz  r3,write81
        ret
;------------
read8:  mov   r3,#08h	
read81: setb  dog_so
        setb  dog_sck
        lcall atly
        clr   dog_sck
        mov   c,dog_so
        rlc   a
        djnz  r3,read81
        setb  dog_sck
        ret
;---------------------------------
atly:   mov   r6,#30 
        djnz  r6,$
        ret  
        
;********************************
dubcd:  mov   r7,#10h 
        clr   a 
        mov   r4,a 
        mov   r5,a 
        mov   r6,a 
lp0:    clr   c 
        mov   a,r0 
        rlc   a 
        mov   r0,a 
        mov   a,r1 
        rlc   a 
        mov   r1,a 
        mov   a,r4 
        addc  a,r4 
        da    a 
        mov   r4,a 
        mov   a,r5 
        addc  a,r5 
        da    a 
        mov   r5,a 
        mov   a,r6 
        addc  a,r6 
        da    a 
        mov   r6,a   
        djnz  r7,lp0       
        ret
;*********************************
dubcds: clr   c
        mov   a,#99h
        subb  a,r3
        mov   r3,a
        clr   c
        mov   a,#9ah
        subb  a,r2
        add   a,r4
        da    a
        mov   r4,a
        mov   a,r3
        addc  a,r5
        da    a
        mov   r5,a
        ret
        end                        

⌨️ 快捷键说明

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