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

📄 iremote_ir.lis

📁 一个用ICCAVR7.0开发的红外线发射程序.单片机是AVR的ATtiny13V.
💻 LIS
📖 第 1 页 / 共 3 页
字号:
                        .module iRemote_IR.c
                        .area text(rom, con, rel)
 0000                   .dbfile F:\iRemote_IR\iRemote_IR.c
                        .area vector(rom, abs)
                        .org 6
 0006 00C0              rjmp _timer0_ovf_isr
                        .area text(rom, con, rel)
 0000                   .dbfile F:\iRemote_IR\iRemote_IR.c
 0000                   .dbfunc e timer0_ovf_isr _timer0_ovf_isr fV
                        .even
 0000           _timer0_ovf_isr::
 0000 8A93              st -y,R24
 0002 9A93              st -y,R25
 0004 8FB7              in R24,0x3f
 0006 8A93              st -y,R24
 0008                   .dbline -1
 0008                   .dbline 23
 0008           ; //ICC-AVR application builder : 2008-10-29 9:40:16
 0008           ; // Target : T13
 0008           ; // Crystal: 9.6000Mhz
 0008           ; #include <iot13v.h>
 0008           ; #define uchar unsigned char
 0008           ; #define uint  unsigned int
 0008           ; #define ulong unsigned long
 0008           ; #define WDR()         asm("wdr")
 0008           ; #define SEI() asm("sei")
 0008           ; #define CLI() asm("cli")
 0008           ; #define NOP() asm("nop")
 0008           ; #define SBIT(val, bitn) (val|=(1<<(bitn)))//置位
 0008           ; #define CBIT(val, bitn) (val&=~(1<<(bitn)))//清位
 0008           ; #define FBIT(val, bitn) (val^=(1<<bitn))  //位取反
 0008           ; #define PW_ON  SBIT(PORTB,4)
 0008           ; #define PW_OFF CBIT(PORTB,4)
 0008           ; #define IR_ON  SBIT(PORTB,0)
 0008           ; #define IR_OFF CBIT(PORTB,0)
 0008           ; uchar time_10ms;
 0008           ; uchar User_ID[7],pw_off_ram;
 0008           ; //===========================================
 0008           ; #pragma interrupt_handler timer0_ovf_isr:iv_TIM0_OVF
 0008           ; void timer0_ovf_isr(void){
 0008                   .dbline 24
 0008           ;  TCNT0 = 0xA3; //reload counter value
 0008 83EA              ldi R24,163
 000A 82BF              out 0x32,R24
 000C                   .dbline 25
 000C           ;  time_10ms++;
 000C 80910800          lds R24,_time_10ms
 0010 8F5F              subi R24,255    ; addi 1
 0012 80930800          sts _time_10ms,R24
 0016                   .dbline -2
 0016           L1:
 0016                   .dbline 0 ; func end
 0016 8991              ld R24,y+
 0018 8FBF              out 0x3f,R24
 001A 9991              ld R25,y+
 001C 8991              ld R24,y+
 001E 1895              reti
 0020                   .dbend
 0020                   .dbfunc e EEPROM_read _EEPROM_read fc
 0020           ;           Addr -> R16
                        .even
 0020           _EEPROM_read::
 0020                   .dbline -1
 0020                   .dbline 27
 0020           ; }
 0020           ; uchar EEPROM_read(uchar Addr){
 0020           L3:
 0020                   .dbline 28
 0020           ;   while(EECR & (1<<EEWE));//等待上一次写操作结束
 0020           L4:
 0020                   .dbline 28
 0020 E199              sbic 0x1c,1
 0022 FECF              rjmp L3
 0024           X0:
 0024                   .dbline 29
 0024           ;   EEARL = Addr;//设置地址寄存器
 0024 0EBB              out 0x1e,R16
 0026                   .dbline 30
 0026           ;   EECR |= (1<<EERE);//设置EERE 以启动读操作
 0026 E09A              sbi 0x1c,0
 0028                   .dbline 31
 0028           ;   return EEDR;//自数据寄存器返回数据
 0028 0DB3              in R16,0x1d
 002A                   .dbline -2
 002A           L2:
 002A                   .dbline 0 ; func end
 002A 0895              ret
 002C                   .dbsym r Addr 16 c
 002C                   .dbend
 002C                   .dbfunc e EEPROM_write _EEPROM_write fV
 002C           ;         ucdata -> R18
 002C           ;           Addr -> R16
                        .even
 002C           _EEPROM_write::
 002C                   .dbline -1
 002C                   .dbline 33
 002C           ; }
 002C           ; void EEPROM_write(uchar Addr,uchar ucdata){
 002C           L7:
 002C                   .dbline 34
 002C           ;   while(EECR & (1<<EEWE));//等待上一次写操作结束
 002C           L8:
 002C                   .dbline 34
 002C E199              sbic 0x1c,1
 002E FECF              rjmp L7
 0030           X1:
 0030                   .dbline 35
 0030           ;   EEAR = Addr;//设置地址和数据寄存器
 0030 0EBB              out 0x1e,R16
 0032                   .dbline 36
 0032           ;   EEDR = ucdata;  
 0032 2DBB              out 0x1d,R18
 0034                   .dbline 37
 0034           ;   EECR=0b00000100;//置位EEMWE
 0034 84E0              ldi R24,4
 0036 8CBB              out 0x1c,R24
 0038                   .dbline 38
 0038           ;   EECR=0b00000110;//置位EEWE 以启动写操作
 0038 86E0              ldi R24,6
 003A 8CBB              out 0x1c,R24
 003C                   .dbline -2
 003C           L6:
 003C                   .dbline 0 ; func end
 003C 0895              ret
 003E                   .dbsym r ucdata 18 c
 003E                   .dbsym r Addr 16 c
 003E                   .dbend
 003E                   .dbfunc e delay_500us _delay_500us fV
 003E           ;             ii -> R16
                        .even
 003E           _delay_500us::
 003E                   .dbline -1
 003E                   .dbline 40
 003E           ; }
 003E           ; void delay_500us(void){
 003E                   .dbline 42
 003E           ; uchar ii;
 003E           ; for(ii=0;ii<250;ii++){//500us/0.10417us=4799.88
 003E 0027              clr R16
 0040 14C0              rjmp L14
 0042           L11:
 0042                   .dbline 42
 0042                   .dbline 43
 0042           ;  WDR();NOP();NOP();NOP();NOP();NOP();NOP();
 0042 A895              wdr
 0044                   .dbline 43
 0044 0000              nop
 0046                   .dbline 43
 0046 0000              nop
 0048                   .dbline 43
 0048 0000              nop
 004A                   .dbline 43
 004A 0000              nop
 004C                   .dbline 43
 004C 0000              nop
 004E                   .dbline 43
 004E 0000              nop
 0050                   .dbline 44
 0050           ;  NOP();NOP();NOP();NOP();NOP();NOP();NOP();
 0050 0000              nop
 0052                   .dbline 44
 0052 0000              nop
 0054                   .dbline 44
 0054 0000              nop
 0056                   .dbline 44
 0056 0000              nop
 0058                   .dbline 44
 0058 0000              nop
 005A                   .dbline 44
 005A 0000              nop
 005C                   .dbline 44
 005C 0000              nop
 005E                   .dbline 45
 005E           ;  NOP();NOP();NOP();NOP();NOP();
 005E 0000              nop
 0060                   .dbline 45
 0060 0000              nop
 0062                   .dbline 45
 0062 0000              nop
 0064                   .dbline 45
 0064 0000              nop
 0066                   .dbline 45
 0066 0000              nop
 0068                   .dbline 46
 0068           ; }
 0068           L12:
 0068                   .dbline 42
 0068 0395              inc R16
 006A           L14:
 006A                   .dbline 42
 006A 0A3F              cpi R16,250
 006C 50F3              brlo L11
 006E           X2:
 006E                   .dbline -2
 006E           L10:
 006E                   .dbline 0 ; func end
 006E 0895              ret
 0070                   .dbsym r ii 16 c
 0070                   .dbend
 0070                   .dbfunc e ir_500us _ir_500us fV
 0070           ;             ii -> R16
 0070           ;             kk -> R18
                        .even
 0070           _ir_500us::
 0070                   .dbline -1
 0070                   .dbline 48
 0070           ; }
 0070           ; void ir_500us(void){
 0070                   .dbline 50
 0070           ; uchar ii,kk;
 0070           ;  ii=0;
 0070 0027              clr R16
 0072           L16:
 0072                   .dbline 51
 0072           ;  do{
 0072                   .dbline 52
 0072           ;    IR_ON;   //38Khz=26.3us  占空比=1/3  9.6MHz晶振时=0.10417时钟周期指令
 0072 C09A              sbi 0x18,0
 0074                   .dbline 53
 0074           ;    for(kk=0;kk<20;kk++);
 0074 2227              clr R18
 0076 01C0              rjmp L22
 0078           L19:
 0078                   .dbline 53
 0078           L20:
 0078                   .dbline 53
 0078 2395              inc R18
 007A           L22:
 007A                   .dbline 53
 007A 2431              cpi R18,20
 007C E8F3              brlo L19
 007E           X3:
 007E                   .dbline 54
 007E           ;    IR_OFF;  
 007E C098              cbi 0x18,0
 0080                   .dbline 55
 0080           ;    for(kk=0;kk<39;kk++);
 0080 2227              clr R18
 0082 01C0              rjmp L26
 0084           L23:
 0084                   .dbline 55
 0084           L24:
 0084                   .dbline 55
 0084 2395              inc R18
 0086           L26:
 0086                   .dbline 55
 0086 2732              cpi R18,39
 0088 E8F3              brlo L23
 008A           X4:
 008A                   .dbline 56
 008A           ;    ii++;
 008A 0395              inc R16
 008C                   .dbline 57
 008C           ;  }while(ii<16); 
 008C           L17:
 008C                   .dbline 57
 008C 0031              cpi R16,16
 008E 88F3              brlo L16
 0090           X5:
 0090                   .dbline -2
 0090           L15:
 0090                   .dbline 0 ; func end
 0090 0895              ret
 0092                   .dbsym r ii 16 c
 0092                   .dbsym r kk 18 c
 0092                   .dbend
 0092                   .dbfunc e send_code _send_code fV
 0092           ;             ii -> R20
 0092           ;             mm -> R22
 0092           ;             nn -> R12
 0092           ;             kk -> R10
                        .even
 0092           _send_code::
 0092 00D0              rcall push_xgsetF03C
 0094                   .dbline -1
 0094                   .dbline 59
 0094           ; }
 0094           ; void send_code(void){
 0094                   .dbline 61
 0094           ; uchar ii,kk,nn,mm;
 0094           ; for(ii=0;ii<10;ii++){
 0094 4427              clr R20
 0096 21C0              rjmp L31
 0098           L28:
 0098                   .dbline 61
 0098                   .dbline 62
 0098           ;  ir_500us();//2.00ms+0.50ms开始码 
 0098 EBDF              rcall _ir_500us
 009A                   .dbline 63
 009A           ;  ir_500us();
 009A EADF              rcall _ir_500us
 009C                   .dbline 64
 009C           ;  ir_500us();
 009C E9DF              rcall _ir_500us
 009E                   .dbline 65
 009E           ;  ir_500us();
 009E E8DF              rcall _ir_500us
 00A0                   .dbline 66
 00A0           ;  delay_500us();
 00A0 CEDF              rcall _delay_500us
 00A2                   .dbline 67
 00A2           ;  for(mm=0;mm<7;mm++){
 00A2 6627              clr R22
 00A4 17C0              rjmp L35
 00A6           L32:
 00A6                   .dbline 67
 00A6                   .dbline 68
 00A6           ;    kk=User_ID[mm];
 00A6 80E0              ldi R24,<_User_ID
 00A8 90E0              ldi R25,>_User_ID
 00AA E62F              mov R30,R22
 00AC FF27              clr R31
 00AE E80F              add R30,R24
 00B0 F91F              adc R31,R25
 00B2 A080              ldd R10,z+0
 00B4                   .dbline 69
 00B4           ;    for(nn=0;nn<8;nn++){
 00B4 CC24              clr R12
 00B6 0AC0              rjmp L39
 00B8           L36:
 00B8                   .dbline 69
 00B8                   .dbline 70
 00B8           ;      if(!(kk&0x80)){
 00B8 A7FC              sbrc R10,7
 00BA 03C0              rjmp L40
 00BC           X6:
 00BC                   .dbline 70
 00BC                   .dbline 71
 00BC           ;          ir_500us();//0.50ms+0.50ms逻辑低
 00BC D9DF              rcall _ir_500us
 00BE                   .dbline 72
 00BE           ;          delay_500us();        
 00BE BFDF              rcall _delay_500us
 00C0                   .dbline 73
 00C0           ;        }
 00C0 03C0              rjmp L41

⌨️ 快捷键说明

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