📄 ire.lis
字号:
.module ire.c
.area text(rom, con, rel)
0000 .dbfile ..\..\..\..\..\DOCUME~1\wdd\MYDOCU~1\16实验程序\红外发射\ire.c
0000 .dbfile C:\DOCUME~1\wdd\MYDOCU~1\16实验程序\红外发射\ire.c
0000 .dbfunc e port_init _port_init fV
.even
0000 _port_init::
0000 .dbline -1
0000 .dbline 8
0000 ; #include <iom16v.h>
0000 ; #include <macros.h>
0000 ; #define uchar unsigned char
0000 ; #define uint unsigned int
0000 ;
0000 ; //端口初始化
0000 ; void port_init(void)
0000 ; {
0000 .dbline 9
0000 ; PORTA = 0xff;
0000 8FEF ldi R24,255
0002 8BBB out 0x1b,R24
0004 .dbline 10
0004 ; DDRA = 0xff;
0004 8ABB out 0x1a,R24
0006 .dbline 11
0006 ; PORTB = 0xff;
0006 88BB out 0x18,R24
0008 .dbline 12
0008 ; DDRB = 0xff;
0008 87BB out 0x17,R24
000A .dbline 13
000A ; PORTC = 0xff;
000A 85BB out 0x15,R24
000C .dbline 14
000C ; DDRC = 0xff;
000C 84BB out 0x14,R24
000E .dbline 15
000E ; PORTD = 0xff;
000E 82BB out 0x12,R24
0010 .dbline 16
0010 ; DDRD = 0xff;
0010 81BB out 0x11,R24
0012 .dbline -2
0012 L1:
0012 .dbline 0 ; func end
0012 0895 ret
0014 .dbend
0014 .dbfunc e timer0_init _timer0_init fV
.even
0014 _timer0_init::
0014 .dbline -1
0014 .dbline 22
0014 ; }
0014 ;
0014 ; //T0初始化,产生38k的载波
0014 ; // actual value: 38.462KHz (1.2%)
0014 ; void timer0_init(void)
0014 ; {
0014 .dbline 23
0014 ; TCCR0 = 0x00; //stop
0014 2224 clr R2
0016 23BE out 0x33,R2
0018 .dbline 24
0018 ; ASSR = 0x00; //set async mode
0018 22BC out 0x22,R2
001A .dbline 25
001A ; TCNT0 = 0xe8; //set count
001A 88EE ldi R24,232
001C 82BF out 0x32,R24
001E .dbline 26
001E ; OCR0 = 0x34;
001E 84E3 ldi R24,52
0020 8CBF out 0x3c,R24
0022 .dbline 27
0022 ; TCCR0 = 0x02; //start timer
0022 82E0 ldi R24,2
0024 83BF out 0x33,R24
0026 .dbline -2
0026 L2:
0026 .dbline 0 ; func end
0026 0895 ret
0028 .dbend
.area vector(rom, abs)
.org 36
0024 0C941400 jmp _timer0_ovf_isr
.area text(rom, con, rel)
0028 .dbfile C:\DOCUME~1\wdd\MYDOCU~1\16实验程序\红外发射\ire.c
0028 .dbfunc e timer0_ovf_isr _timer0_ovf_isr fV
.even
0028 _timer0_ovf_isr::
0028 2A92 st -y,R2
002A 8A93 st -y,R24
002C 2FB6 in R2,0x3f
002E 2A92 st -y,R2
0030 .dbline -1
0030 .dbline 33
0030 ; }
0030 ;
0030 ; //T0中断
0030 ; #pragma interrupt_handler timer0_ovf_isr:iv_TIM0_OVF
0030 ; void timer0_ovf_isr(void)
0030 ; {
0030 .dbline 34
0030 ; TCNT0 = 0xe8; //reload counter value
0030 88EE ldi R24,232
0032 82BF out 0x32,R24
0034 .dbline 35
0034 ; PORTD^=(1<<1); //引脚输出38K信号
0034 82E0 ldi R24,2
0036 22B2 in R2,0x12
0038 2826 eor R2,R24
003A 22BA out 0x12,R2
003C .dbline -2
003C L3:
003C .dbline 0 ; func end
003C 2990 ld R2,y+
003E 2FBE out 0x3f,R2
0040 8991 ld R24,y+
0042 2990 ld R2,y+
0044 1895 reti
0046 .dbend
0046 .dbfunc e timer1_init _timer1_init fI
0046 ; tl -> R18
0046 ; th -> R16
.even
0046 _timer1_init::
0046 .dbline -1
0046 .dbline 43
0046 ; }
0046 ;
0046 ; //TIMER1 initialize - prescale:8
0046 ; // WGM: 0) Normal, TOP=0xFFFF
0046 ; // desired value: 588Hz
0046 ; // actual value: 588.062Hz (0.0%)
0046 ; timer1_init(uchar th,uchar tl)
0046 ; {
0046 .dbline 44
0046 ; TIFR|=0X04; //复位溢出标志
0046 88B7 in R24,0x38
0048 8460 ori R24,4
004A 88BF out 0x38,R24
004C .dbline 45
004C ; TCCR1B = 0x00; //stop
004C 2224 clr R2
004E 2EBC out 0x2e,R2
0050 .dbline 46
0050 ; TCNT1H = th; //setup
0050 0DBD out 0x2d,R16
0052 .dbline 47
0052 ; TCNT1L = tl;
0052 2CBD out 0x2c,R18
0054 .dbline 48
0054 ; TCCR1A = 0x00;
0054 2FBC out 0x2f,R2
0056 .dbline 49
0056 ; TCCR1B = 0x02; //start Timer
0056 82E0 ldi R24,2
0058 8EBD out 0x2e,R24
005A L5:
005A .dbline 50
005A ; while(!(TIFR&0X04)); //溢出后离开
005A L6:
005A .dbline 50
005A 28B6 in R2,0x38
005C 22FE sbrs R2,2
005E FDCF rjmp L5
0060 X0:
0060 .dbline -2
0060 L4:
0060 .dbline 0 ; func end
0060 0895 ret
0062 .dbsym r tl 18 c
0062 .dbsym r th 16 c
0062 .dbend
0062 .dbfunc e init_devices _init_devices fV
.even
0062 _init_devices::
0062 .dbline -1
0062 .dbline 55
0062 ; }
0062 ;
0062 ; //call this routine to initialize all peripherals
0062 ; void init_devices(void)
0062 ; {
0062 .dbline 57
0062 ; //stop errant interrupts until set up
0062 ; CLI(); //disable all interrupts
0062 F894 cli
0064 .dbline 58
0064 ; port_init();
0064 CDDF xcall _port_init
0066 .dbline 59
0066 ; timer0_init();
0066 D6DF xcall _timer0_init
0068 .dbline 61
0068 ;
0068 ; MCUCR = 0x00;
0068 2224 clr R2
006A 25BE out 0x35,R2
006C .dbline 62
006C ; GICR = 0x00;
006C 2BBE out 0x3b,R2
006E .dbline 63
006E ; TIMSK = 0x01; //timer interrupt sources
006E 81E0 ldi R24,1
0070 89BF out 0x39,R24
0072 .dbline 64
0072 ; SEI(); //re-enable interrupts
0072 7894 sei
0074 .dbline -2
0074 L8:
0074 .dbline 0 ; func end
0074 0895 ret
0076 .dbend
0076 .dbfunc e out_1 _out_1 fI
.even
0076 _out_1::
0076 .dbline -1
0076 .dbline 69
0076 ; //all peripherals are now initialized
0076 ; }
0076 ;
0076 ; out_1() //输出1
0076 ; {
0076 .dbline 70
0076 ; TIMSK=0x01; //发送
0076 81E0 ldi R24,1
0078 89BF out 0x39,R24
007A .dbline 71
007A ; timer1_init(0xfb,0xa0); //560us
007A 20EA ldi R18,160
007C 0BEF ldi R16,251
007E E3DF xcall _timer1_init
0080 .dbline 72
0080 ; TIMSK=0x00; //停止发送
0080 2224 clr R2
0082 29BE out 0x39,R2
0084 .dbline 73
0084 ; timer1_init(0xf2,0xb7); //1650us
0084 27EB ldi R18,183
0086 02EF ldi R16,242
0088 .dbline -2
0088 L9:
0088 .dbline 0 ; func end
0088 DECF xjmp _timer1_init
008A .dbend
008A .dbfunc e out_0 _out_0 fI
.even
008A _out_0::
008A .dbline -1
008A .dbline 77
008A ; }
008A ;
008A ; out_0() //输出0
008A ; {
008A .dbline 78
008A ; TIMSK=0x01; //发送
008A 81E0 ldi R24,1
008C 89BF out 0x39,R24
008E .dbline 79
008E ; timer1_init(0xfb,0xa0); //560us
008E 20EA ldi R18,160
0090 0BEF ldi R16,251
0092 D9DF xcall _timer1_init
0094 .dbline 80
0094 ; TIMSK=0x00; //停止发送
0094 2224 clr R2
0096 29BE out 0x39,R2
0098 .dbline 81
0098 ; timer1_init(0xfb,0xa0); //560us
0098 20EA ldi R18,160
009A 0BEF ldi R16,251
009C .dbline -2
009C L10:
009C .dbline 0 ; func end
009C D4CF xjmp _timer1_init
009E .dbend
009E .dbfunc e out_f _out_f fI
.even
009E _out_f::
009E .dbline -1
009E .dbline 85
009E ; }
009E ;
009E ; out_f() //输出结束
009E ; {
009E .dbline 86
009E ; TIMSK=0x01; //发送
009E 81E0 ldi R24,1
00A0 89BF out 0x39,R24
00A2 .dbline 87
00A2 ; timer1_init(0xfb,0xa0); //560us
00A2 20EA ldi R18,160
00A4 0BEF ldi R16,251
00A6 CFDF xcall _timer1_init
00A8 .dbline 88
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -