📄 test.lis
字号:
.module test.c
.area text(rom, con, rel)
0000 .dbfile D:\工作\video切换\soft\按键切换\test.c
0000 .dbfunc e port_init _port_init fV
.even
0000 _port_init::
0000 .dbline -1
0000 .dbline 19
0000 ; //ICC-AVR application builder : 2006-3-22 10:22:28
0000 ; // Target : M8
0000 ; // Crystal: 11.059Mhz
0000 ;
0000 ; #include <iom8v.h>
0000 ; #include <macros.h>
0000 ; //#include <stddef.h>
0000 ;
0000 ; unsigned char ICP_Flag;
0000 ; unsigned int ICP_value_down;
0000 ; unsigned char state;
0000 ;
0000 ; #define LED1_ON() PORTD=0x01;PORTC = 0x00;PORTC=0x01;
0000 ; #define LED2_ON() PORTD=0x02;PORTC = 0x00;PORTC=0x02;
0000 ; #define LED3_ON() PORTD=0x04;PORTC = 0x00;PORTC=0x04;
0000 ; #define LED4_ON() PORTD=0x08;PORTC = 0x00;PORTC=0x08;
0000 ;
0000 ; void port_init(void)
0000 ; {
0000 .dbline 20
0000 ; PORTB = 0x00;
0000 2224 clr R2
0002 28BA out 0x18,R2
0004 .dbline 21
0004 ; DDRB = 0x00;
0004 27BA out 0x17,R2
0006 .dbline 22
0006 ; PORTC = 0x00; //m103 output only
0006 25BA out 0x15,R2
0008 .dbline 23
0008 ; DDRC = 0x0F;
0008 8FE0 ldi R24,15
000A 84BB out 0x14,R24
000C .dbline 24
000C ; PORTD = 0x00;
000C 22BA out 0x12,R2
000E .dbline 25
000E ; DDRD = 0x0F;
000E 81BB out 0x11,R24
0010 .dbline -2
0010 .dbline 26
0010 ; }
0010 L1:
0010 .dbline 0 ; func end
0010 0895 ret
0012 .dbend
0012 .dbfunc e timer1_init _timer1_init fV
.even
0012 _timer1_init::
0012 .dbline -1
0012 .dbline 33
0012 ;
0012 ; //TIMER1 initialize - prescale:Stop
0012 ; // WGM: 0) Normal, TOP=0xFFFF
0012 ; // desired value: 1Hz
0012 ; // actual value: Out of range
0012 ; void timer1_init(void)
0012 ; {
0012 .dbline 34
0012 ; TCCR1B = 0x00; //stop
0012 2224 clr R2
0014 2EBC out 0x2e,R2
0016 .dbline 35
0016 ; TCNT1H = 0x00 /*INVALID SETTING*/; //setup
0016 2DBC out 0x2d,R2
0018 .dbline 36
0018 ; TCNT1L = 0x00 /*INVALID SETTING*/;
0018 2CBC out 0x2c,R2
001A .dbline 37
001A ; OCR1AH = 0x00 /*INVALID SETTING*/;
001A 2BBC out 0x2b,R2
001C .dbline 38
001C ; OCR1AL = 0x00 /*INVALID SETTING*/;
001C 2ABC out 0x2a,R2
001E .dbline 39
001E ; OCR1BH = 0x00 /*INVALID SETTING*/;
001E 29BC out 0x29,R2
0020 .dbline 40
0020 ; OCR1BL = 0x00 /*INVALID SETTING*/;
0020 28BC out 0x28,R2
0022 .dbline 41
0022 ; ICR1H = 0x00 /*INVALID SETTING*/;
0022 27BC out 0x27,R2
0024 .dbline 42
0024 ; ICR1L = 0x00 /*INVALID SETTING*/;
0024 26BC out 0x26,R2
0026 .dbline 43
0026 ; TCCR1A = 0x00;
0026 2FBC out 0x2f,R2
0028 .dbline 44
0028 ; TCCR1B = 0xC0; //start Timer
0028 80EC ldi R24,192
002A 8EBD out 0x2e,R24
002C .dbline -2
002C .dbline 45
002C ; }
002C L2:
002C .dbline 0 ; func end
002C 0895 ret
002E .dbend
002E .dbfunc e delay_s _delay_s fV
002E ; i -> R20,R21
002E ; j -> R22,R23
002E ; x -> R16
.even
002E _delay_s::
002E 00D0 rcall push_gset2
0030 .dbline -1
0030 .dbline 49
0030 ;
0030 ; ///////////////////////////////////////延时程序
0030 ; void delay_s(char x)
0030 ; {
0030 10C0 rjmp L5
0032 L4:
0032 .dbline 53
0032 ; int i;
0032 ; int j;
0032 ; while(x--)
0032 ; {
0032 .dbline 54
0032 ; for(i=0;i<500;i++)
0032 4427 clr R20
0034 5527 clr R21
0036 L7:
0036 .dbline 55
0036 ; {
0036 .dbline 56
0036 ; for(j=0;j<1000;j++)
0036 6627 clr R22
0038 7727 clr R23
003A L11:
003A .dbline 57
003A L12:
003A .dbline 56
003A 6F5F subi R22,255 ; offset = 1
003C 7F4F sbci R23,255
003E .dbline 56
003E 683E cpi R22,232
0040 E3E0 ldi R30,3
0042 7E07 cpc R23,R30
0044 D4F3 brlt L11
0046 .dbline 58
0046 L8:
0046 .dbline 54
0046 4F5F subi R20,255 ; offset = 1
0048 5F4F sbci R21,255
004A .dbline 54
004A 443F cpi R20,244
004C E1E0 ldi R30,1
004E 5E07 cpc R21,R30
0050 94F3 brlt L7
0052 .dbline 59
0052 L5:
0052 .dbline 52
0052 202E mov R2,R16
0054 3324 clr R3
0056 0150 subi R16,1
0058 2220 tst R2
005A 59F7 brne L4
005C .dbline -2
005C .dbline 60
005C ; ;
005C ; }
005C ; }
005C ; }
005C L3:
005C 00D0 rcall pop_gset2
005E .dbline 0 ; func end
005E 0895 ret
0060 .dbsym r i 20 I
0060 .dbsym r j 22 I
0060 .dbsym r x 16 c
0060 .dbend
0060 .dbfunc e VideoSwitch _VideoSwitch fV
0060 ; Counter -> R20,R21
.even
0060 _VideoSwitch::
0060 00D0 rcall push_gset1
0062 A801 movw R20,R16
0064 .dbline -1
0064 .dbline 64
0064 ; //////////////////////////////////////
0064 ;
0064 ; void VideoSwitch(unsigned int Counter) //根据捕捉计数值切换视频通道
0064 ; {
0064 .dbline 65
0064 ; if(Counter>0x0D7E)
0064 8EE7 ldi R24,3454
0066 9DE0 ldi R25,13
0068 8417 cp R24,R20
006A 9507 cpc R25,R21
006C 08F4 brsh L16
006E .dbline 66
006E ; { //超过2.5ms,可能是漏掉了一个脉宽信号,不做动作
006E .dbline 68
006E ; //LED1_ON();
006E ; return;
006E 2AC0 rjmp L15
0070 L16:
0070 .dbline 71
0070 ; }
0070 ;
0070 ; if(Counter<0x0818)//状态1: 0.5~1.5ms
0070 4831 cpi R20,24
0072 E8E0 ldi R30,8
0074 5E07 cpc R21,R30
0076 08F4 brsh L18
0078 .dbline 72
0078 ; {
0078 .dbline 74
0078 ; //LED2_ON();
0078 ; }
0078 25C0 rjmp L19
007A L18:
007A .dbline 76
007A ; else
007A ; { //1.5ms~2.5ms
007A .dbline 77
007A ; if(state > 1)
007A 81E0 ldi R24,1
007C 20900000 lds R2,_state
0080 8215 cp R24,R2
0082 18F4 brsh L20
0084 .dbline 78
0084 ; state = 0;
0084 2224 clr R2
0086 20920000 sts _state,R2
008A L20:
008A .dbline 80
008A ;
008A ; switch(state)
008A 40910000 lds R20,_state
008E 5527 clr R21
0090 4030 cpi R20,0
0092 4507 cpc R20,R21
0094 29F0 breq L25
0096 X0:
0096 4130 cpi R20,1
0098 E0E0 ldi R30,0
009A 5E07 cpc R21,R30
009C 39F0 breq L26
009E 0BC0 rjmp L22
00A0 X1:
00A0 .dbline 81
00A0 ; {
00A0 L25:
00A0 .dbline 83
00A0 ; case 0:
00A0 ; LED2_ON();
00A0 82E0 ldi R24,2
00A2 82BB out 0x12,R24
00A4 .dbline 83
00A4 2224 clr R2
00A6 25BA out 0x15,R2
00A8 .dbline 83
00A8 85BB out 0x15,R24
00AA .dbline 83
00AA .dbline 84
00AA ; break;
00AA 05C0 rjmp L23
00AC L26:
00AC .dbline 86
00AC ; case 1:
00AC ; LED4_ON();
00AC 88E0 ldi R24,8
00AE 82BB out 0x12,R24
00B0 .dbline 86
00B0 2224 clr R2
00B2 25BA out 0x15,R2
00B4 .dbline 86
00B4 85BB out 0x15,R24
00B6 .dbline 86
00B6 .dbline 87
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -