📄 coding.lis
字号:
.module coding.c
.area text(rom, con, rel)
0000 .dbfile D:\MYDOCU~1\电子\08电信节\coding_and_decode改进\coding.c
0000 .dbfunc e delay _delay fV
0000 ; i -> R20,R21
0000 ; j -> R22
0000 ; t -> R16,R17
.even
0000 _delay::
0000 00D0 rcall push_xgsetF000
0002 .dbline -1
0002 .dbline 10
0002 ; //ICC-AVR application builder : 2008-5-2 16:02:25
0002 ; // Target : M8
0002 ; // Crystal: 7.3728Mhz
0002 ;
0002 ; #include <iom8v.h>
0002 ; #include <macros.h>
0002 ; unsigned int ms;
0002 ;
0002 ; void delay(unsigned int t)
0002 ; { unsigned int i;unsigned char j;
0002 .dbline 11
0002 ; for(i=0;i<t;i++)
0002 4427 clr R20
0004 5527 clr R21
0006 08C0 rjmp L5
0008 L2:
0008 .dbline 12
0008 ; for(j=80;j>0;j--);
0008 60E5 ldi R22,80
000A 01C0 rjmp L9
000C L6:
000C .dbline 12
000C L7:
000C .dbline 12
000C 6A95 dec R22
000E L9:
000E .dbline 12
000E 80E0 ldi R24,0
0010 8617 cp R24,R22
0012 E0F3 brlo L6
0014 X0:
0014 L3:
0014 .dbline 11
0014 4F5F subi R20,255 ; offset = 1
0016 5F4F sbci R21,255
0018 L5:
0018 .dbline 11
0018 4017 cp R20,R16
001A 5107 cpc R21,R17
001C A8F3 brlo L2
001E X1:
001E .dbline -2
001E L1:
001E .dbline 0 ; func end
001E 00C0 rjmp pop_xgsetF000
0020 .dbsym r i 20 i
0020 .dbsym r j 22 c
0020 .dbsym r t 16 i
0020 .dbend
0020 .dbfunc e port_init _port_init fV
.even
0020 _port_init::
0020 .dbline -1
0020 .dbline 16
0020 ; }
0020 ;
0020 ; void port_init(void)
0020 ; {
0020 .dbline 17
0020 ; PORTB = 0x01;
0020 81E0 ldi R24,1
0022 88BB out 0x18,R24
0024 .dbline 18
0024 ; DDRB = 0x01;
0024 87BB out 0x17,R24
0026 .dbline 19
0026 ; PORTC = 0x00; //m103 output only
0026 2224 clr R2
0028 25BA out 0x15,R2
002A .dbline 20
002A ; DDRC = 0x00;
002A 24BA out 0x14,R2
002C .dbline 21
002C ; PORTD = 0x00;
002C 22BA out 0x12,R2
002E .dbline 22
002E ; DDRD = 0x00;
002E 21BA out 0x11,R2
0030 .dbline -2
0030 L10:
0030 .dbline 0 ; func end
0030 0895 ret
0032 .dbend
0032 .dbfunc e timer1_init _timer1_init fV
.even
0032 _timer1_init::
0032 .dbline -1
0032 .dbline 31
0032 ;
0032 ; }
0032 ;
0032 ; //TIMER1 initialize - prescale:1
0032 ; // WGM: 0) Normal, TOP=0xFFFF
0032 ; // desired value: 500uSec
0032 ; // actual value: 499.946uSec (0.0%)
0032 ; void timer1_init(void)
0032 ; {
0032 .dbline 32
0032 ; TCCR1B = 0x00; //stop
0032 2224 clr R2
0034 2EBC out 0x2e,R2
0036 .dbline 33
0036 ; TCNT1H = 0xF1; //setup
0036 81EF ldi R24,241
0038 8DBD out 0x2d,R24
003A .dbline 34
003A ; TCNT1L = 0x9A;
003A 8AE9 ldi R24,154
003C 8CBD out 0x2c,R24
003E .dbline 35
003E ; OCR1AH = 0x0E;
003E 8EE0 ldi R24,14
0040 8BBD out 0x2b,R24
0042 .dbline 36
0042 ; OCR1AL = 0x66;
0042 86E6 ldi R24,102
0044 8ABD out 0x2a,R24
0046 .dbline 37
0046 ; OCR1BH = 0x0E;
0046 8EE0 ldi R24,14
0048 89BD out 0x29,R24
004A .dbline 38
004A ; OCR1BL = 0x66;
004A 86E6 ldi R24,102
004C 88BD out 0x28,R24
004E .dbline 39
004E ; ICR1H = 0x0E;
004E 8EE0 ldi R24,14
0050 87BD out 0x27,R24
0052 .dbline 40
0052 ; ICR1L = 0x66;
0052 86E6 ldi R24,102
0054 86BD out 0x26,R24
0056 .dbline 41
0056 ; TCCR1A = 0x00;
0056 2FBC out 0x2f,R2
0058 .dbline 42
0058 ; TCCR1B = 0x01; //start Timer
0058 81E0 ldi R24,1
005A 8EBD out 0x2e,R24
005C .dbline -2
005C L11:
005C .dbline 0 ; func end
005C 0895 ret
005E .dbend
.area vector(rom, abs)
.org 16
0010 2FC0 rjmp _timer1_ovf_isr
.area text(rom, con, rel)
005E .dbfile D:\MYDOCU~1\电子\08电信节\coding_and_decode改进\coding.c
005E .dbfunc e timer1_ovf_isr _timer1_ovf_isr fV
.even
005E _timer1_ovf_isr::
005E 8A93 st -y,R24
0060 9A93 st -y,R25
0062 8FB7 in R24,0x3f
0064 8A93 st -y,R24
0066 .dbline -1
0066 .dbline 47
0066 ; }
0066 ;
0066 ; #pragma interrupt_handler timer1_ovf_isr:iv_TIM1_OVF
0066 ; void timer1_ovf_isr(void)
0066 ; {
0066 .dbline 49
0066 ; //TIMER1 has overflowed
0066 ; TCNT1H = 0xF1; //reload counter high value
0066 81EF ldi R24,241
0068 8DBD out 0x2d,R24
006A .dbline 50
006A ; TCNT1L = 0x9A; //reload counter low value
006A 8AE9 ldi R24,154
006C 8CBD out 0x2c,R24
006E .dbline 51
006E ; ms++;
006E 80910000 lds R24,_ms
0072 90910100 lds R25,_ms+1
0076 0196 adiw R24,1
0078 90930100 sts _ms+1,R25
007C 80930000 sts _ms,R24
0080 .dbline -2
0080 L12:
0080 .dbline 0 ; func end
0080 8991 ld R24,y+
0082 8FBF out 0x3f,R24
0084 9991 ld R25,y+
0086 8991 ld R24,y+
0088 1895 reti
008A .dbend
008A .dbfunc e init_devices _init_devices fV
.even
008A _init_devices::
008A .dbline -1
008A .dbline 56
008A ; }
008A ;
008A ; //call this routine to initialize all peripherals
008A ; void init_devices(void)
008A ; {
008A .dbline 58
008A ; //stop errant interrupts until set up
008A ; CLI(); //disable all interrupts
008A F894 cli
008C .dbline 59
008C ; port_init();
008C C9DF rcall _port_init
008E .dbline 60
008E ; timer1_init();
008E D1DF rcall _timer1_init
0090 .dbline 62
0090 ;
0090 ; MCUCR = 0x00;
0090 2224 clr R2
0092 25BE out 0x35,R2
0094 .dbline 63
0094 ; GICR = 0x00;
0094 2BBE out 0x3b,R2
0096 .dbline 64
0096 ; TIMSK = 0x05; //timer interrupt sources
0096 85E0 ldi R24,5
0098 89BF out 0x39,R24
009A .dbline 65
009A ; SEI(); //re-enable interrupts
009A 7894 sei
009C .dbline -2
009C L13:
009C .dbline 0 ; func end
009C 0895 ret
009E .dbend
009E .dbfunc e signal_0 _signal_0 fV
.even
009E _signal_0::
009E .dbline -1
009E .dbline 70
009E ; //all peripherals are now initialized
009E ; }
009E ;
009E ; void signal_0(void)
009E ; {
009E .dbline 71
009E ; ms=0;
009E 2224 clr R2
00A0 3324 clr R3
00A2 30920100 sts _ms+1,R3
00A6 20920000 sts _ms,R2
00AA 03C0 rjmp L16
00AC L15:
00AC .dbline 72
00AC ; while(ms==0) PORTB=PORTB&0xfe;
00AC 88B3 in R24,0x18
00AE 8E7F andi R24,254
00B0 88BB out 0x18,R24
00B2 L16:
00B2 .dbline 72
00B2 20900000 lds R2,_ms
00B6 30900100 lds R3,_ms+1
00BA 2220 tst R2
00BC 11F4 brne X2
00BE 3320 tst R3
00C0 A9F3 breq L15
00C2 X2:
00C2 .dbline 73
00C2 ; ms=0;
00C2 2224 clr R2
00C4 3324 clr R3
00C6 30920100 sts _ms+1,R3
00CA 20920000 sts _ms,R2
00CE 01C0 rjmp L19
00D0 L18:
00D0 .dbline 74
00D0 ; while(ms==0) PORTB=PORTB|0X01;
00D0 C09A sbi 0x18,0
00D2 L19:
00D2 .dbline 74
00D2 20900000 lds R2,_ms
00D6 30900100 lds R3,_ms+1
00DA 2220 tst R2
00DC 11F4 brne X3
00DE 3320 tst R3
00E0 B9F3 breq L18
00E2 X3:
00E2 .dbline -2
00E2 L14:
00E2 .dbline 0 ; func end
00E2 0895 ret
00E4 .dbend
00E4 .dbfunc e signal_1 _signal_1 fV
.even
00E4 _signal_1::
00E4 .dbline -1
00E4 .dbline 79
00E4 ;
00E4 ; }
00E4 ;
00E4 ; void signal_1(void)
00E4 ; {
00E4 .dbline 80
00E4 ; ms=0;
00E4 2224 clr R2
00E6 3324 clr R3
00E8 30920100 sts _ms+1,R3
00EC 20920000 sts _ms,R2
00F0 03C0 rjmp L23
00F2 L22:
00F2 .dbline 81
00F2 ; while(ms==0) PORTB=PORTB&0xfe;
00F2 88B3 in R24,0x18
00F4 8E7F andi R24,254
00F6 88BB out 0x18,R24
00F8 L23:
00F8 .dbline 81
00F8 20900000 lds R2,_ms
00FC 30900100 lds R3,_ms+1
0100 2220 tst R2
0102 11F4 brne X4
0104 3320 tst R3
0106 A9F3 breq L22
0108 X4:
0108 .dbline 82
0108 ; ms=0;
0108 2224 clr R2
010A 3324 clr R3
010C 30920100 sts _ms+1,R3
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -