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

📄 iremote_ir.lst

📁 一个用ICCAVR7.0开发的红外线发射程序.单片机是AVR的ATtiny13V.
💻 LST
📖 第 1 页 / 共 2 页
字号:
__start:
__text_start:
       A E9CF      LDI	R28,0x9F
       B E0D0      LDI	R29,0
       C BFCD      OUT	0x3D,R28
       D BFDE      OUT	0x3E,R29
       E 51CE      SUBI	R28,0x1E
       F 40D0      SBCI	R29,0
      10 EA0A      LDI	R16,0xAA
      11 8308      STD	Y+0,R16
      12 8300      STD	Z+0,R16
      13 E1E4      LDI	R30,0x14
      14 E0F0      LDI	R31,0
      15 E6A0      LDI	R26,0x60
      16 E0B0      LDI	R27,0
      17 E010      LDI	R17,0
      18 E000      LDI	R16,0
      19 BF0B      OUT	0x3B,R16
      1A 31E4      CPI	R30,0x14
      1B 07F1      CPC	R31,R17
      1C F021      BEQ	0x0021
      1D 95C8      LPM
      1E 9631      ADIW	R30,1
      1F 920D      ST	R0,X+
      20 CFF9      RJMP	0x001A
      21 D072      RCALL	_main
_exit:
      22 CFFF      RJMP	_exit
_timer0_ovf_isr:
      23 938A      ST	R24,-Y
      24 939A      ST	R25,-Y
      25 B78F      IN	R24,0x3F
      26 938A      ST	R24,-Y
