📄 no3a.lst
字号:
00014d 96df adiw r26,63 ;通道号+$40=xl
00014e e0b1 ldi r27,$01 ;xh=$01
00014f 910d ld r16,x+ ;eep映射参数低字节
000150 911c ld r17,x
;rcall tdhpd ;根据通道号判断是否需转换成BCD码
000151 3081 cpi r24,$01
000152 f411 brne left3 ;r24<>1则需转换
000153 950a dec r16 ;单字节EEP参数
000154 c001 rjmp left4
000155 e000 left3: ldi r16,$0;1 ;000000
;rcall subcd ;BCD码减法
;rcall tzbcd ;BCD码调整
000156 d231 left4: rcall display;1
000157 9309 st y+,r16
000158 8318 st y,r17
000159 cf78 left5: rjmp kqt
00015a d081 keydown:rcall beep ;键盘RIGHT
00015b 3090 cpi r25,$0
00015c f0d9 breq right5
00015d e0d1 ldi r29,$01 ;yh=$01
00015e e9cd ldi r28,$9d ;yl=$9d
00015f 81a8 ld r26,y ;通道号在r26
000160 3091 cpi r25,$01
000161 f439 brne right2
000162 9612 adiw r26,$02
000163 31ae cpi r26,$1e
000164 f409 brne right1
000165 e0a0 ldi r26,$0
000166 93a9 right1: st y+,r26 ;保存通道号到0x019d
000167 d081 rcall showcs ;显示通道标示
000168 cf69 rjmp kqt
000169 3092 right2: cpi r25,$02
00016a f469 brne right5
00016b 95a3 inc r26
00016c 96df adiw r26,63 ;通道号+$40=xl
00016d e0b1 ldi r27,$01 ;xh=$01
00016e 910d ld r16,x+ ;eep映射参数低字节
00016f 911c ld r17,x
;rcall tdhpd ;根据通道号判断是否需转换成BCD码
000170 3081 cpi r24,$01
000171 f411 brne right3 ;r24<>1则需转换
000172 9503 inc r16 ;单字节EEP参数
000173 c001 rjmp right4
000174 e000 right3: ldi r16,$0;1 ;0000000
;rcall adbcd ;BCD码加法
;rcall tzbcd ;BCD码调整
000175 d212 right4: rcall display;1
000176 9309 st y+,r16
000177 8318 st y,r17
000178 cf59 right5: rjmp kqt
000179 2e47 xsgy: mov res1,r23
00017a e000 ldi r16,$00
00017b 2e50 mov res2,r16
00017c d1ea rcall htd3
00017d 9a95 sbi portd,5 ;初始化8279控制字
00017e 9894 cbi portd,4
00017f 9a93 sbi portd,3
000180 e901 ldi r16,$91
000181 bb08 out portb,r16
000182 0000 nop
000183 9a94 sbi portd,4
000184 9895 cbi portd,5
000185 2d07 mov r16,cnt2d
000186 d227 rcall outpd
000187 2d06 mov r16,cnt1d
000188 9502 swap r16
000189 d224 rcall outpd
00018a 2d06 mov r16,cnt1d
00018b d222 rcall outpd
00018c 9a95 sbi portd,5
00018d 9508 ret
00018e 99e1 EERead: sbic EECR,EEWE ;if EEWE not clear
00018f cffe rjmp EERead
000190 e001 ldi r16,$01
000191 2e40 mov r4,r16
000192 2e38 mov r3,r24 ; wait more
000193 ba4f out EEARH,r4 ;output address high for 8515
000194 ba3e out EEARL,r3 ;output address low for 8515
000195 9ae0 sbi EECR,EERE ;set EEPROM Read strobe
;This instruction takes 4 clock cycles since
;it halts the CPU for two clock cycles
000196 b30d in r16,EEDR ;get data
000197 9508 ret
000198 99e1 EEWrite:sbic EECR,EEWE ;if EEWE not clear
000199 cffe rjmp EEWrite ; wait more
00019a e001 ldi r16,$01
00019b 2e40 mov r4,r16
00019c 2e38 mov r3,r24
00019d ba4f out EEARH,r4 ;output address high for 8515
00019e ba3e out EEARL,r3 ;output address low for 8515
00019f bb7d out EEDR,r23 ;output data
0001a0 9ae2 sbi EECR,EEMWE ;set master write enable, remove if 1200 is used
0001a1 9ae1 sbi EECR,EEWE ;set EEPROM Write strobe
0001a2 0000 nop ;This instruction takes 4 clock cycles since
0001a3 0000 nop ;it halts the CPU for two clock cycles
0001a4 0000 nop
0001a5 0000 nop
0001a6 9508 ret
readkey:
0001a7 ef0f ser r16
0001a8 bb07 out ddrb,r16
0001a9 9a95 sbi portd,5 ;初始化8279控制字
0001aa 9894 cbi portd,4
0001ab e400 ldi r16,$40
0001ac bb08 out portb,r16
0001ad 9a94 sbi portd,4
0001ae 9895 cbi portd,5
0001af 2700 clr r16
0001b0 bb07 out ddrb,r16
0001b1 bb08 out portb,r16
0001b2 9893 cbi portd,3
0001b3 0000 nop
0001b4 b316 in r17,pinb
0001b5 9a95 sbi portd,5
0001b6 9a93 sbi portd,3
0001b7 ef0f ser r16
0001b8 bb07 out ddrb,r16
0001b9 9508 ret
0001ba d014 setupxs:rcall cs8279 ;显示字符
0001bb e60d ldi r16,$6d ;'S'
0001bc d01b rcall outxs
0001bd e709 ldi r16,$79 ;'E'
0001be d019 rcall outxs
0001bf e708 ldi r16,$78 ;'t'
0001c0 d017 rcall outxs
0001c1 e30e ldi r16,$3e ;'u'
0001c2 d015 rcall outxs
0001c3 e703 ldi r16,$73 ;'p'
0001c4 d013 rcall outxs
0001c5 9a95 sbi portd,5
0001c6 e546 ldi r20,$56 ;调用延时
0001c7 d1ef rcall delay
0001c8 d006 rcall cs8279 ;显示温度设定
0001c9 e708 ldi r16,$78 ;'t'
0001ca d00d rcall outxs
0001cb e006 ldi r16,$06 ;'-'
0001cc d00b rcall outxs
0001cd d013 rcall jy
0001ce 9508 ret
0001cf 9a95 cs8279: sbi portd,5 ;初始化8279控制字
0001d0 9894 cbi portd,4
0001d1 9a93 sbi portd,3
0001d2 e900 ldi r16,$90
0001d3 bb08 out portb,r16
0001d4 0000 nop
0001d5 9a94 sbi portd,4
0001d6 9895 cbi portd,5
0001d7 9508 ret
outxs: ;显示输出
0001d8 9894 cbi portd,4
0001d9 bb08 out portb,r16
0001da 9a94 sbi portd,4
0001db 9508 ret
beep:
0001dc 9a96 sbi portd,6
0001dd e149 ldi r20,$19 ;调用延时
0001de d1d8 rcall delay
0001df 9896 cbi portd,6
0001e0 9508 ret
0001e1 e400 jy: ldi r16,$40 ;'-'
0001e2 dff5 rcall outxs
0001e3 e400 ldi r16,$40 ;'-'
0001e4 dff3 rcall outxs
0001e5 e400 ldi r16,$40 ;'-'
0001e6 dff1 rcall outxs
0001e7 9a95 sbi portd,5
0001e8 9508 ret
0001e9 dfe5 showcs: rcall cs8279
0001ea 3080 cpi r24,$00 ;显示温度设定
0001eb f431 brne csbsf1
0001ec e708 ldi r16,$78 ;'t'
0001ed dfea rcall outxs
0001ee e006 ldi r16,$06 ;'1'
0001ef dfe8 rcall outxs
0001f0 dff0 rcall jy
0001f1 9508 ret
0001f2 3081 csbsf1: cpi r24,$01 ;显示温度周期
0001f3 f431 brne csbsf2
0001f4 e60d ldi r16,$6d ;'s'
0001f5 dfe2 rcall outxs
0001f6 e006 ldi r16,$06 ;'1'
0001f7 dfe0 rcall outxs
0001f8 dfe8 rcall jy
0001f9 9508 ret
0001fa 3082 csbsf2: cpi r24,$02 ;显示湿度设定
0001fb f431 brne csbsf3
0001fc e706 ldi r16,$76 ;'h'
0001fd dfda rcall outxs
0001fe e006 ldi r16,$06 ;'1'
0001ff dfd8 rcall outxs
000200 dfe0 rcall jy
000201 9508 ret
000202 3083 csbsf3: cpi r24,$03 ;显示湿度周期
000203 f431 brne csbsf4
000204 e60d ldi r16,$6d ;'s'
000205 dfd2 rcall outxs
000206 e50b ldi r16,$5b ;'2'
000207 dfd0 rcall outxs
000208 dfd8 rcall jy
000209 9508 ret
00020a 3084 csbsf4: cpi r24,$04 ;显示P1
00020b f431 brne csbsf5
00020c e703 ldi r16,$73 ;'p'
00020d dfca rcall outxs
00020e e006 ldi r16,$06 ;'1'
00020f dfc8 rcall outxs
000210 dfd0 rcall jy
000211 9508 ret
000212 3085 csbsf5: cpi r24,$05 ;显示I1
000213 f431 brne csbsf6
000214 e300 ldi r16,$30 ;'i'
000215 dfc2 rcall outxs
000216 e006 ldi r16,$06 ;'1'
000217 dfc0 rcall outxs
000218 dfc8 rcall jy
000219 9508 ret
00021a 3086 csbsf6: cpi r24,$06 ;显示D1
00021b f431 brne csbsf7
00021c e50e ldi r16,$5e ;'d'
00021d dfba rcall outxs
00021e e006 ldi r16,$06 ;'1'
00021f dfb8 rcall outxs
000220 dfc0 rcall jy
000221 9508 ret
000222 3087 csbsf7: cpi r24,$07 ;显示P2
000223 f431 brne csbsf8
000224 e703 ldi r16,$73 ;'p'
000225 dfb2 rcall outxs
000226 e50b ldi r16,$5b ;'2'
000227 dfb0 rcall outxs
000228 dfb8 rcall jy
000229 9508 ret
00022a 3088 csbsf8: cpi r24,$08 ;显示I2
00022b f431 brne csbsf9
00022c e300 ldi r16,$30 ;'i'
00022d dfaa rcall outxs
00022e e50b ldi r16,$5b ;'2'
00022f dfa8 rcall outxs
000230 dfb0 rcall jy
000231 9508 ret
000232 3089 csbsf9: cpi r24,$09 ;显示D2
000233 f431 brne csbsfa
000234 e50e ldi r16,$5e ;'d'
000235 dfa2 rcall outxs
000236 e50b ldi r16,$5b ;'2'
000237 dfa0 rcall outxs
000238 dfa8 rcall jy
000239 9508 ret
00023a 308a csbsfa: cpi r24,$a ;显示压力
00023b f431 brne csbsfb
00023c e703 ldi r16,$73 ;'p'
00023d df9a rcall outxs
00023e e700 ldi r16,$70 ;'r'
00023f df98 rcall outxs
000240 dfa0 rcall jy
000241 9508 ret
000242 308b csbsfb: cpi r24,$b ;显示凝节水温度
000243 f431 brne csbsfc
000244 e708 ldi r16,$78 ;'t'
000245 df92 rcall outxs
000246 e50b ldi r16,$5b ;'2'
000247 df90 rcall outxs
000248 df98 rcall jy
000249 9508 ret
00024a 308c csbsfc: cpi r24,$c ;通讯站号
00024b f459 brne csbsfd
00024c e60d ldi r16,$6d ;'s'
00024d df8a rcall outxs
00024e e400 ldi r16,$40 ;'-'
00024f df88 rcall outxs
000250 e307 ldi r16,$37 ;'n'
000251 df86 rcall outxs
000252 e000 ldi r16,$00 ;''
000253 df84 rcall outxs
000254 e000 ldi r16,$00 ;''
000255 df82 rcall outxs
000256 9508 ret
000257 308d csbsfd: cpi r24,$d ;通讯传输频率
000258 f459 brne csbsfe
000259 e30e ldi r16,$3e ;'u'
00025a df7d rcall outxs
00025b e70c ldi r16,$7c ;'b'
00025c df7b rcall outxs
00025d e700 ldi r16,$70 ;'r'
00025e df79 rcall outxs
00025f e700 ldi r16,$70 ;'r'
000260 df77 rcall outxs
000261 e000 ldi r16,$00 ;''
000262 df75 rcall outxs
000263 9508 ret
000264 308e csbsfe: cpi r24,$e ;运行模式
000265 f451 brne tcret
000266 e707 ldi r16,$77 ;'a'
000267 df70 rcall outxs
000268 e10c ldi r16,$1c ;'u'
000269 df6e rcall outxs
00026a e708 ldi r16,$78 ;'t'
00026b df6c rcall outxs
00026c e50c ldi r16,$5c ;'o'
00026d df6a rcall outxs
00026e e000 ldi r16,$00 ;''
00026f df68 rcall outxs
000270 9508 tcret: ret
;**********************
;********主程序********
;**********************
;.cseg
;.org 0x01b6
RESET:
000271 e50f SYS: ldi R16,low(RAMEND) ;设置堆栈
000272 bf0d out SPL,R16
000273 e002 ldi R16,high(RAMEND)
000274 bf0e out SPH,R16
;wdr ;看门狗复位
;ldi R16,$0F ;0b00001111
;out WDTCR,R16 ;狗周期2048MS
000275 9a8e sbi ddrd,6
000276 9896 cbi portd,6
000277 ef08 ldi R16,$F8 ;0B11111000
000278 bb0a out DDRA,R16 ;A口0~2输入,3~7输出
000279 9ada sbi porta,2
00027a ef0a ldi R16,$FA ;0B11111110
00027b bb01 out DDRD,R16 ;D口0/2输入,1/3~7输出
00027c ef0f ldi R16,$FF ;0B11111111
00027d bb04 out DDRC,R16 ;C口输出
00027e bb07 out DDRB,R16 ;B口输出
00027f e208 ldi r16,$28 ;8279写控制寄存器
000280 bb02 out portd,r16
000281 ed01 ldi r16,$d1 ;清8279寄存器
000282 bb08 out portb,r16
000283 9a94 sbi portd,4
000284 2700 clr r16
000285 bb07 out ddrb,r16
000286 e300 ldi r16,$30
000287 bb02 out portd,r16
000288 9bc7 wait: sbis portb,7 ;等待清除结束
000289 cffe rjmp wait
00028a 9894 cbi portd,4
00028b 9a93 sbi portd,3
00028c ef0f ser r16
00028d bb07 out ddrb,r16
00028e 2700 clr R16
00028f b907 out admux,R16 ;ADC 0通道
000290 e805 ldi R16,$85 ;设置ADC转换,中断触发,ADC为单次模式且32M分频
000291 b906 out adcsr,R16
000292 9a34 sbi adcsr,adif ;写1复位中断为0
000293 9a36 sbi adcsr,6 ;启动ADC
000294 2788 clr r24 ;把EEP中的参数映射到SRAM的0X0140~0X014E处
000295 e0b1 ldi r27,$01
000296 e4a0 ldi r26,$40
000297 99e1 EEpRead:sbic EECR,EEWE ;if EEWE not clear
000298 cffe rjmp EEpRead
000299 e001 ldi r16,$01
00029a bb0f out EEARH,r16 ;output address high for 8515
00029b bb8e out EEARL,r24 ;output address low for 8515
00029c 9ae0 sbi EECR,EERE ;set EEPROM Read strobe
00029d b30d in r16,EEDR ;get data
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -