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

📄 assembler of constants.c

📁 基于87C51FA选用DS1620调温器。 附有汇编源码
💻 C
📖 第 1 页 / 共 5 页
字号:
a178:          cjne     a,#0d8h,a179
               lcall    prtlcd
               db       '226.4',0
               ljmp      st
a179:          cjne     a,#0d9h,a180
               lcall    prtlcd
               db       '227.3',0
               ljmp      st
a180:          cjne     a,#0dah,a181
               lcall    prtlcd
               db       '228.2',0
               ljmp      st
a181:          cjne     a,#0dbh,a182
               lcall    prtlcd
               db       '229.1',0
               ljmp     st
a182:          cjne     a,#0dch,a183
               lcall    prtlcd
               db       '230.0',0
               ljmp     st
a183:          cjne     a,#0ddh,a184
               lcall    prtlcd
               db       '230.9',0
               ljmp     st
a184:          cjne     a,#0deh,a185
               lcall    prtlcd
               db       '231.8',0
               ljmp     st
a185:          cjne     a,#0dfh,a186
               lcall    prtlcd
               db       '232.7',0
               ljmp     st
a186:          cjne     a,#0e0h,a187
               lcall    prtlcd
               db       '233.6',0
               ljmp     st
a187:          cjne     a,#0e1h,a188
               lcall    prtlcd
               db       '234.5',0
               ljmp     st
a188:          cjne     a,#0e2h,a189
               lcall    prtlcd
               db       '235.4',0
               ljmp     st
a189:          cjne     a,#0e3h,a190
               lcall    prtlcd
               db       '236.3',0
               ljmp     st
a190:          cjne     a,#0e4h,a191
               lcall    prtlcd
               db       '237.4',0
               ljmp     st
a191:          cjne     a,#0e5h,a192
               lcall    prtlcd
               db       '238.1',0
               ljmp     st
a192:          cjne     a,#0e6h,a193
               lcall    prtlcd
               db       '239.0',0
               ljmp     st
a193:          cjne     a,#0e7h,a194
               lcall    prtlcd
               db       '239.9',0
               ljmp     st
a194:          cjne     a,#0e8h,a195
               lcall    prtlcd
               db       '240.8',0
               ljmp     st
a195:          cjne     a,#0e9h,a196
               lcall    prtlcd
               db       '241.7',0
               ljmp     st
a196:          cjne     a,#0eah,a197
               lcall    prtlcd
               db       '242.6',0
               ljmp     st
a197:          cjne     a,#0ebh,a198
               lcall    prtlcd
               db       '243.5',0
               ljmp     st
a198:          cjne     a,#0ech,a199
               lcall    prtlcd
               db       '244.4',0
               ljmp     st
a199:          cjne     a,#0edh,a200
               lcall    prtlcd
               db       '245.3',0
               ljmp     st
a200:          cjne     a,#0eeh,a201
               lcall    prtlcd
               db       '246.2',0
               ljmp     st
a201:          cjne     a,#0efh,a202
               lcall    prtlcd
               db       '247.1',0
               ljmp     st
a202:          cjne     a,#0f0h,a203
               lcall    prtlcd
               db       '248.0',0
               ljmp     st
a203:          cjne     a,#0f1h,a204
               lcall    prtlcd
               db       '248.9',0
               ljmp     st
a204:          cjne     a,#0f2h,a205
               lcall    prtlcd
               db       '249.8',0
               ljmp     st
a205:          cjne     a,#0f3h,a206
               lcall    prtlcd
               db       '250.7',0
               ljmp     st
a206:          cjne     a,#0f4h,a207
               lcall    prtlcd
               db       '251.6',0
               ljmp     st
a207:          cjne     a,#0f5h,a208
               lcall    prtlcd
               db       '252.5',0
               ljmp     st
a208:          cjne     a,#0f6h,a209
               lcall    prtlcd
               db       '253.4',0
a209:          cjne     a,#0f7h,a210
               lcall    prtlcd
               db       '254.3',0
               ljmp     st
a210:          cjne     a,#0f8h,a211
               lcall    prtlcd
               db       '255.2',0
               ljmp     st
a211:          cjne     a,#0f9h,a212
               lcall    prtlcd
               db       '256.1',0
               ljmp     st
a212:          cjne     a,#0fah,a213
               lcall    prtlcd
               db       '257.0',0
a213:          ljmp     st

               ; MAX CHIP TEMP = 257 DEG F.


; start of Serial communications routine with the 1620.

out_cmd:
               clr   p3.2        ; reset ds1620
               setb  p3.2        ;
out_data:
               mov   sbuf,a      ; move data 'out' to ds1620
oops:
               jnb   ti,oops     ; loop here until all data is out
               clr   ti          ; clear ti bit 'transmit interupt'
               ret               ; Now go back.
in_data:
               setb  ren         ; enable receiver to clock in data
wait_up:
               jnb   ri,wait_up  ; loop here until all data is received
               mov   a,sbuf      ; move data too ACC
               clr   ren         ; dissable receiver, prevent
                                 ; another reception
               clr   ri          ; clear ri 'receive interupt'
               ret               ; Finished here , go back.