FILE: F:\iRemote_IR\iRemote_IR.c
(0001) //ICC-AVR application builder : 2008-10-29 9:40:16
(0002) // Target : T13
(0003) // Crystal: 9.6000Mhz
(0004) #include <iot13v.h>
(0005) #define uchar unsigned char
(0006) #define uint  unsigned int
(0007) #define ulong unsigned long
(0008) #define WDR() 	asm("wdr")
(0009) #define SEI()	asm("sei")
(0010) #define CLI()	asm("cli")
(0011) #define NOP()	asm("nop")
(0012) #define SBIT(val, bitn) (val|=(1<<(bitn)))//置位
(0013) #define CBIT(val, bitn) (val&=~(1<<(bitn)))//清位
(0014) #define FBIT(val, bitn) (val^=(1<<bitn))  //位取反
(0015) #define PW_ON  SBIT(PORTB,4)
(0016) #define PW_OFF CBIT(PORTB,4)
(0017) #define IR_ON  SBIT(PORTB,0)
(0018) #define IR_OFF CBIT(PORTB,0)
(0019) uchar time_10ms;
(0020) uchar User_ID[7],pw_off_ram;
(0021) //===========================================
(0022) #pragma interrupt_handler timer0_ovf_isr:iv_TIM0_OVF
(0023) void timer0_ovf_isr(void){
(0024)  TCNT0 = 0xA3; //reload counter value
      27 EA83      LDI	R24,0xA3
      28 BF82      OUT	0x32,R24
(0025)  time_10ms++;
      29 9180 0068 LDS	R24,time_10ms
      2B 5F8F      SUBI	R24,0xFF
      2C 9380 0068 STS	time_10ms,R24
      2E 9189      LD	R24,Y+
      2F BF8F      OUT	0x3F,R24
      30 9199      LD	R25,Y+
      31 9189      LD	R24,Y+
      32 9518      RETI
(0026) }
(0027) uchar EEPROM_read(uchar Addr){
(0028)   while(EECR & (1<<EEWE));//等待上一次写操作结束
_EEPROM_read:
  Addr                 --> R16
      33 99E1      SBIC	0x1C,1
      34 CFFE      RJMP	_EEPROM_read
(0029)   EEARL = Addr;//设置地址寄存器
      35 BB0E      OUT	0x1E,R16
(0030)   EECR |= (1<<EERE);//设置EERE 以启动读操作
      36 9AE0      SBI	0x1C,0
(0031)   return EEDR;//自数据寄存器返回数据
      37 B30D      IN	R16,0x1D
      38 9508      RET
(0032) }
(0033) void EEPROM_write(uchar Addr,uchar ucdata){
(0034)   while(EECR & (1<<EEWE));//等待上一次写操作结束
_EEPROM_write:
  ucdata               --> R18
  Addr                 --> R16
      39 99E1      SBIC	0x1C,1
      3A CFFE      RJMP	_EEPROM_write
(0035)   EEAR = Addr;//设置地址和数据寄存器
      3B BB0E      OUT	0x1E,R16
(0036)   EEDR = ucdata;  
      3C BB2D      OUT	0x1D,R18
(0037)   EECR=0b00000100;//置位EEMWE
      3D E084      LDI	R24,4
      3E BB8C      OUT	0x1C,R24
(0038)   EECR=0b00000110;//置位EEWE 以启动写操作
      3F E086      LDI	R24,6
      40 BB8C      OUT	0x1C,R24
      41 9508      RET
(0039) }
(0040) void delay_500us(void){
(0041) uchar ii;
(0042) for(ii=0;ii<250;ii++){//500us/0.10417us=4799.88
_delay_500us:
  ii                   --> R16
      42 2700      CLR	R16
      43 C014      RJMP	0x0058
(0043)  WDR();NOP();NOP();NOP();NOP();NOP();NOP();
      44 95A8      WDR
      45 0000      NOP
      46 0000      NOP
      47 0000      NOP
      48 0000      NOP
      49 0000      NOP
      4A 0000      NOP
(0044)  NOP();NOP();NOP();NOP();NOP();NOP();NOP();
      4B 0000      NOP
      4C 0000      NOP
      4D 0000      NOP
      4E 0000      NOP
      4F 0000      NOP
      50 0000      NOP
      51 0000      NOP
(0045)  NOP();NOP();NOP();NOP();NOP();
      52 0000      NOP
      53 0000      NOP
      54 0000      NOP
      55 0000      NOP
      56 0000      NOP
      57 9503      INC	R16
      58 3F0A      CPI	R16,0xFA
      59 F350      BCS	0x0044
      5A 9508      RET
(0046) }
(0047) }
(0048) void ir_500us(void){
(0049) uchar ii,kk;
(0050)  ii=0;
_ir_500us:
  ii                   --> R16
  kk                   --> R18
      5B 2700      CLR	R16
(0051)  do{
(0052)    IR_ON;   //38Khz=26.3us  占空比=1/3  9.6MHz晶振时=0.10417时钟周期指令
      5C 9AC0      SBI	0x18,0
(0053)    for(kk=0;kk<20;kk++);
      5D 2722      CLR	R18
      5E C001      RJMP	0x0060
      5F 9523      INC	R18
      60 3124      CPI	R18,0x14
      61 F3E8      BCS	0x005F
(0054)    IR_OFF;  
      62 98C0      CBI	0x18,0
(0055)    for(kk=0;kk<39;kk++);
      63 2722      CLR	R18
      64 C001      RJMP	0x0066
      65 9523      INC	R18
      66 3227      CPI	R18,0x27
      67 F3E8      BCS	0x0065
(0056)    ii++;
      68 9503      INC	R16
(0057)  }while(ii<16); 
      69 3100      CPI	R16,0x10
      6A F388      BCS	0x005C
      6B 9508      RET
_send_code:
  ii                   --> R20
  mm                   --> R22
  nn                   --> R12
  kk                   --> R10
      6C D171      RCALL	push_xgsetF03C
(0058) }
(0059) void send_code(void){
(0060) uchar ii,kk,nn,mm;
(0061) for(ii=0;ii<10;ii++){
      6D 2744      CLR	R20
      6E C021      RJMP	0x0090
(0062)  ir_500us();//2.00ms+0.50ms开始码 
      6F DFEB      RCALL	_ir_500us
(0063)  ir_500us();
      70 DFEA      RCALL	_ir_500us
(0064)  ir_500us();
      71 DFE9      RCALL	_ir_500us
(0065)  ir_500us();
      72 DFE8      RCALL	_ir_500us
(0066)  delay_500us();
      73 DFCE      RCALL	_delay_500us
(0067)  for(mm=0;mm<7;mm++){
      74 2766      CLR	R22
      75 C017      RJMP	0x008D
(0068)    kk=User_ID[mm];
      76 E681      LDI	R24,0x61
      77 E090      LDI	R25,0
      78 2FE6      MOV	R30,R22
      79 27FF      CLR	R31
      7A 0FE8      ADD	R30,R24
      7B 1FF9      ADC	R31,R25
      7C 80A0      LDD	R10,Z+0
(0069)    for(nn=0;nn<8;nn++){
      7D 24CC      CLR	R12
      7E C00A      RJMP	0x0089
(0070)      if(!(kk&0x80)){
      7F FCA7      SBRC	R10,7
      80 C003      RJMP	0x0084
(0071) 	   ir_500us();//0.50ms+0.50ms逻辑低
      81 DFD9      RCALL	_ir_500us
(0072) 	   delay_500us();	 
      82 DFBF      RCALL	_delay_500us
(0073) 	 }
      83 C003      RJMP	0x0087
(0074) 	 else{
(0075) 	   ir_500us();//1.00ms+0.50ms逻辑高
      84 DFD6      RCALL	_ir_500us
(0076) 	   ir_500us();
      85 DFD5      RCALL	_ir_500us
(0077) 	   delay_500us();
      86 DFBB      RCALL	_delay_500us
(0078) 	 }
(0079) 	 kk<<=1;
      87 0CAA      LSL	R10
      88 94C3      INC	R12
      89 2D8C      MOV	R24,R12
      8A 3088      CPI	R24,0x8
      8B F398      BCS	0x007F
      8C 9563      INC	R22
      8D 3067      CPI	R22,7
      8E F338      BCS	0x0076
      8F 9543      INC	R20
      90 304A      CPI	R20,0xA
      91 F2E8      BCS	0x006F
(0080)    }
(0081)  } 
(0082) }
(0083) ir_500us();//0.50ms结束码
      92 DFC8      RCALL	_ir_500us
      93 C153      RJMP	pop_xgsetF03C
_main:
  temp4                --> R14
  temp3                --> R12
  temp5                --> R10
  ID                   --> Y,+0
  temp2                --> Y,+5
  temp1                --> Y,+4
      94 9726      SBIW	R28,6
(0084) }
(0085) void main(void){
(0086) uchar temp1,temp2,temp5;
(0087) uint temp3,temp4;
(0088) ulong ID; 
(0089)  EECR=0;
      95 2422      CLR	R2
      96 BA2C      OUT	0x1C,R2
      97 C004      RJMP	0x009C
(0090)  while(pw_off_ram==0xaa){
(0091)    DDRB  = 0b11010111;
      98 ED87      LDI	R24,0xD7
      99 BB87      OUT	0x17,R24
(0092)    PW_OFF;WDR();
      9A 98C4      CBI	0x18,4
      9B 95A8      WDR
      9C 9180 0060 LDS	R24,pw_off_ram
      9E 3A8A      CPI	R24,0xAA
      9F F3C1      BEQ	0x0098
(0093)  }
(0094)  MCUSR=0;
      A0 2422      CLR	R2
      A1 BE24      OUT	0x34,R2
(0095)  WDTCR=0x1f;
      A2 E18F      LDI	R24,0x1F
      A3 BD81      OUT	0x21,R24
(0096)  WDTCR=0x0f;//WD=2Second
      A4 E08F      LDI	R24,0xF
      A5 BD81      OUT	0x21,R24
(0097)  OCR0A = 0x5D;
      A6 E58D      LDI	R24,0x5D
      A7 BF86      OUT	0x36,R24
(0098)  OCR0B = 0x5D;
      A8 BD89      OUT	0x29,R24
(0099)  TCNT0 = 0xA3; //set count
      A9 EA83      LDI	R24,0xA3
      AA BF82      OUT	0x32,R24
(0100)  TCCR0A = 0x00; 
      AB BC2F      OUT	0x2F,R2
(0101)  TCCR0B = 0x05; //start timer   
      AC E085      LDI	R24,5
      AD BF83      OUT	0x33,R24
(0102)  TIMSK0 = 0x02;
      AE E082      LDI	R24,2
      AF BF89      OUT	0x39,R24
(0103)  SEI();  
      B0 9478      BSET	7
(0104)  PORTB = 0b11111000; 
      B1 EF88      LDI	R24,0xF8
      B2 BB88      OUT	0x18,R24
(0105)  DDRB  = 0b11010111;    
      B3 ED87      LDI	R24,0xD7
      B4 BB87      OUT	0x17,R24
(0106)  time_10ms=0;temp1=0;temp2=0;
      B5 9220 0068 STS	time_10ms,R2
      B7 2400      CLR	R0
      B8 820C      STD	Y+4,R0
      B9 820D      STD	Y+5,R0
(0107)  do{
(0108)    if(temp1!=time_10ms){
      BA 9020 0068 LDS	R2,time_10ms
      BC 800C      LDD	R0,Y+4
      BD 1402      CP	R0,R2
      BE F031      BEQ	0x00C5
(0109)      temp1=time_10ms;
      BF 822C      STD	Y+4,R2
(0110)      if((PINB&0x08)==0){
      C0 99B3      SBIC	0x16,3
      C1 C003      RJMP	0x00C5
(0111) 	   temp2++;
      C2 800D      LDD	R0,Y+5
      C3 9403      INC	R0
      C4 820D      STD	Y+5,R0
(0112) 	 }
(0113)    } 
(0114)  }while(time_10ms<10);  
      C5 9180 0068 LDS	R24,time_10ms
      C7 308A      CPI	R24,0xA
      C8 F388      BCS	0x00BA
(0115)  User_ID[0]=EEPROM_read(0x10);
      C9 E100      LDI	R16,0x10
      CA DF68      RCALL	_EEPROM_read
      CB 9300 0061 STS	User_ID,R16
(0116)  User_ID[1]=EEPROM_read(0x11);
      CD E101      LDI	R16,0x11
      CE DF64      RCALL	_EEPROM_read
      CF 9300 0062 STS	User_ID+1,R16
(0117)  User_ID[2]=EEPROM_read(0x12);
      D1 E102      LDI	R16,0x12
      D2 DF60      RCALL	_EEPROM_read

⌨️ 快捷键说明

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