📄 iremote_ir.lis
字号:
.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 + -