📄 dout.lst
字号:
000134 3091 kqt2: cpi r25,$01
000135 f429 brne to1
000136 9583 inc r24
000137 308f cpi r24,$f
000138 f43c brge lp3 ;r24>=$c 跳转
000139 d078 lp4: rcall showcs
00013a cfa8 rjmp intr
00013b 3092 to1: cpi r25,$02
00013c f791 brne tczgc
00013d 9573 inc r23
00013e d003 rcall xsgy
00013f cfa3 rjmp intr
000140 e080 lp3: ldi r24,$00
000141 cff7 rjmp lp4
000142 2e47 xsgy: mov res1,r23
000143 e000 ldi r16,$00
000144 2e50 mov res2,r16
000145 d1e8 rcall htd3
000146 9a95 sbi portd,5 ;初始化8279控制字
000147 9894 cbi portd,4
000148 9a93 sbi portd,3
000149 e901 ldi r16,$91
00014a bb08 out portb,r16
00014b 0000 nop
00014c 9a94 sbi portd,4
00014d 9895 cbi portd,5
00014e 2d07 mov r16,cnt2d
00014f d225 rcall outpd
000150 2d06 mov r16,cnt1d
000151 9502 swap r16
000152 d222 rcall outpd
000153 2d06 mov r16,cnt1d
000154 d220 rcall outpd
000155 9a95 sbi portd,5
000156 9508 ret
EERead:
000157 99e1 sbic EECR,EEWE ;if EEWE not clear
000158 cffe rjmp EERead
000159 e001 ldi r16,$01
00015a 2e40 mov r4,r16
00015b 2e38 mov r3,r24 ; wait more
00015c ba4f out EEARH,r4 ;output address high for 8515
00015d ba3e out EEARL,r3 ;output address low for 8515
00015e 9ae0 sbi EECR,EERE ;set EEPROM Read strobe
;This instruction takes 4 clock cycles since
;it halts the CPU for two clock cycles
00015f b30d in r16,EEDR ;get data
000160 9508 ret
EEWrite:
000161 99e1 sbic EECR,EEWE ;if EEWE not clear
000162 cffe rjmp EEWrite ; wait more
000163 e001 ldi r16,$01
000164 2e40 mov r4,r16
000165 2e38 mov r3,r24
000166 ba4f out EEARH,r4 ;output address high for 8515
000167 ba3e out EEARL,r3 ;output address low for 8515
000168 bb7d out EEDR,r23 ;output data
000169 9ae2 sbi EECR,EEMWE ;set master write enable, remove if 1200 is used
00016a 9ae1 sbi EECR,EEWE ;set EEPROM Write strobe
00016b 0000 nop ;This instruction takes 4 clock cycles since
00016c 0000 nop ;it halts the CPU for two clock cycles
00016d 0000 nop
00016e 0000 nop
00016f 9508 ret
readkey:
000170 ef0f ser r16
000171 bb07 out ddrb,r16
000172 9a95 sbi portd,5 ;初始化8279控制字
000173 9894 cbi portd,4
000174 e400 ldi r16,$40
000175 bb08 out portb,r16
000176 9a94 sbi portd,4
000177 9895 cbi portd,5
000178 2700 clr r16
000179 bb07 out ddrb,r16
00017a bb08 out portb,r16
00017b 9893 cbi portd,3
00017c 0000 nop
00017d b316 in r17,pinb
00017e 9a95 sbi portd,5
00017f 9a93 sbi portd,3
000180 ef0f ser r16
000181 bb07 out ddrb,r16
000182 9508 kqt1: ret
000183 d014 setupxs:rcall cs8279 ;显示字符
000184 e60d ldi r16,$6d ;'S'
000185 d01b rcall outxs
000186 e709 ldi r16,$79 ;'E'
000187 d019 rcall outxs
000188 e708 ldi r16,$78 ;'t'
000189 d017 rcall outxs
00018a e30e ldi r16,$3e ;'u'
00018b d015 rcall outxs
00018c e703 ldi r16,$73 ;'p'
00018d d013 rcall outxs
00018e 9a95 sbi portd,5
00018f e546 ldi r20,$56 ;调用延时
000190 d1fb rcall delay
000191 d006 rcall cs8279 ;显示温度设定
000192 e708 ldi r16,$78 ;'t'
000193 d00d rcall outxs
000194 e006 ldi r16,$06 ;'-'
000195 d00b rcall outxs
000196 d013 rcall jy
000197 9508 ret
000198 9a95 cs8279: sbi portd,5 ;初始化8279控制字
000199 9894 cbi portd,4
00019a 9a93 sbi portd,3
00019b e900 ldi r16,$90
00019c bb08 out portb,r16
00019d 0000 nop
00019e 9a94 sbi portd,4
00019f 9895 cbi portd,5
0001a0 9508 ret
outxs: ;显示输出
0001a1 9894 cbi portd,4
0001a2 bb08 out portb,r16
0001a3 9a94 sbi portd,4
0001a4 9508 ret
beep:
0001a5 9896 cbi portd,6
0001a6 e149 ldi r20,$19 ;调用延时
0001a7 d1e4 rcall delay
0001a8 9a96 sbi portd,6
0001a9 9508 ret
0001aa e400 jy: ldi r16,$40 ;'-'
0001ab dff5 rcall outxs
0001ac e400 ldi r16,$40 ;'-'
0001ad dff3 rcall outxs
0001ae e400 ldi r16,$40 ;'-'
0001af dff1 rcall outxs
0001b0 9a95 sbi portd,5
0001b1 9508 ret
0001b2 dfe5 showcs: rcall cs8279
0001b3 3080 cpi r24,$00 ;显示温度设定
0001b4 f431 brne csbsf1
0001b5 e708 ldi r16,$78 ;'t'
0001b6 dfea rcall outxs
0001b7 e006 ldi r16,$06 ;'1'
0001b8 dfe8 rcall outxs
0001b9 dff0 rcall jy
0001ba 9508 ret
0001bb 3081 csbsf1: cpi r24,$01 ;显示温度周期
0001bc f431 brne csbsf2
0001bd e60d ldi r16,$6d ;'s'
0001be dfe2 rcall outxs
0001bf e006 ldi r16,$06 ;'1'
0001c0 dfe0 rcall outxs
0001c1 dfe8 rcall jy
0001c2 9508 ret
0001c3 3082 csbsf2: cpi r24,$02 ;显示湿度设定
0001c4 f431 brne csbsf3
0001c5 e706 ldi r16,$76 ;'h'
0001c6 dfda rcall outxs
0001c7 e006 ldi r16,$06 ;'1'
0001c8 dfd8 rcall outxs
0001c9 dfe0 rcall jy
0001ca 9508 ret
0001cb 3083 csbsf3: cpi r24,$03 ;显示湿度周期
0001cc f431 brne csbsf4
0001cd e60d ldi r16,$6d ;'s'
0001ce dfd2 rcall outxs
0001cf e50b ldi r16,$5b ;'2'
0001d0 dfd0 rcall outxs
0001d1 dfd8 rcall jy
0001d2 9508 ret
0001d3 3084 csbsf4: cpi r24,$04 ;显示P1
0001d4 f431 brne csbsf5
0001d5 e703 ldi r16,$73 ;'p'
0001d6 dfca rcall outxs
0001d7 e006 ldi r16,$06 ;'1'
0001d8 dfc8 rcall outxs
0001d9 dfd0 rcall jy
0001da 9508 ret
0001db 3085 csbsf5: cpi r24,$05 ;显示I1
0001dc f431 brne csbsf6
0001dd e300 ldi r16,$30 ;'i'
0001de dfc2 rcall outxs
0001df e006 ldi r16,$06 ;'1'
0001e0 dfc0 rcall outxs
0001e1 dfc8 rcall jy
0001e2 9508 ret
0001e3 3086 csbsf6: cpi r24,$06 ;显示D1
0001e4 f431 brne csbsf7
0001e5 e50e ldi r16,$5e ;'d'
0001e6 dfba rcall outxs
0001e7 e006 ldi r16,$06 ;'1'
0001e8 dfb8 rcall outxs
0001e9 dfc0 rcall jy
0001ea 9508 ret
0001eb 3087 csbsf7: cpi r24,$07 ;显示P2
0001ec f431 brne csbsf8
0001ed e703 ldi r16,$73 ;'p'
0001ee dfb2 rcall outxs
0001ef e50b ldi r16,$5b ;'2'
0001f0 dfb0 rcall outxs
0001f1 dfb8 rcall jy
0001f2 9508 ret
0001f3 3088 csbsf8: cpi r24,$08 ;显示I2
0001f4 f431 brne csbsf9
0001f5 e300 ldi r16,$30 ;'i'
0001f6 dfaa rcall outxs
0001f7 e50b ldi r16,$5b ;'2'
0001f8 dfa8 rcall outxs
0001f9 dfb0 rcall jy
0001fa 9508 ret
0001fb 3089 csbsf9: cpi r24,$09 ;显示D2
0001fc f431 brne csbsfa
0001fd e50e ldi r16,$5e ;'d'
0001fe dfa2 rcall outxs
0001ff e50b ldi r16,$5b ;'2'
000200 dfa0 rcall outxs
000201 dfa8 rcall jy
000202 9508 ret
000203 308a csbsfa: cpi r24,$a ;显示压力
000204 f431 brne csbsfb
000205 e703 ldi r16,$73 ;'p'
000206 df9a rcall outxs
000207 e700 ldi r16,$70 ;'r'
000208 df98 rcall outxs
000209 dfa0 rcall jy
00020a 9508 ret
00020b 308b csbsfb: cpi r24,$b ;显示凝节水温度
00020c f431 brne csbsfc
00020d e708 ldi r16,$78 ;'t'
00020e df92 rcall outxs
00020f e50b ldi r16,$5b ;'2'
000210 df90 rcall outxs
000211 df98 rcall jy
000212 9508 ret
000213 308c csbsfc: cpi r24,$c ;通讯站号
000214 f459 brne csbsfd
000215 e60d ldi r16,$6d ;'s'
000216 df8a rcall outxs
000217 e400 ldi r16,$40 ;'-'
000218 df88 rcall outxs
000219 e307 ldi r16,$37 ;'n'
00021a df86 rcall outxs
00021b e000 ldi r16,$00 ;''
00021c df84 rcall outxs
00021d e000 ldi r16,$00 ;''
00021e df82 rcall outxs
00021f 9508 ret
000220 308d csbsfd: cpi r24,$d ;通讯传输频率
000221 f459 brne csbsfe
000222 e30e ldi r16,$3e ;'u'
000223 df7d rcall outxs
000224 e70c ldi r16,$7c ;'b'
000225 df7b rcall outxs
000226 e700 ldi r16,$70 ;'r'
000227 df79 rcall outxs
000228 e700 ldi r16,$70 ;'r'
000229 df77 rcall outxs
00022a e000 ldi r16,$00 ;''
00022b df75 rcall outxs
00022c 9508 ret
00022d 308e csbsfe: cpi r24,$e ;运行模式
00022e f451 brne tcret
00022f e707 ldi r16,$77 ;'a'
000230 df70 rcall outxs
000231 e10c ldi r16,$1c ;'u'
000232 df6e rcall outxs
000233 e708 ldi r16,$78 ;'t'
000234 df6c rcall outxs
000235 e50c ldi r16,$5c ;'o'
000236 df6a rcall outxs
000237 e000 ldi r16,$00 ;''
000238 df68 rcall outxs
000239 9508 tcret: ret
;**********************
;********主程序********
;**********************
;.cseg
;.org 0x01b6
RESET:
00023a e50f SYS: ldi R16,low(RAMEND) ;设置堆栈
00023b bf0d out SPL,R16
00023c e002 ldi R16,high(RAMEND)
00023d bf0e out SPH,R16
;wdr ;看门狗复位
;ldi R16,$0F ;0b00001111
;out WDTCR,R16 ;狗周期2048MS
00023e ef08 ldi R16,$F8 ;0B11111000
00023f bb0a out DDRA,R16 ;A口0~2输入,3~7输出
000240 9ada sbi porta,2
000241 ef0a ldi R16,$FA ;0B11111110
000242 bb01 out DDRD,R16 ;D口0/2输入,1/3~7输出
000243 ef0f ldi R16,$FF ;0B11111111
000244 bb04 out DDRC,R16 ;C口输出
000245 bb07 out DDRB,R16 ;B口输出
000246 e208 ldi r16,$28 ;8279写控制寄存器
000247 bb02 out portd,r16
000248 ed01 ldi r16,$d1 ;清8279寄存器
000249 bb08 out portb,r16
00024a 9a94 sbi portd,4
00024b 2700 clr r16
00024c bb07 out ddrb,r16
00024d e300 ldi r16,$30
00024e bb02 out portd,r16
00024f 9bc7 wait: sbis portb,7 ;等待清除结束
000250 cffe rjmp wait
000251 9894 cbi portd,4
000252 9a93 sbi portd,3
000253 ef0f ser r16
000254 bb07 out ddrb,r16
000255 2700 clr R16
000256 b907 out admux,R16 ;ADC 0通道
000257 e805 ldi R16,$85 ;设置ADC转换,中断触发,ADC为单次模式且32M分频
000258 b906 out adcsr,R16
000259 9a34 sbi adcsr,adif ;写1复位中断为0
00025a 9a36 sbi adcsr,6 ;启动ADC
00025b 2788 clr r24 ;把EEP中的参数映射到SRAM的0X0140~0X014E处
00025c e0b1 ldi r27,$01
00025d e4a0 ldi r26,$40
00025e 99e1 EEpRead:sbic EECR,EEWE ;if EEWE not clear
00025f cffe rjmp EEpRead
000260 e001 ldi r16,$01
000261 bb0f out EEARH,r16 ;output address high for 8515
000262 bb8e out EEARL,r24 ;output address low for 8515
000263 9ae0 sbi EECR,EERE ;set EEPROM Read strobe
000264 b30d in r16,EEDR ;get data
000265 930d st x+,r16
000266 9583 inc r24
000267 308f cpi r24,$0f
000268 f7a9 brne EEpRead
;rcall cansujs ;^^^^^^^^^^^^^^^^^^^^
000269 e908 ldi r16,$98 ;初始化COM
00026a b90a out ucr,r16 ;设置UART控制寄存器---UCR
00026b 50a2 subi r26,$02
00026c 910c ld r16,x
;ldi r16,25
00026d b909 out ubrr,r16 ;设置UART波特率
00026e 2411 clr r1
00026f e003 ldi r16,$3 ;INT0上升沿触发 0b00000011
000270 bf05 out mcucr,r16
000271 e400 ldi r16,$40
000272 bf0b out GIMSK,R16 ;INT0可用,INT1屏蔽 0b01000000
000273 bf0a out GIFR,r16
000274 9478 sei
000275 9894 cbi portd,4
000276 e000 ldi r16,$00 ;8279键盘显示方式初始
000277 bb08 out portb,r16
000278 9a94 sbi portd,4
000279 0000 nop
00027a 9894 cbi portd,4
00027b e202 ldi r16,$22 ;8279时钟分频=2
00027c bb08 out portb,r16
00027d 9a94 sbi portd,4
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -