📄 no3b.lst
字号:
000189 2e38 mov r3,r24
00018a ba4f out EEARH,r4 ;output address high for 8515
00018b ba3e out EEARL,r3 ;output address low for 8515
00018c bb7d out EEDR,r23 ;output data
00018d 9ae2 sbi EECR,EEMWE ;set master write enable, remove if 1200 is used
00018e 9ae1 sbi EECR,EEWE ;set EEPROM Write strobe
00018f 0000 nop ;This instruction takes 4 clock cycles since
000190 0000 nop ;it halts the CPU for two clock cycles
000191 0000 nop
000192 0000 nop
000193 9508 ret
readkey:
000194 ef0f ser r16
000195 bb07 out ddrb,r16
000196 9a95 sbi portd,5 ;初始化8279控制字
000197 9894 cbi portd,4
000198 e400 ldi r16,$40
000199 bb08 out portb,r16
00019a 9a94 sbi portd,4
00019b 9895 cbi portd,5
00019c 2700 clr r16
00019d bb07 out ddrb,r16
00019e bb08 out portb,r16
00019f 9893 cbi portd,3
0001a0 0000 nop
0001a1 b316 in r17,pinb
0001a2 9a95 sbi portd,5
0001a3 9a93 sbi portd,3
0001a4 ef0f ser r16
0001a5 bb07 out ddrb,r16
0001a6 9508 ret
0001a7 d014 setupxs:rcall cs8279 ;显示字符
0001a8 e60d ldi r16,$6d ;'S'
0001a9 d01b rcall outxs
0001aa e709 ldi r16,$79 ;'E'
0001ab d019 rcall outxs
0001ac e708 ldi r16,$78 ;'t'
0001ad d017 rcall outxs
0001ae e30e ldi r16,$3e ;'u'
0001af d015 rcall outxs
0001b0 e703 ldi r16,$73 ;'p'
0001b1 d013 rcall outxs
0001b2 9a95 sbi portd,5
0001b3 e546 ldi r20,$56 ;调用延时
0001b4 d288 rcall delay
0001b5 d006 rcall cs8279 ;显示温度设定
0001b6 e708 ldi r16,$78 ;'t'
0001b7 d00d rcall outxs
0001b8 e006 ldi r16,$06 ;'-'
0001b9 d00b rcall outxs
0001ba d013 rcall jy
0001bb 9508 ret
0001bc 9a95 cs8279: sbi portd,5 ;初始化8279控制字
0001bd 9894 cbi portd,4
0001be 9a93 sbi portd,3
0001bf e900 ldi r16,$90
0001c0 bb08 out portb,r16
0001c1 0000 nop
0001c2 9a94 sbi portd,4
0001c3 9895 cbi portd,5
0001c4 9508 ret
outxs: ;显示输出
0001c5 9894 cbi portd,4
0001c6 bb08 out portb,r16
0001c7 9a94 sbi portd,4
0001c8 9508 ret
beep:
0001c9 9896 cbi portd,6
0001ca e149 ldi r20,$19 ;调用延时
0001cb d271 rcall delay
0001cc 9a96 sbi portd,6
0001cd 9508 ret
0001ce e400 jy: ldi r16,$40 ;'-'
0001cf dff5 rcall outxs
0001d0 e400 ldi r16,$40 ;'-'
0001d1 dff3 rcall outxs
0001d2 e400 ldi r16,$40 ;'-'
0001d3 dff1 rcall outxs
0001d4 9a95 sbi portd,5
0001d5 9508 ret
0001d6 dfe5 showcs: rcall cs8279
0001d7 3080 cpi r24,$00 ;显示温度设定
0001d8 f431 brne csbsf1
0001d9 e708 ldi r16,$78 ;'t'
0001da dfea rcall outxs
0001db e006 ldi r16,$06 ;'1'
0001dc dfe8 rcall outxs
0001dd dff0 rcall jy
0001de 9508 ret
0001df 3081 csbsf1: cpi r24,$01 ;显示温度周期
0001e0 f431 brne csbsf2
0001e1 e60d ldi r16,$6d ;'s'
0001e2 dfe2 rcall outxs
0001e3 e006 ldi r16,$06 ;'1'
0001e4 dfe0 rcall outxs
0001e5 dfe8 rcall jy
0001e6 9508 ret
0001e7 3082 csbsf2: cpi r24,$02 ;显示湿度设定
0001e8 f431 brne csbsf3
0001e9 e706 ldi r16,$76 ;'h'
0001ea dfda rcall outxs
0001eb e006 ldi r16,$06 ;'1'
0001ec dfd8 rcall outxs
0001ed dfe0 rcall jy
0001ee 9508 ret
0001ef 3083 csbsf3: cpi r24,$03 ;显示湿度周期
0001f0 f431 brne csbsf4
0001f1 e60d ldi r16,$6d ;'s'
0001f2 dfd2 rcall outxs
0001f3 e50b ldi r16,$5b ;'2'
0001f4 dfd0 rcall outxs
0001f5 dfd8 rcall jy
0001f6 9508 ret
0001f7 3084 csbsf4: cpi r24,$04 ;显示P1
0001f8 f431 brne csbsf5
0001f9 e703 ldi r16,$73 ;'p'
0001fa dfca rcall outxs
0001fb e006 ldi r16,$06 ;'1'
0001fc dfc8 rcall outxs
0001fd dfd0 rcall jy
0001fe 9508 ret
0001ff 3085 csbsf5: cpi r24,$05 ;显示I1
000200 f431 brne csbsf6
000201 e300 ldi r16,$30 ;'i'
000202 dfc2 rcall outxs
000203 e006 ldi r16,$06 ;'1'
000204 dfc0 rcall outxs
000205 dfc8 rcall jy
000206 9508 ret
000207 3086 csbsf6: cpi r24,$06 ;显示D1
000208 f431 brne csbsf7
000209 e50e ldi r16,$5e ;'d'
00020a dfba rcall outxs
00020b e006 ldi r16,$06 ;'1'
00020c dfb8 rcall outxs
00020d dfc0 rcall jy
00020e 9508 ret
00020f 3087 csbsf7: cpi r24,$07 ;显示P2
000210 f431 brne csbsf8
000211 e703 ldi r16,$73 ;'p'
000212 dfb2 rcall outxs
000213 e50b ldi r16,$5b ;'2'
000214 dfb0 rcall outxs
000215 dfb8 rcall jy
000216 9508 ret
000217 3088 csbsf8: cpi r24,$08 ;显示I2
000218 f431 brne csbsf9
000219 e300 ldi r16,$30 ;'i'
00021a dfaa rcall outxs
00021b e50b ldi r16,$5b ;'2'
00021c dfa8 rcall outxs
00021d dfb0 rcall jy
00021e 9508 ret
00021f 3089 csbsf9: cpi r24,$09 ;显示D2
000220 f431 brne csbsfa
000221 e50e ldi r16,$5e ;'d'
000222 dfa2 rcall outxs
000223 e50b ldi r16,$5b ;'2'
000224 dfa0 rcall outxs
000225 dfa8 rcall jy
000226 9508 ret
000227 308a csbsfa: cpi r24,$a ;显示压力
000228 f431 brne csbsfb
000229 e703 ldi r16,$73 ;'p'
00022a df9a rcall outxs
00022b e700 ldi r16,$70 ;'r'
00022c df98 rcall outxs
00022d dfa0 rcall jy
00022e 9508 ret
00022f 308b csbsfb: cpi r24,$b ;显示凝节水温度
000230 f431 brne csbsfc
000231 e708 ldi r16,$78 ;'t'
000232 df92 rcall outxs
000233 e50b ldi r16,$5b ;'2'
000234 df90 rcall outxs
000235 df98 rcall jy
000236 9508 ret
000237 308c csbsfc: cpi r24,$c ;通讯站号
000238 f459 brne csbsfd
000239 e60d ldi r16,$6d ;'s'
00023a df8a rcall outxs
00023b e400 ldi r16,$40 ;'-'
00023c df88 rcall outxs
00023d e307 ldi r16,$37 ;'n'
00023e df86 rcall outxs
00023f e000 ldi r16,$00 ;''
000240 df84 rcall outxs
000241 e000 ldi r16,$00 ;''
000242 df82 rcall outxs
000243 9508 ret
000244 308d csbsfd: cpi r24,$d ;通讯传输频率
000245 f459 brne csbsfe
000246 e30e ldi r16,$3e ;'u'
000247 df7d rcall outxs
000248 e70c ldi r16,$7c ;'b'
000249 df7b rcall outxs
00024a e700 ldi r16,$70 ;'r'
00024b df79 rcall outxs
00024c e700 ldi r16,$70 ;'r'
00024d df77 rcall outxs
00024e e000 ldi r16,$00 ;''
00024f df75 rcall outxs
000250 9508 ret
000251 308e csbsfe: cpi r24,$e ;运行模式
000252 f451 brne tcret
000253 e707 ldi r16,$77 ;'a'
000254 df70 rcall outxs
000255 e10c ldi r16,$1c ;'u'
000256 df6e rcall outxs
000257 e708 ldi r16,$78 ;'t'
000258 df6c rcall outxs
000259 e50c ldi r16,$5c ;'o'
00025a df6a rcall outxs
00025b e000 ldi r16,$00 ;''
00025c df68 rcall outxs
00025d 9508 tcret: ret
;***** 参数计算子程序
00025e e4c8 cansujs:ldi yl,$48
00025f e0d1 ldi yh,$01 ;Y >>>0X0148
000260 e9e0 ldi zl,$90
000261 e0f0 ldi zh,$00 ;Z >>>0X0090
000262 8068 ld r6,y ;P1 l
000263 8079 ldd r7,y+1 ;P1 h
000264 d17f rcall btoh
000265 8240 st z,r4 ;P1 L>>>0X0090
000266 8251 std z+1,r5 ;P1 H>>>0X0091
000267 80ca ldd r12,y+2 ;I1 l
000268 80db ldd r13,y+3 ;I1 h
000269 808c ldd r8,y+4 ;D1 l
00026a 809d ldd r9,y+5 ;D1 h
00026b d039 rcall can01 ;I1+D1+1
00026c 8060 ld r6,z ;P1 L<<<0X0090
00026d 8071 ldd r7,z+1 ;P1 H<<<0X0091
00026e d045 rcall can02 ;保留两位小数
00026f 8262 std z+2,r6 ;A1 L>>>0X0092
000270 8273 std z+3,r7 ;A1 H>>>0X0093
000271 808c ldd r8,y+4 ;D1 l
000272 809d ldd r9,y+5 ;D1 h
000273 2cc8 mov r12,r8
000274 2cd9 mov r13,r9
000275 d02f rcall can01 ;D1+D1+1
000276 8060 ld r6,z ;P1 L<<<0X0090
000277 8071 ldd r7,z+1 ;P1 H<<<0X0091
000278 d03b rcall can02 ;保留两位小数
000279 8264 std z+4,r6 ;B1 L>>>0X0094
00027a 8275 std z+5,r7 ;B1 H>>>0X0095
00027b 806c ldd r6,y+4 ;D1 l
00027c 807d ldd r7,y+5 ;D1 h
00027d d166 rcall btoh
00027e 8060 ld r6,z ;P1 L<<<0X0090
00027f 8071 ldd r7,z+1 ;P1 H<<<0X0091
000280 d033 rcall can02 ;保留两位小数
000281 8266 std z+6,r6 ;C1 L>>>0X0096
000282 8277 std z+7,r7 ;C1 H>>>0X0097
000283 806e ldd r6,y+6 ;P2 l
000284 807f ldd r7,y+7 ;P2 h
000285 d15e rcall btoh
000286 8640 std z+8,r4 ;P2 L>>>0X0098
000287 8651 std z+9,r5 ;P2 H>>>0X0099
000288 84c8 ldd r12,y+8 ;I2 l
000289 84d9 ldd r13,y+9 ;I2 h
00028a 848a ldd r8,y+10 ;D2 l
00028b 849b ldd r9,y+11 ;D2 h
00028c d018 rcall can01 ;I2+D2+1
00028d 8460 ldd r6,z+8 ;P2 L<<<0X0098
00028e 8471 ldd r7,z+9 ;P2 H<<<0X0099
00028f d024 rcall can02 ;保留两位小数
000290 8662 std z+10,r6 ;A2 L>>>0X009a
000291 8673 std z+11,r7 ;A2 H>>>0X009b
000292 848a ldd r8,y+10 ;D2 l
000293 849b ldd r9,y+11 ;D2 h
000294 2cc8 mov r12,r8
000295 2cd9 mov r13,r9
000296 d00e rcall can01 ;D2+D2+1
000297 8460 ldd r6,z+8 ;P2 L<<<0X0098
000298 8471 ldd r7,z+9 ;P2 H<<<0X0099
000299 d01a rcall can02 ;保留两位小数
00029a 8664 std z+12,r6 ;B2 L>>>0X009c
00029b 8675 std z+13,r7 ;B2 H>>>0X009d
00029c 846a ldd r6,y+10 ;D2 l
00029d 847b ldd r7,y+11 ;D2 h
00029e d145 rcall btoh
00029f 8460 ldd r6,z+8 ;P2 L<<<0X0098
0002a0 8471 ldd r7,z+9 ;P2 H<<<0X0099
0002a1 d012 rcall can02 ;保留两位小数
0002a2 8666 std z+14,r6 ;C2 L>>>0X009e
0002a3 8677 std z+15,r7 ;C2 H>>>0X009f
0002a4 9508 ret
0002a5 24ff can01: clr r15
0002a6 24ee clr r14
0002a7 24bb clr r11
0002a8 24aa clr r10
0002a9 d0bc rcall adbcd ;I1+D1
0002aa 24bb clr r11
0002ab 24aa clr r10
0002ac 2499 clr r9
0002ad 2488 clr r8
0002ae 9493 inc r9
0002af d0b6 rcall adbcd ;I1+D1+1
0002b0 2c6c mov r6,r12
0002b1 2c7d mov r7,r13
0002b2 d131 rcall btoh
0002b3 9508 ret
0002b4 d0e9 can02: rcall mul16 ;P1*D1
0002b5 2455 clr r5
0002b6 e604 ldi r16,$64
0002b7 2e40 mov r4,r16
0002b8 d0f3 rcall div16 ;除100,保留两位小数
0002b9 9508 ret
;**********************
;********主程序********
;**********************
;.cseg
;.org 0x01b6
RESET:
0002ba e50f SYS: ldi R16,low(RAMEND) ;设置堆栈
0002bb bf0d out SPL,R16
0002bc e002 ldi R16,high(RAMEND)
0002bd bf0e out SPH,R16
;wdr ;看门狗复位
;ldi R16,$0F ;0b00001111
;out WDTCR,R16 ;狗周期2048MS
0002be 9a8e sbi ddrd,6
0002bf 9896 cbi portd,6
0002c0 ef08 ldi R16,$F8 ;0B11111000
0002c1 bb0a out DDRA,R16 ;A口0~2输入,3~7输出
0002c2 9ada sbi porta,2
0002c3 ef0a ldi R16,$FA ;0B11111110
0002c4 bb01 out DDRD,R16 ;D口0/2输入,1/3~7输出
0002c5 ef0f ldi R16,$FF ;0B11111111
0002c6 bb04 out DDRC,R16 ;C口输出
0002c7 bb07 out DDRB,R16 ;B口输出
0002c8 e208 ldi r16,$28 ;8279写控制寄存器
0002c9 bb02 out portd,r16
0002ca ed01 ldi r16,$d1 ;清8279寄存器
0002cb bb08 out portb,r16
0002cc 9a94 sbi portd,4
0002cd 2700 clr r16
0002ce bb07 out ddrb,r16
0002cf e300 ldi r16,$30
0002d0 bb02 out portd,r16
0002d1 9bc7 wait: sbis portb,7 ;等待清除结束
0002d2 cffe rjmp wait
0002d3 9894 cbi portd,4
0002d4 9a93 sbi portd,3
0002d5 ef0f ser r16
0002d6 bb07 out ddrb,r16
0002d7 2700 clr R16
0002d8 b907 out admux,R16 ;ADC 0通道
0002d9 e805 ldi R16,$85 ;设置ADC转换,中断触发,ADC为单次模式且32M分频
0002da b906 out adcsr,R16
0002db 9a34 sbi adcsr,adif ;写1复位中断为0
0002dc 9a36 sbi adcsr,6 ;启动ADC
0002dd 2788 clr r24 ;把EEP中的参数映射到SRAM的0X0140~0X014E处
0002de e0b1 ldi r27,$01
0002df e4a0 ldi r26,$40
0002e0 99e1 EEpRead:sbic EECR,EEWE ;if EEWE not clear
0002e1 cffe rjmp EEpRead
0002e2 e001 ldi r16,$01
0002e3 bb0f out EEARH,r16 ;output address high for 8515
0002e4 bb8e out EEARL,r24 ;output address low for 8515
0002e5 9ae0 sbi EECR,EERE ;set EEPROM Read strobe
0002e6 b30d in r16,EEDR ;get data
0002e7 930d st x+,r16
0002e8 9583 inc r24
0002e9 308f cpi r24,$0f
0002ea f7a9 brne EEpRead
0002eb df72 rcall cansujs ;^^^^^^^^^^^^^^^^^^^^
0002ec e908 ldi r16,$98 ;初始化COM
0002ed b90a out ucr,r16 ;设置UART控制寄存器---UCR
0002ee e5aa ldi r26,$5a ;波特率在SRAM的0x015a处
0002ef 910c ld r16,x
;ldi r16,25
0002f0 b909 out ubrr,r16 ;设置UART波特率
0002f1 e003 ldi r16,$3 ;INT0上升沿触发 0b00000011
0002f2 bf05 out mcucr,r16
0002f3 e400 ldi r16,$40
0002f4 bf0b out GIMSK,R16 ;INT0可用,INT1屏蔽 0b01000000
0002f5 bf0a out GIFR,r16
0002f6 9478 sei
0002f7 9894 cbi portd,4
0002f8 e000 ldi r16,$00 ;8279键盘显示方式初始
0002f9 bb08 out portb,r16
0002fa 9a94 sbi portd,4
0002fb 0000 nop
0002fc 9894 cbi portd,4
0002fd e202 ldi r16,$22 ;8279时钟分频=2
0002fe bb08 out portb,r16
0002ff 9a94 sbi portd,4
000300 debb rcall cs8279 ;显示字符
000301 e400 ldi r16,$40 ;'-'
000302 dec2 rcall outxs
000303 e441 ldi r20,$41 ;调用延时
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -