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

📄 main.lis

📁 这一个用ATTINY26做的433M无线遥控解码程序
💻 LIS
📖 第 1 页 / 共 3 页
字号:
                        .module main.c
                        .area text(rom, con, rel)
 0000                   .dbfile I:\REDFOX~1\Remote\main.c
 0000                   .dbfunc e port_init _port_init fV
                        .even
 0000           _port_init::
 0000                   .dbline -1
 0000                   .dbline 49
 0000           ; 
 0000           ; //ICC-AVR application builder : 2007-11-18 19:20:12
 0000           ; // Target : T26
 0000           ; // Crystal: 2.0000Mhz
 0000           ; 
 0000           ; 
 0000           ; 
 0000           ; #include <iot26v.h>
 0000           ; #include <macros.h>
 0000           ; 
 0000           ; 
 0000           ; 
 0000           ; #define               uchar           unsigned char
 0000           ; #define               uint            unsigned int
 0000           ; 
 0000           ; #define       UP                      0xC0
 0000           ; #define       STOP            0xA0
 0000           ; #define       DOWN            0x60
 0000           ; 
 0000           ; 
 0000           ; #define               SET_LED1                PORTB |=  (1<<PB5)
 0000           ; #define               CLR_LED1                PORTB &= ~(1<<PB5)
 0000           ; 
 0000           ; #define               SET_LED2                PORTB |=  (1<<PB4)
 0000           ; #define               CLR_LED2                PORTB &= ~(1<<PB4)
 0000           ; 
 0000           ; #define       SET_RLY1                PORTA |=  (1<<PA1)
 0000           ; #define       CLR_RLY1                PORTA &= ~(1<<PA1)
 0000           ; 
 0000           ; #define       SET_RLY2                PORTA |=  (1<<PA0)
 0000           ; #define       CLR_RLY2                PORTA &= ~(1<<PA0)
 0000           ; 
 0000           ; 
 0000           ; 
 0000           ; uchar flag_4ms;
 0000           ; uchar led_time;
 0000           ; uint  key,key1,key2;
 0000           ; 
 0000           ; uchar flag,rxd_flag;
 0000           ; uchar start,bits;
 0000           ; uchar timeH,timeL;
 0000           ; uchar datas;
 0000           ; uchar addrH,addrL;
 0000           ; uint  addr;
 0000           ; uchar rxd_data;
 0000           ; 
 0000           ; 
 0000           ; void port_init(void)
 0000           ; {
 0000                   .dbline 50
 0000           ;       PORTB = 0x0F;
 0000 8FE0              ldi R24,15
 0002 88BB              out 0x18,R24
 0004                   .dbline 51
 0004           ;       DDRB  = 0x30;
 0004 80E3              ldi R24,48
 0006 87BB              out 0x17,R24
 0008                   .dbline 53
 0008           ;        
 0008           ;       PORTA = 0xE0;
 0008 80EE              ldi R24,224
 000A 8BBB              out 0x1b,R24
 000C                   .dbline 54
 000C           ;       DDRA  = 0x03;
 000C 83E0              ldi R24,3
 000E 8ABB              out 0x1a,R24
 0010                   .dbline -2
 0010           L1:
 0010                   .dbline 0 ; func end
 0010 0895              ret
 0012                   .dbend
 0012                   .dbfunc e timer0_init _timer0_init fV
                        .even
 0012           _timer0_init::
 0012                   .dbline -1
 0012                   .dbline 59
 0012           ; }
 0012           ; 
 0012           ; 
 0012           ; void timer0_init(void)
 0012           ; {
 0012                   .dbline 60
 0012           ;        TCCR0 = 0x00; //stop
 0012 2224              clr R2
 0014 23BE              out 0x33,R2
 0016                   .dbline 61
 0016           ;        TCNT0 = 0x83; //set count
 0016 83E8              ldi R24,131
 0018 82BF              out 0x32,R24
 001A                   .dbline 62
 001A           ;        TCCR0 = 0x03; //start timer
 001A 83E0              ldi R24,3
 001C 83BF              out 0x33,R24
 001E                   .dbline -2
 001E           L2:
 001E                   .dbline 0 ; func end
 001E 0895              ret
 0020                   .dbend
 0020                   .dbfunc e timer1_init _timer1_init fV
                        .even
 0020           _timer1_init::
 0020                   .dbline -1
 0020                   .dbline 66
 0020           ; }
 0020           ; 
 0020           ; void timer1_init(void)
 0020           ; {
 0020                   .dbline 67
 0020           ;        TCCR1B = 0x00; //stop
 0020 2224              clr R2
 0022 2FBC              out 0x2f,R2
 0024                   .dbline 68
 0024           ;        TCNT1 = 0x06;
 0024 86E0              ldi R24,6
 0026 8EBD              out 0x2e,R24
 0028                   .dbline 69
 0028           ;        OCR1A = 0xFA;
 0028 8AEF              ldi R24,250
 002A 8DBD              out 0x2d,R24
 002C                   .dbline 70
 002C           ;        OCR1B = 0xFA;
 002C 8CBD              out 0x2c,R24
 002E                   .dbline 71
 002E           ;        OCR1C = 0x80;
 002E 80E8              ldi R24,128
 0030 8BBD              out 0x2b,R24
 0032                   .dbline 72
 0032           ;        TCCR1A = 0x00;
 0032 20BE              out 0x30,R2
 0034                   .dbline -2
 0034           L3:
 0034                   .dbline 0 ; func end
 0034 0895              ret
 0036                   .dbend
 0036                   .dbfunc e init_eeprom _init_eeprom fV
                        .even
 0036           _init_eeprom::
 0036                   .dbline -1
 0036                   .dbline 78
 0036           ;        //TCCR1B = 0x05; //start Timer
 0036           ; }
 0036           ; 
 0036           ; 
 0036           ; void init_eeprom(void)
 0036           ; {
 0036                   .dbline 79
 0036           ;        EECR = 0x07;
 0036 87E0              ldi R24,7
 0038 8CBB              out 0x1c,R24
 003A                   .dbline -2
 003A           L4:
 003A                   .dbline 0 ; func end
 003A 0895              ret
 003C                   .dbend
 003C                   .dbfunc e EEPROM_write _EEPROM_write fV
 003C           ;          Datas -> R18
 003C           ;        Address -> R16
                        .even
 003C           _EEPROM_write::
 003C                   .dbline -1
 003C                   .dbline 85
 003C           ; }
 003C           ; 
 003C           ; 
 003C           ; 
 003C           ; void EEPROM_write(unsigned char Address, unsigned char Datas)
 003C           ; {
 003C           L6:
 003C                   .dbline 86
 003C           L7:
 003C                   .dbline 86
 003C           ;       while(EECR & (1<<EEWE));// 等待上一次写操作结束 
 003C E199              sbic 0x1c,1
 003E FECF              rjmp L6
 0040                   .dbline 88
 0040           ;       
 0040           ;       EEARL= Address;                 // 设置地址和数据寄存器 
 0040 0EBB              out 0x1e,R16
 0042                   .dbline 89
 0042           ;       EEDR = Datas;
 0042 2DBB              out 0x1d,R18
 0044                   .dbline 90
 0044           ;       EECR |= (1<<EEMWE);             // 置位EEMWE
 0044 E29A              sbi 0x1c,2
 0046                   .dbline 91
 0046           ;       EECR |= (1<<EEWE);              // 置位EEWE 以启动写操作E
 0046 E19A              sbi 0x1c,1
 0048                   .dbline -2
 0048           L5:
 0048                   .dbline 0 ; func end
 0048 0895              ret
 004A                   .dbsym r Datas 18 c
 004A                   .dbsym r Address 16 c
 004A                   .dbend
 004A                   .dbfunc e EEPROM_read _EEPROM_read fc
 004A           ;      uiAddress -> R16
                        .even
 004A           _EEPROM_read::
 004A                   .dbline -1
 004A                   .dbline 96
 004A           ; }
 004A           ; 
 004A           ; 
 004A           ; unsigned char EEPROM_read(unsigned char uiAddress)
 004A           ; {
 004A           L10:
 004A                   .dbline 97
 004A           L11:
 004A                   .dbline 97
 004A           ;       while(EECR&(1<<EEWE));  //等待上一次写操作结束
 004A E199              sbic 0x1c,1
 004C FECF              rjmp L10
 004E                   .dbline 98
 004E           ;       EEARL = uiAddress;              // 设置地址寄存器
 004E 0EBB              out 0x1e,R16
 0050                   .dbline 99
 0050           ;       EECR |= (1<<EERE);              // 设置EERE 以启动读操作
 0050 E09A              sbi 0x1c,0
 0052                   .dbline 100
 0052           ;       return EEDR;                    // 自数据寄存器返回数据
 0052 0DB3              in R16,0x1d
 0054                   .dbline -2
 0054           L9:
 0054                   .dbline 0 ; func end
 0054 0895              ret
 0056                   .dbsym r uiAddress 16 c
 0056                   .dbend
 0056                   .dbfunc e init_devices _init_devices fV
                        .even
 0056           _init_devices::
 0056                   .dbline -1
 0056                   .dbline 111
 0056           ; }
 0056           ; 
 0056           ; 
 0056           ; 
 0056           ; 
 0056           ; 
 0056           ; 
 0056           ; 
 0056           ; //call this routine to initialize all peripherals
 0056           ; void init_devices(void)
 0056           ; {
 0056                   .dbline 112
 0056           ;        CLI();                 //disable all interrupts
 0056 F894              cli
 0058                   .dbline 114
 0058           ;        
 0058           ;        port_init();
 0058 D3DF              rcall _port_init
 005A                   .dbline 115
 005A           ;        timer0_init();
 005A DBDF              rcall _timer0_init
 005C                   .dbline 116
 005C           ;        timer1_init();
 005C E1DF              rcall _timer1_init
 005E                   .dbline 117
 005E           ;        init_eeprom();
 005E EBDF              rcall _init_eeprom
 0060                   .dbline 119
 0060           ;        
 0060           ;        MCUCR = 0x02;
 0060 82E0              ldi R24,2
 0062 85BF              out 0x35,R24
 0064                   .dbline 120
 0064           ;        TIMSK = 0x06;  //timer interrupt sources
 0064 86E0              ldi R24,6
 0066 89BF              out 0x39,R24
 0068                   .dbline 121
 0068           ;        GIMSK = 0x40;  //interrupt sources
 0068 80E4              ldi R24,64
 006A 8BBF              out 0x3b,R24
 006C                   .dbline 122
 006C           ;        PLLCSR = 0x00; //PLL
 006C 2224              clr R2
 006E 29BC              out 0x29,R2
 0070                   .dbline 123
 0070           ;        WDR();                 //this prevents a timout on enabling
 0070 A895              wdr
 0072                   .dbline 124
 0072           ;        WDTCR = 0x08;  //WATCHDOG ENABLED - dont forget to issue WD
 0072 88E0              ldi R24,8
 0074 81BD              out 0x21,R24
 0076                   .dbline 126
 0076           ;        
 0076           ;        SEI();                 //re-enable interrupts
 0076 7894              sei
 0078                   .dbline -2
 0078           L13:
 0078                   .dbline 0 ; func end
 0078 0895              ret
 007A                   .dbend
 007A                   .dbfunc e key_scan _key_scan fV
 007A           ;           temp -> R16
                        .even
 007A           _key_scan::
 007A                   .dbline -1
 007A                   .dbline 135
 007A           ; }
 007A           ; 
 007A           ; 
 007A           ; /*---------------------------------------------------------------
 007A           ;               按键扫描
 007A           ; ----------------------------------------------------------------*/
 007A           ; 
 007A           ; void key_scan(void)
 007A           ; {
 007A                   .dbline 138
 007A           ;       uchar temp;
 007A           ;       
 007A           ;       temp = PINA & 0xE0;
 007A 09B3              in R16,0x19
 007C 007E              andi R16,224
 007E                   .dbline 140
 007E           ; 
 007E           ;       if(temp==UP)    
 007E 003C              cpi R16,192
 0080 A1F4              brne L15
 0082                   .dbline 141
 0082           ;       {       
 0082                   .dbline 142
 0082           ;               SET_LED2;
 0082 C49A              sbi 0x18,4
 0084                   .dbline 144
 0084           ;               //if(key<500)   
 0084           ;               {
 0084                   .dbline 145
 0084           ;                       key ++;
 0084 80911000          lds R24,_key
 0088 90911100          lds R25,_key+1
 008C 0196              adiw R24,1
 008E 90931100          sts _key+1,R25
 0092 80931000          sts _key,R24
 0096                   .dbline 146
 0096           ;                       if(key>=5)
 0096 8530              cpi R24,5
 0098 E0E0              ldi R30,0
 009A 9E07              cpc R25,R30
 009C 08F4              brsh X0
 009E 3BC0              rjmp L16
 00A0           X0:
 00A0                   .dbline 147
 00A0           ;                       {
 00A0                   .dbline 148
 00A0           ;                               CLR_RLY2;
 00A0 D898              cbi 0x1b,0
 00A2                   .dbline 149
 00A2           ;                               asm("nop"); 
 00A2 0000              nop
 00A4                   .dbline 150
 00A4           ;                               asm("nop");
 00A4 0000              nop
 00A6                   .dbline 151
 00A6           ;                               SET_RLY1;
 00A6 D99A              sbi 0x1b,1
 00A8                   .dbline 152
 00A8           ;                       }
 00A8                   .dbline 153
 00A8           ;               }       
 00A8                   .dbline 154
 00A8           ;       }
 00A8 36C0              rjmp L16
 00AA           L15:
 00AA                   .dbline 156
 00AA           ; 
 00AA           ;       else if(temp==STOP)     // k1
 00AA 003A              cpi R16,160
 00AC 89F4              brne L19
 00AE                   .dbline 157
 00AE           ;       {       
 00AE                   .dbline 158
 00AE           ;               SET_LED2;
 00AE C49A              sbi 0x18,4
 00B0                   .dbline 160
 00B0           ;               //if(key1<500)  
 00B0           ;               {       
 00B0                   .dbline 161
 00B0           ;                       key1 ++;
 00B0 80910E00          lds R24,_key1
 00B4 90910F00          lds R25,_key1+1
 00B8 0196              adiw R24,1
 00BA 90930F00          sts _key1+1,R25
 00BE 80930E00          sts _key1,R24
 00C2                   .dbline 162
 00C2           ;                       if(key1>=5)             // 短按
 00C2 8530              cpi R24,5
 00C4 E0E0              ldi R30,0
 00C6 9E07              cpc R25,R30

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -