intmcu.lis
来自「工业开关量检测模块的原代码,带断线检测功能」· LIS 代码 · 共 862 行 · 第 1/3 页
LIS
862 行
0302 ; data_tranfer(); //刷新DI_data_cur[]的值
0302 01D0 xcall _data_tranfer
0304 .dbline -2
0304 L2:
0304 .dbline 0 ; func end
0304 0895 ret
0306 .dbend
0306 .dbfunc e data_tranfer _data_tranfer fV
0306 ; j -> R20
0306 ; i -> R22
.even
0306 _data_tranfer::
0306 0E940000 xcall push_gset2
030A .dbline -1
030A .dbline 172
030A ;
030A ; }
030A ;
030A ;
030A ; void data_tranfer(void)
030A ; {
030A .dbline 175
030A ; unsigned char i,j;
030A ;
030A ; for(j=0;j<3;j++)
030A 4427 clr R20
030C 68C0 xjmp L87
030E L84:
030E .dbline 176
030E ; {
030E .dbline 177
030E ; for(i=0;i<8;i=i+2)
030E 6627 clr R22
0310 62C0 xjmp L91
0312 L88:
0312 .dbline 178
0312 ; {
0312 .dbline 179
0312 ; if(((DI_Status[j]>>i) & 0x03) == 0x03)
0312 80E0 ldi R24,<_DI_Status
0314 90E0 ldi R25,>_DI_Status
0316 E42F mov R30,R20
0318 FF27 clr R31
031A E80F add R30,R24
031C F91F adc R31,R25
031E 0081 ldd R16,z+0
0320 162F mov R17,R22
0322 0E940000 xcall lsr8
0326 802F mov R24,R16
0328 8370 andi R24,3
032A 8330 cpi R24,3
032C 99F4 brne L92
032E .dbline 180
032E ; DI_data_cur[(j<<2)+(i>>1)] = 0x5a;
032E 262E mov R2,R22
0330 3324 clr R3
0332 3594 asr R3
0334 2794 ror R2
0336 E42F mov R30,R20
0338 FF27 clr R31
033A EE0F lsl R30
033C FF1F rol R31
033E EE0F lsl R30
0340 FF1F rol R31
0342 E20D add R30,R2
0344 F31D adc R31,R3
0346 80E0 ldi R24,<_DI_data_cur
0348 90E0 ldi R25,>_DI_data_cur
034A E80F add R30,R24
034C F91F adc R31,R25
034E 8AE5 ldi R24,90
0350 8083 std z+0,R24
0352 40C0 xjmp L93
0354 L92:
0354 .dbline 181
0354 ; else if(((DI_Status[j]>>i) & 0x03) == 0x00)
0354 80E0 ldi R24,<_DI_Status
0356 90E0 ldi R25,>_DI_Status
0358 E42F mov R30,R20
035A FF27 clr R31
035C E80F add R30,R24
035E F91F adc R31,R25
0360 0081 ldd R16,z+0
0362 162F mov R17,R22
0364 0E940000 xcall lsr8
0368 802F mov R24,R16
036A 8370 andi R24,3
036C 99F4 brne L94
036E .dbline 182
036E ; DI_data_cur[(j<<2)+(i>>1)] = 0;
036E 262E mov R2,R22
0370 3324 clr R3
0372 3594 asr R3
0374 2794 ror R2
0376 E42F mov R30,R20
0378 FF27 clr R31
037A EE0F lsl R30
037C FF1F rol R31
037E EE0F lsl R30
0380 FF1F rol R31
0382 E20D add R30,R2
0384 F31D adc R31,R3
0386 80E0 ldi R24,<_DI_data_cur
0388 90E0 ldi R25,>_DI_data_cur
038A E80F add R30,R24
038C F91F adc R31,R25
038E 2224 clr R2
0390 2082 std z+0,R2
0392 20C0 xjmp L95
0394 L94:
0394 .dbline 183
0394 ; else if(((DI_Status[j]>>i) & 0x03) == 0x02)
0394 80E0 ldi R24,<_DI_Status
0396 90E0 ldi R25,>_DI_Status
0398 E42F mov R30,R20
039A FF27 clr R31
039C E80F add R30,R24
039E F91F adc R31,R25
03A0 0081 ldd R16,z+0
03A2 162F mov R17,R22
03A4 0E940000 xcall lsr8
03A8 802F mov R24,R16
03AA 8370 andi R24,3
03AC 8230 cpi R24,2
03AE 91F4 brne L96
03B0 .dbline 184
03B0 ; DI_data_cur[(j<<2)+(i>>1)] = 0xa5;
03B0 262E mov R2,R22
03B2 3324 clr R3
03B4 3594 asr R3
03B6 2794 ror R2
03B8 E42F mov R30,R20
03BA FF27 clr R31
03BC EE0F lsl R30
03BE FF1F rol R31
03C0 EE0F lsl R30
03C2 FF1F rol R31
03C4 E20D add R30,R2
03C6 F31D adc R31,R3
03C8 80E0 ldi R24,<_DI_data_cur
03CA 90E0 ldi R25,>_DI_data_cur
03CC E80F add R30,R24
03CE F91F adc R31,R25
03D0 85EA ldi R24,165
03D2 8083 std z+0,R24
03D4 L96:
03D4 L95:
03D4 L93:
03D4 .dbline 185
03D4 L89:
03D4 .dbline 177
03D4 6E5F subi R22,254 ; addi 2
03D6 L91:
03D6 .dbline 177
03D6 6830 cpi R22,8
03D8 08F4 brsh X0
03DA 9BCF xjmp L88
03DC X0:
03DC .dbline 186
03DC L85:
03DC .dbline 175
03DC 4395 inc R20
03DE L87:
03DE .dbline 175
03DE 4330 cpi R20,3
03E0 08F4 brsh X1
03E2 95CF xjmp L84
03E4 X1:
03E4 .dbline -2
03E4 L83:
03E4 0E940000 xcall pop_gset2
03E8 .dbline 0 ; func end
03E8 0895 ret
03EA .dbsym r j 20 c
03EA .dbsym r i 22 c
03EA .dbend
03EA .dbfunc e timer0_init _timer0_init fV
.even
03EA _timer0_init::
03EA .dbline -1
03EA .dbline 193
03EA ; }
03EA ; }
03EA ;
03EA ; }
03EA ;
03EA ;
03EA ;
03EA ; void timer0_init(void)
03EA ; {
03EA .dbline 194
03EA ; TCCR0A = 0x00; //stop
03EA 2224 clr R2
03EC 24BC out 0x24,R2
03EE .dbline 195
03EE ; ASSR = 0x00; //set async mode
03EE 2092B600 sts 182,R2
03F2 .dbline 196
03F2 ; TCNT0 = 0x83; //set count
03F2 83E8 ldi R24,131
03F4 86BD out 0x26,R24
03F6 .dbline 197
03F6 ; OCR0 = 0x7D;
03F6 8DE7 ldi R24,125
03F8 87BD out 0x27,R24
03FA .dbline 198
03FA ; TCCR0A = 0x05; //start timer
03FA 85E0 ldi R24,5
03FC 84BD out 0x24,R24
03FE .dbline -2
03FE L98:
03FE .dbline 0 ; func end
03FE 0895 ret
0400 .dbend
0400 .dbfunc e init_devices _init_devices fV
.even
0400 _init_devices::
0400 .dbline -1
0400 .dbline 202
0400 ; }
0400 ;
0400 ; void init_devices(void)
0400 ; {
0400 .dbline 203
0400 ; port_init();
0400 FFDD xcall _port_init
0402 .dbline 204
0402 ; timer0_init();
0402 F3DF xcall _timer0_init
0404 .dbline 205
0404 ; TIMSK0 = 0x01;
0404 81E0 ldi R24,1
0406 80936E00 sts 110,R24
040A .dbline -2
040A L99:
040A .dbline 0 ; func end
040A 0895 ret
040C .dbend
040C .dbfunc e watchdog_init _watchdog_init fV
.even
040C _watchdog_init::
040C .dbline -1
040C .dbline 209
040C ; }
040C ;
040C ; void watchdog_init(void)
040C ; {
040C .dbline 210
040C ; WDR(); //this prevents a timout on enabling
040C A895 wdr
040E .dbline 211
040E ; WDTCR = 0x0e; //WATCHDOG ENABLED - dont forget to issue WDRs
040E 8EE0 ldi R24,14
0410 80936000 sts 96,R24
0414 .dbline -2
0414 L100:
0414 .dbline 0 ; func end
0414 0895 ret
0416 .dbend
.area bss(ram, con, rel)
0000 .dbfile D:\报警系统设计资料\报警系统软件\测量模块基于CAN的系统网程序\开关量CAN网\intmcu.c
0000 _DI_data_pre::
0000 .blkb 12
000C .dbsym e DI_data_pre _DI_data_pre A[12:12]c
000C _DI_data::
000C .blkb 12
0018 .dbsym e DI_data _DI_data A[12:12]c
0018 _DI_data_cur::
0018 .blkb 12
0024 .dbsym e DI_data_cur _DI_data_cur A[12:12]c
0024 _PINF_temp::
0024 .blkb 1
0025 .dbsym e PINF_temp _PINF_temp c
0025 _PINE_temp::
0025 .blkb 1
0026 .dbsym e PINE_temp _PINE_temp c
0026 _PINB_temp::
0026 .blkb 1
0027 .dbsym e PINB_temp _PINB_temp c
0027 _PINA_temp::
0027 .blkb 1
0028 .dbsym e PINA_temp _PINA_temp c
0028 _DI_Status::
0028 .blkb 3
002B .dbsym e DI_Status _DI_Status A[3:3]c
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?