resetlcd:
               clr   lcd_rs      ; reset LCD routine
               clr   lcd_rw
               clr   lcd_e

               mov   r4,#30h
               setb  lcd_e
               clr   lcd_e
               mov   a,#4
               lcall delay

               mov   lcd_data,#30h
               setb  lcd_e
               clr   lcd_e
               mov   a,#1
               lcall delay

               mov   lcd_data,#30h
               setb  lcd_e
               clr   lcd_e
               mov   a,#1
               lcall delay

               mov   r4,#config
               lcall wrlcdcom

               mov   r4,#08h
               lcall wrlcdcom

               mov   r4,#01h
               lcall wrlcdcom
               mov   r4,#entrymode
               lcall wrlcdcom
               ret

initlcd:
               clr   lcd_rs       ; initialize LCD routine.
               clr   lcd_rw
               clr   lcd_e

               mov   r4,#38h
               lcall wrlcdcom

               mov   r4,#0eh
               lcall wrlcdcom

               mov   r4,#06h
               lcall wrlcdcom

               mov   r4,#01h
               lcall wrlcdcom
               ret

big_delay:
               mov  r0,#1         ; delay routine.
x0b:
               mov  r2,#0ffh      ; Crude But Effective!
x1b:
               mov  r5,#0ffh
x2b:
               djnz r5,x2b
               djnz r2,x1b
               djnz r0,x0b
               ret

wrlcdcom:
               clr   lcd_e  ; write 'command data' to LCD routine.
               clr   lcd_rs
               clr   lcd_rw
               mov   lcd_data,r4
               lcall pulseEwait
               ret

pulseEwait:
               lcall delay  ; delay needed for slower LCD's.
               clr   lcd_e  ; routine to see if LCD is still busy.
               setb  lcd_e
               clr   lcd_e

               mov   lcd_data,#0ffh
               setb  lcd_rw
               push  acc

pew:
               inc   b
               setb  lcd_e
               mov   a,lcd_data
               clr   lcd_e
               jb    acc.7, pew
               pop   acc
               ret

prtlcd:
               pop   dph  ; prtlcd is our main display printing routine
               pop   dpl  ; this routine will print the information
                          ; located directly below the calling routine.
okee_doke:
               clr   a    ; the information after the ( DB ) statement.
               movc  a,@a+dptr
               cjne  a,#0,its_ok
               sjmp  retprtlcd

its_ok:
               mov   r4,a
               lcall wrlcddata
               inc   dptr
               ljmp  okee_doke
               ret

wrlcddata:
               clr   lcd_e
               setb  lcd_rs
               clr   lcd_rw
               mov   lcd_data,r4
               lcall pulseEwait
               ret

retprtlcd:
               mov   a,#1h
               jmp   @a+dptr

placecur:
               dec   acc     ; this routine will place the cursor at a
               jnz   line2   ; specific place : A holds the line, and
               mov   a,b     ; B holds the column locations
                             ; when this routine is called.
               add   a,#80h
               sjmp  setcur

line2:
               cjne  a,#1,line3
               mov   a,b
               add   a,#0c0h
               sjmp  setcur

line3:
               cjne  a,#2,line4
               mov   a,b
               add   a,#94h
               sjmp  setcur

line4:
               mov   a,b
               add   a,#0d4h

setcur:
               mov   r4,a
               lcall wrlcdcom
               ret

delay:
               dec   a
d_olp:
               push  acc
               mov   a,#0a6h
d_ilp:
               inc   a
               nop
               nop
               nop
               nop
               nop
               nop
               nop
               nop
               pop   acc
               djnz  acc,d_olp
               mov   a,#0a6h
d_lp2:
               inc   a
               nop
               nop
               nop
               nop
               nop
               nop
               nop
               nop
               jnz   d_lp2
               nop
               nop
               nop
               nop
               nop
               ret

; Begin routine to accept user entry of device programming setpoints.

up1:
               mov     p2,#0ffh
               lcall   big_delay
               mov     r6,#2ah     ; starting value of 69.8 deg F.
               lcall   resetlcd
               lcall   initlcd
               mov     a,#1
               mov     b,#0
               lcall   placecur
               lcall   prtlcd
               db      '* SELECT SETPOINTS *',0
               mov     a,#2
               mov     b,#0
               lcall   placecur
               lcall   prtlcd
               db      'HIGH TEMP =>',0; set up for high temp entry
up2:
               mov     a,#2            ; line #2 on lcd
               mov     b,#12           ; position #12 for temp entry
               lcall   placecur
               mov     a,r6            ; get high temp setting
               mov     r1,#00h
               lcall   look_up
               mov     a,#2
               mov     b,#18
               lcall   placecur
               lcall   prtlcd
               db      11011111b,01000110b,0
               mov     r4,#offcur
               lcall   wrlcdcom
               lcall   big_delay
               sjmp    up_or_down

up22:
               mov     a,#2
               mov     b,#12
               lcall   placecur
               mov     a,r6
               lcall   look_up
               lcall  

⌨️ 快捷键说明

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