📄 iic_test.lis
字号:
0118 L12:
0118 .dbline 90
0118 ; g_ucKeyPressedCnt = s_ucKeyPressCnt;
0118 20900300 lds R2,L9
011C 20920000 sts _g_ucKeyPressedCnt,R2
0120 .dbline -2
0120 L7:
0120 .dbline 0 ; func end
0120 0895 ret
0122 .dbend
.area data(ram, con, rel)
0006 .dbfile C:\DOCUME~1\fengzm.POWERMAXTECH\桌面\MCU2\iic_test.c
0006 L24:
0006 .blkb 2
.area idata
0006 0000 .word 0
.area data(ram, con, rel)
0008 .dbfile C:\DOCUME~1\fengzm.POWERMAXTECH\桌面\MCU2\iic_test.c
0008 L25:
0008 .blkb 1
.area idata
0008 04 .byte 4
.area data(ram, con, rel)
0009 .dbfile C:\DOCUME~1\fengzm.POWERMAXTECH\桌面\MCU2\iic_test.c
.area text(rom, con, rel)
0122 .dbfile C:\DOCUME~1\fengzm.POWERMAXTECH\桌面\MCU2\iic_test.c
0122 .dbfunc e KeyPressedTask _KeyPressedTask fV
0122 .dbsym s s_ucLedFlashCnt L25 c
0122 .dbsym s s_unLedFlashTimeDly L24 i
.even
0122 _KeyPressedTask::
0122 2197 sbiw R28,1
0124 .dbline -1
0124 .dbline 94
0124 ; }
0124 ;
0124 ; void KeyPressedTask(void)
0124 ; {
0124 .dbline 97
0124 ; static uint s_unLedFlashTimeDly = 0;
0124 ; static uchar s_ucLedFlashCnt = 4;
0124 ; if(g_ucKeyPressedCnt == 1) //press the first
0124 80910000 lds R24,_g_ucKeyPressedCnt
0128 8130 cpi R24,1
012A 39F4 brne L26
012C .dbline 98
012C ; IICSendStr(0x60,g_ucTorchIICData,2);
012C 82E0 ldi R24,2
012E 8883 std y+0,R24
0130 20E0 ldi R18,<_g_ucTorchIICData
0132 30E0 ldi R19,>_g_ucTorchIICData
0134 00E6 ldi R16,96
0136 00D0 rcall _IICSendStr
0138 61C0 rjmp L27
013A L26:
013A .dbline 99
013A ; else if(g_ucKeyPressedCnt == 2)
013A 80910000 lds R24,_g_ucKeyPressedCnt
013E 8230 cpi R24,2
0140 39F4 brne L28
0142 .dbline 100
0142 ; IICSendStr(0x60,g_ucLightOFFData,2);
0142 82E0 ldi R24,2
0144 8883 std y+0,R24
0146 20E0 ldi R18,<_g_ucLightOFFData
0148 30E0 ldi R19,>_g_ucLightOFFData
014A 00E6 ldi R16,96
014C 00D0 rcall _IICSendStr
014E 56C0 rjmp L29
0150 L28:
0150 .dbline 101
0150 ; else if((g_ucKeyPressedCnt == 3) && (!g_ucFlashEnd)) //press the second
0150 80910000 lds R24,_g_ucKeyPressedCnt
0154 8330 cpi R24,3
0156 09F0 breq X0
0158 51C0 rjmp L30
015A X0:
015A 20900000 lds R2,_g_ucFlashEnd
015E 2220 tst R2
0160 09F0 breq X1
0162 4CC0 rjmp L30
0164 X1:
0164 .dbline 102
0164 ; {
0164 .dbline 103
0164 ; if(s_ucLedFlashCnt > 0)
0164 2224 clr R2
0166 30900800 lds R3,L25
016A 2314 cp R2,R3
016C 78F5 brsh L32
016E .dbline 104
016E ; {
016E .dbline 105
016E ; s_unLedFlashTimeDly++;
016E 80910600 lds R24,L24
0172 90910700 lds R25,L24+1
0176 0196 adiw R24,1
0178 90930700 sts L24+1,R25
017C 80930600 sts L24,R24
0180 .dbline 106
0180 ; if(s_unLedFlashTimeDly < 50)
0180 8233 cpi R24,50
0182 E0E0 ldi R30,0
0184 9E07 cpc R25,R30
0186 38F4 brsh L34
0188 .dbline 107
0188 ; IICSendStr(0x60,g_ucIledIICData,2); //led is on
0188 82E0 ldi R24,2
018A 8883 std y+0,R24
018C 20E0 ldi R18,<_g_ucIledIICData
018E 30E0 ldi R19,>_g_ucIledIICData
0190 00E6 ldi R16,96
0192 00D0 rcall _IICSendStr
0194 33C0 rjmp L33
0196 L34:
0196 .dbline 108
0196 ; else if(s_unLedFlashTimeDly < 100)
0196 80910600 lds R24,L24
019A 90910700 lds R25,L24+1
019E 8436 cpi R24,100
01A0 E0E0 ldi R30,0
01A2 9E07 cpc R25,R30
01A4 38F4 brsh L36
01A6 .dbline 109
01A6 ; IICSendStr(0x60,g_ucLightOFFData,2); //led is off
01A6 82E0 ldi R24,2
01A8 8883 std y+0,R24
01AA 20E0 ldi R18,<_g_ucLightOFFData
01AC 30E0 ldi R19,>_g_ucLightOFFData
01AE 00E6 ldi R16,96
01B0 00D0 rcall _IICSendStr
01B2 24C0 rjmp L33
01B4 L36:
01B4 .dbline 111
01B4 ; else
01B4 ; {
01B4 .dbline 112
01B4 ; s_unLedFlashTimeDly = 0;
01B4 2224 clr R2
01B6 3324 clr R3
01B8 30920700 sts L24+1,R3
01BC 20920600 sts L24,R2
01C0 .dbline 113
01C0 ; s_ucLedFlashCnt--;
01C0 80910800 lds R24,L25
01C4 8150 subi R24,1
01C6 80930800 sts L25,R24
01CA .dbline 114
01CA ; }
01CA .dbline 115
01CA ; }
01CA 18C0 rjmp L33
01CC L32:
01CC .dbline 117
01CC ; else
01CC ; {
01CC .dbline 118
01CC ; s_ucLedFlashCnt = 4;
01CC 84E0 ldi R24,4
01CE 80930800 sts L25,R24
01D2 .dbline 119
01D2 ; g_ucFlashEnd = true;
01D2 8FEF ldi R24,255
01D4 80930000 sts _g_ucFlashEnd,R24
01D8 .dbline 120
01D8 ; IICSendStr(0x60,g_ucFlashEnIICData,2); //enalble flash
01D8 82E0 ldi R24,2
01DA 8883 std y+0,R24
01DC 20E0 ldi R18,<_g_ucFlashEnIICData
01DE 30E0 ldi R19,>_g_ucFlashEnIICData
01E0 00E6 ldi R16,96
01E2 00D0 rcall _IICSendStr
01E4 .dbline 121
01E4 ; IICSendStr(0x60,g_ucFlashTimerIICData,2);
01E4 82E0 ldi R24,2
01E6 8883 std y+0,R24
01E8 20E0 ldi R18,<_g_ucFlashTimerIICData
01EA 30E0 ldi R19,>_g_ucFlashTimerIICData
01EC 00E6 ldi R16,96
01EE 00D0 rcall _IICSendStr
01F0 .dbline 122
01F0 ; IICSendStr(0x60,g_ucFlashIICData,2); //flash is on
01F0 82E0 ldi R24,2
01F2 8883 std y+0,R24
01F4 20E0 ldi R18,<_g_ucFlashIICData
01F6 30E0 ldi R19,>_g_ucFlashIICData
01F8 00E6 ldi R16,96
01FA 00D0 rcall _IICSendStr
01FC .dbline 123
01FC ; }
01FC L33:
01FC .dbline 124
01FC ; }
01FC L30:
01FC L29:
01FC L27:
01FC .dbline -2
01FC L23:
01FC 2196 adiw R28,1
01FE .dbline 0 ; func end
01FE 0895 ret
0200 .dbend
0200 .dbfunc e init_devices _init_devices fV
.even
0200 _init_devices::
0200 .dbline -1
0200 .dbline 129
0200 ; }
0200 ;
0200 ; //call this routine to initialize all peripherals
0200 ; void init_devices(void)
0200 ; {
0200 .dbline 131
0200 ; //stop errant interrupts until set up
0200 ; CLI(); //disable all interrupts
0200 F894 cli
0202 .dbline 132
0202 ; port_init();
0202 FEDE rcall _port_init
0204 .dbline 133
0204 ; twi_init();
0204 00D0 rcall _twi_init
0206 .dbline 134
0206 ; timer0_init();
0206 07DF rcall _timer0_init
0208 .dbline 136
0208 ;
0208 ; MCUCR = 0x00;
0208 2224 clr R2
020A 25BE out 0x35,R2
020C .dbline 137
020C ; EICRA = 0x0A; //extended ext ints
020C 8AE0 ldi R24,10
020E 80936900 sts 105,R24
0212 .dbline 138
0212 ; EIMSK = 0x03;
0212 83E0 ldi R24,3
0214 8DBB out 0x1d,R24
0216 .dbline 140
0216 ;
0216 ; TIMSK0 = 0x01; //timer 0 interrupt sources
0216 81E0 ldi R24,1
0218 80936E00 sts 110,R24
021C .dbline 141
021C ; TIMSK1 = 0x21; //timer 1 interrupt sources
021C 81E2 ldi R24,33
021E 80936F00 sts 111,R24
0222 .dbline 142
0222 ; TIMSK2 = 0x01; //timer 2 interrupt sources
0222 81E0 ldi R24,1
0224 80937000 sts 112,R24
0228 .dbline 144
0228 ;
0228 ; PCMSK0 = 0x02; //pin change mask 0 //允许外部电平中断
0228 82E0 ldi R24,2
022A 80936B00 sts 107,R24
022E .dbline 145
022E ; PCMSK1 = 0x02; //pin change mask 1
022E 80936C00 sts 108,R24
0232 .dbline 146
0232 ; PCMSK2 = 0x00; //pin change mask
0232 20926D00 sts 109,R2
0236 .dbline 147
0236 ; PCICR = 0x03; //pin change enable
0236 83E0 ldi R24,3
0238 80936800 sts 104,R24
023C .dbline 148
023C ; PRR = 0x00; //power controller
023C 20926400 sts 100,R2
0240 .dbline 149
0240 ; SEI(); //re-enable interrupts
0240 7894 sei
0242 .dbline -2
0242 L38:
0242 .dbline 0 ; func end
0242 0895 ret
0244 .dbend
0244 .dbfunc e main _main fV
.even
0244 _main::
0244 .dbline -1
0244 .dbline 154
0244 ; //all peripherals are now initialized
0244 ; }
0244 ;
0244 ; void main(void)
0244 ; {
0244 .dbline 155
0244 ; init_devices();
0244 DDDF rcall _init_devices
0246 09C0 rjmp L41
0248 L40:
0248 .dbline 158
0248 ;
0248 ; while(1)
0248 ; {
0248 .dbline 159
0248 ; if(g_ucLoopTimeFlag)
0248 20900000 lds R2,_g_ucLoopTimeFlag
024C 2220 tst R2
024E 29F0 breq L43
0250 .dbline 160
0250 ; {
0250 .dbline 161
0250 ; g_ucLoopTimeFlag = false;
0250 2224 clr R2
0252 20920000 sts _g_ucLoopTimeFlag,R2
0256 .dbline 163
0256 ; // disablechip();
0256 ; KeyScanTask(); //key scan
0256 11DF rcall _KeyScanTask
0258 .dbline 164
0258 ; KeyPressedTask(); //key process
0258 64DF rcall _KeyPressedTask
025A .dbline 165
025A ; }
025A L43:
025A .dbline 166
025A L41:
025A .dbline 157
025A F6CF rjmp L40
025C X2:
025C .dbline -2
025C L39:
025C .dbline 0 ; func end
025C 0895 ret
025E .dbend
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -