infrared_measure.lis

来自「AVR 红外接收源代码,对学习红外的人很有帮助」· LIS 代码 · 共 222 行

LIS
222
字号
                        .module infrared_measure.c
                        .area text(rom, con, rel)
 0000                   .dbfile E:\avr\开发板\source\INFRARED\infrared_measure\infrared_measure.c
 0000                   .dbfunc e init_infr _init_infr fV
 0000           ;              i -> R16
                        .even
 0000           _init_infr::
 0000                   .dbline -1
 0000                   .dbline 25
 0000           ; /******************************************/
 0000           ; /*             北京MCU学习之家            */
 0000           ; /* 采集红外输入数据的高低电平保持时间程序 */
 0000           ; /*             作者:白如冰                */
 0000           ; /*             2005年10月1日              */
 0000           ; /*  目标MCU:MEGA8   晶振:外部(EXT) 8MHZ   */
 0000           ; /******************************************/
 0000           ; //红外接收头的引脚定义 
 0000           ; //   1----->data-----> (PD3(int1))
 0000           ; //   2----->gnd
 0000           ; //   3----->vss
 0000           ; /******************************************/
 0000           ; 
 0000           ; #include <iom8v.h>
 0000           ; #include <macros.h>
 0000           ; 
 0000           ; #define INFR_DIR      DDRD
 0000           ; #define INFR_PORT     PORTD
 0000           ; #define INFR_DATA     3
 0000           ; unsigned int counter_buffer[100];
 0000           ; unsigned char flag_start,n;
 0000           ; 
 0000           ; /* 初始化外部中断1 */  
 0000           ; void init_infr(void) 
 0000           ;     {
 0000                   .dbline 27
 0000           ;        unsigned char i;
 0000           ;        INFR_DIR&=~(1<<INFR_DATA); //PD3为输入方向
 0000 8B98              cbi 0x11,3
 0002                   .dbline 28
 0002           ;        INFR_PORT|=1<<INFR_DATA;   //PD3初始为高电平
 0002 939A              sbi 0x12,3
 0004                   .dbline 29
 0004           ;        MCUCR = 0x04; //int1 电平变化产生中断
 0004 84E0              ldi R24,4
 0006 85BF              out 0x35,R24
 0008                   .dbline 30
 0008           ;      GICR  = 0x80; //int1 外部中断使能 
 0008 80E8              ldi R24,128
 000A 8BBF              out 0x3b,R24
 000C                   .dbline 31
 000C           ;        TCCR1B=0;//关闭定时器T1
 000C 2224              clr R2
 000E 2EBC              out 0x2e,R2
 0010                   .dbline 32
 0010           ;        TCNT1=0; //初始值为0
 0010 3324              clr R3
 0012 3DBC              out 0x2d,R3
 0014 2CBC              out 0x2c,R2
 0016                   .dbline 33
 0016           ;        flag_start=0;
 0016 20920100          sts _flag_start,R2
 001A                   .dbline 34
 001A           ;        n=0;
 001A 20920000          sts _n,R2
 001E                   .dbline 35
 001E           ;        for(i=0;i<100;i++)
 001E 0027              clr R16
 0020 0CC0              rjmp L5
 0022           L2:
 0022                   .dbline 36
 0022 82E0              ldi R24,2
 0024 809F              mul R24,R16
 0026 F001              movw R30,R0
 0028 80E0              ldi R24,<_counter_buffer
 002A 90E0              ldi R25,>_counter_buffer
 002C E80F              add R30,R24
 002E F91F              adc R31,R25
 0030 2224              clr R2
 0032 3324              clr R3
 0034 3182              std z+1,R3
 0036 2082              std z+0,R2
 0038           L3:
 0038                   .dbline 35
 0038 0395              inc R16
 003A           L5:
 003A                   .dbline 35
 003A 0436              cpi R16,100
 003C 90F3              brlo L2
 003E                   .dbline 37
 003E           ;        counter_buffer[i]=0;
 003E           ;        SEI();  //全局中断使能
 003E 7894              sei
 0040                   .dbline -2
 0040                   .dbline 39
 0040           ;      
 0040           ;     }
 0040           L1:
 0040                   .dbline 0 ; func end
 0040 0895              ret
 0042                   .dbsym r i 16 c
 0042                   .dbend
                        .area vector(rom, abs)
                        .org 4
 0004 21C0              rjmp _int1_isr
                        .area text(rom, con, rel)
 0042                   .dbfile E:\avr\开发板\source\INFRARED\infrared_measure\infrared_measure.c
 0042                   .dbfunc e int1_isr _int1_isr fV
                        .even
 0042           _int1_isr::
 0042 2A92              st -y,R2
 0044 3A92              st -y,R3
 0046 0A93              st -y,R16
 0048 1A93              st -y,R17
 004A 2A93              st -y,R18
 004C 3A93              st -y,R19
 004E 8A93              st -y,R24
 0050 9A93              st -y,R25
 0052 EA93              st -y,R30
 0054 FA93              st -y,R31
 0056 2FB6              in R2,0x3f
 0058 2A92              st -y,R2
 005A                   .dbline -1
 005A                   .dbline 44
 005A           ; 
 005A           ; /*外部中断1 中断函数 */       
 005A           ; #pragma interrupt_handler int1_isr:iv_INT1
 005A           ; void int1_isr(void)
 005A           ; { 
 005A                   .dbline 46
 005A           ;   
 005A           ;   if(flag_start==0)
 005A 20900100          lds R2,_flag_start
 005E 2220              tst R2
 0060 31F4              brne L7
 0062                   .dbline 47
 0062           ;   {
 0062                   .dbline 48
 0062           ;     TCCR1B=2;//开始计时 8分频
 0062 82E0              ldi R24,2
 0064 8EBD              out 0x2e,R24
 0066                   .dbline 49
 0066           ;       flag_start=1;
 0066 81E0              ldi R24,1
 0068 80930100          sts _flag_start,R24
 006C                   .dbline 50
 006C           ;   }
 006C 1CC0              rjmp L8
 006E           L7:
 006E                   .dbline 53
 006E                   .dbline 54
 006E 2224              clr R2
 0070 2EBC              out 0x2e,R2
 0072                   .dbline 55
 0072 20900000          lds R2,_n
 0076 3324              clr R3
 0078 822D              mov R24,R2
 007A 8F5F              subi R24,255    ; addi 1
 007C 80930000          sts _n,R24
 0080 02E0              ldi R16,2
 0082 10E0              ldi R17,0
 0084 9101              movw R18,R2
 0086 00D0              rcall empy16s
 0088 F801              movw R30,R16
 008A 80E0              ldi R24,<_counter_buffer
 008C 90E0              ldi R25,>_counter_buffer
 008E E80F              add R30,R24
 0090 F91F              adc R31,R25
 0092 2CB4              in R2,0x2c
 0094 3DB4              in R3,0x2d
 0096 3182              std z+1,R3
 0098 2082              std z+0,R2
 009A                   .dbline 56
 009A 2224              clr R2
 009C 3324              clr R3
 009E 3DBC              out 0x2d,R3
 00A0 2CBC              out 0x2c,R2
 00A2                   .dbline 57
 00A2 82E0              ldi R24,2
 00A4 8EBD              out 0x2e,R24
 00A6                   .dbline 58
 00A6           L8:
 00A6                   .dbline -2
 00A6                   .dbline 61
 00A6           ;   
 00A6           ;   else
 00A6           ;   {
 00A6           ;      TCCR1B=0;
 00A6           ;        counter_buffer[n++]=TCNT1;
 00A6           ;        TCNT1=0;
 00A6           ;      TCCR1B=2;
 00A6           ;   } 
 00A6           ; 
 00A6           ;   
 00A6           ; }
 00A6           L6:
 00A6 2990              ld R2,y+
 00A8 2FBE              out 0x3f,R2
 00AA F991              ld R31,y+
 00AC E991              ld R30,y+
 00AE 9991              ld R25,y+
 00B0 8991              ld R24,y+
 00B2 3991              ld R19,y+
 00B4 2991              ld R18,y+
 00B6 1991              ld R17,y+
 00B8 0991              ld R16,y+
 00BA 3990              ld R3,y+
 00BC 2990              ld R2,y+
 00BE                   .dbline 0 ; func end
 00BE 1895              reti
 00C0                   .dbend
                        .area bss(ram, con, rel)
 0000                   .dbfile E:\avr\开发板\source\INFRARED\infrared_measure\infrared_measure.c
 0000           _n::
 0000                   .blkb 1
 0001                   .dbsym e n _n c
 0001           _flag_start::
 0001                   .blkb 1
 0002                   .dbsym e flag_start _flag_start c
 0002           _counter_buffer::
 0002                   .blkb 200
 00CA                   .dbsym e counter_buffer _counter_buffer A[200:100]i

⌨️ 快捷键说明

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