⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 coding.lis

📁 自定简单无线协议.由AVR编码发送,51中断接收解码, 误码率低, 但通信速率较低
💻 LIS
📖 第 1 页 / 共 2 页
字号:
                        .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 + -