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

📄 hongwai.lis

📁 万能遥控器解码
💻 LIS
📖 第 1 页 / 共 2 页
字号:
                        .module hongwai.c
                        .area text(rom, con, rel)
 0000                   .dbfile C:\DOCUME~1\Administrator.27F5F4061F03467\桌面\实验板红外avr解码\hongwai.c
 0000                   .dbfunc e delay_nus _delay_nus fV
 0000           ;              i -> R20,R21
 0000           ;              n -> R16,R17
                        .even
 0000           _delay_nus::
 0000 4A93              st -y,R20
 0002 5A93              st -y,R21
 0004                   .dbline -1
 0004                   .dbline 12
 0004           ; //ICC-AVR application builder : 2008-8-7 8:30:21
 0004           ; // Target : M8515
 0004           ; // Crystal: 4.0000Mhz
 0004           ; #include <iom8515v.h>//和单片机类型相对应的头文件,选择Atmega8515做实验; 
 0004           ; #include <macros.h>
 0004           ; #define uchar unsigned char
 0004           ; #define uint unsigned int
 0004           ; #define DQ    PD2
 0004           ; #define    HW   (PIND&(1<<DQ))  //数据的状态
 0004           ; unsigned char IRCode[3],IRCON,flag;
 0004           ; void delay_nus(unsigned int n)//n微秒延时函数 
 0004           ; { 
 0004                   .dbline 14
 0004           ; unsigned int i; 
 0004           ; for (i=0;i<n;i++) 
 0004 4427              clr R20
 0006 5527              clr R21
 0008 03C0              rjmp L5
 000A           L2:
 000A                   .dbline 15
 000A           ;   { 
 000A                   .dbline 16
 000A           ;       asm("nop"); 
 000A 0000              nop
 000C                   .dbline 17
 000C           ;   } 
 000C           L3:
 000C                   .dbline 14
 000C 4F5F              subi R20,255  ; offset = 1
 000E 5F4F              sbci R21,255
 0010           L5:
 0010                   .dbline 14
 0010 4017              cp R20,R16
 0012 5107              cpc R21,R17
 0014 D0F3              brlo L2
 0016           X0:
 0016                   .dbline -2
 0016           L1:
 0016                   .dbline 0 ; func end
 0016 5991              ld R21,y+
 0018 4991              ld R20,y+
 001A 0895              ret
 001C                   .dbsym r i 20 i
 001C                   .dbsym r n 16 i
 001C                   .dbend
 001C                   .dbfunc e delay_nms _delay_nms fV
 001C           ;              i -> R20,R21
 001C           ;              n -> R10,R11
                        .even
 001C           _delay_nms::
 001C 00D0              rcall push_xgset300C
 001E 5801              movw R10,R16
 0020                   .dbline -1
 0020                   .dbline 20
 0020           ; } 
 0020           ; void delay_nms(unsigned int n)//n毫秒延时函数 
 0020           ; { 
 0020                   .dbline 22
 0020           ;   unsigned int i; 
 0020           ;   for (i=0;i<n;i++) //执行n次1毫秒延时 
 0020 4427              clr R20
 0022 5527              clr R21
 0024 05C0              rjmp L10
 0026           L7:
 0026                   .dbline 23
 0026           ;   delay_nus(10);  
 0026 0AE0              ldi R16,10
 0028 10E0              ldi R17,0
 002A EADF              rcall _delay_nus
 002C           L8:
 002C                   .dbline 22
 002C 4F5F              subi R20,255  ; offset = 1
 002E 5F4F              sbci R21,255
 0030           L10:
 0030                   .dbline 22
 0030 4A15              cp R20,R10
 0032 5B05              cpc R21,R11
 0034 C0F3              brlo L7
 0036           X1:
 0036                   .dbline -2
 0036           L6:
 0036                   .dbline 0 ; func end
 0036 00C0              rjmp pop_xgset300C
 0038                   .dbsym r i 20 i
 0038                   .dbsym r n 10 i
 0038                   .dbend
 0038                   .dbfunc e uart0_init _uart0_init fV
                        .even
 0038           _uart0_init::
 0038                   .dbline -1
 0038                   .dbline 27
 0038           ; }             
 0038           ; /************************* UART 发送数据函数*********************************************************/
 0038           ; void uart0_init(void)
 0038           ; {
 0038                   .dbline 28
 0038           ;  UCSRB = 0x00; //disable while setting baud rate
 0038 2224              clr R2
 003A 2AB8              out 0xa,R2
 003C                   .dbline 29
 003C           ;  UCSRA = 0x00;
 003C 2BB8              out 0xb,R2
 003E                   .dbline 30
 003E           ;  UCSRC = BIT(URSEL) | 0x26;
 003E 86EA              ldi R24,166
 0040 80BD              out 0x20,R24
 0042                   .dbline 31
 0042           ;  UBRRL = 0x33; //set baud rate lo
 0042 83E3              ldi R24,51
 0044 89B9              out 0x9,R24
 0046                   .dbline 32
 0046           ;  UBRRH = 0x00; //set baud rate hi
 0046 20BC              out 0x20,R2
 0048                   .dbline 33
 0048           ;  UCSRB = 0x18;
 0048 88E1              ldi R24,24
 004A 8AB9              out 0xa,R24
 004C                   .dbline -2
 004C           L11:
 004C                   .dbline 0 ; func end
 004C 0895              ret
 004E                   .dbend
 004E                   .dbfunc e sendchar _sendchar fV
 004E           ;            num -> R16
                        .even
 004E           _sendchar::
 004E                   .dbline -1
 004E                   .dbline 36
 004E           ; }
 004E           ; void sendchar(uchar num)
 004E           ;   {      
 004E                   .dbline 37
 004E           ;       UDR=num;
 004E 0CB9              out 0xc,R16
 0050           L13:
 0050                   .dbline 38
 0050           ;       while(!(UCSRA&(1<<TXC)));
 0050           L14:
 0050                   .dbline 38
 0050 5E9B              sbis 0xb,6
 0052 FECF              rjmp L13
 0054           X2:
 0054                   .dbline 39
 0054           ;         UCSRA |= (1<<TXC);
 0054 5E9A              sbi 0xb,6
 0056                   .dbline -2
 0056           L12:
 0056                   .dbline 0 ; func end
 0056 0895              ret
 0058                   .dbsym r num 16 c
 0058                   .dbend
 0058                   .dbfunc e panduan _panduan fV
                        .even
 0058           _panduan::
 0058                   .dbline -1
 0058                   .dbline 43
 0058           ;   }
 0058           ; 
 0058           ; void panduan(void)
 0058           ;      {
 0058                   .dbline 44
 0058           ;                     IRCode[IRCON]<<=1;     //每读一次放入变量中的二进制的一个位,每次左移一位
 0058 80E0              ldi R24,<_IRCode
 005A 90E0              ldi R25,>_IRCode
 005C 20900100          lds R2,_IRCON
 0060 3324              clr R3
 0062 280E              add R2,R24
 0064 391E              adc R3,R25
 0066 F101              movw R30,R2
 0068 2080              ldd R2,z+0
 006A 220C              lsl R2
 006C 2082              std z+0,R2
 006E                   .dbline 45
 006E           ;             if(!HW)      delay_nms(42);      //延时1107us   44            
 006E 8299              sbic 0x10,2
 0070 04C0              rjmp L17
 0072           X3:
 0072                   .dbline 45
 0072 0AE2              ldi R16,42
 0074 10E0              ldi R17,0
 0076 D2DF              rcall _delay_nms
 0078 0EC0              rjmp L18
 007A           L17:
 007A                   .dbline 47
 007A           ;                    else
 007A           ;                        {
 007A                   .dbline 48
 007A           ;                                 IRCode[IRCON]|=0x01; //左移后最后一位写入 1
 007A 80E0              ldi R24,<_IRCode
 007C 90E0              ldi R25,>_IRCode
 007E 20900100          lds R2,_IRCON
 0082 3324              clr R3
 0084 280E              add R2,R24
 0086 391E              adc R3,R25
 0088 F101              movw R30,R2
 008A 8081              ldd R24,z+0
 008C 8160              ori R24,1
 008E 8083              std z+0,R24
 0090                   .dbline 49
 0090           ;                         delay_nms(89);    //延时2207us  88
 0090 09E5              ldi R16,89
 0092 10E0              ldi R17,0
 0094 C3DF              rcall _delay_nms
 0096                   .dbline 50
 0096           ;                            }
 0096           L18:
 0096                   .dbline 51
 0096           ;                         flag++;
 0096 80910000          lds R24,_flag
 009A 8F5F              subi R24,255    ; addi 1
 009C 80930000          sts _flag,R24
 00A0                   .dbline 52
 00A0           ;                                         if(flag==8) 
 00A0 8830              cpi R24,8
 00A2 61F4              brne L19
 00A4           X4:
 00A4                   .dbline 53
 00A4           ;                                                   { 
 00A4                   .dbline 54
 00A4           ;                                                           flag=0; //8为填满一个数组,计数清零
 00A4 2224              clr R2
 00A6 20920000          sts _flag,R2
 00AA                   .dbline 55
 00AA           ;                                       IRCON++;  //填满一个字节,指向下一个变量                                                    
 00AA 80910100          lds R24,_IRCON
 00AE 8F5F              subi R24,255    ; addi 1
 00B0 80930100          sts _IRCON,R24
 00B4                   .dbline 56

⌨️ 快捷键说明

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