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

📄 ire.lis

📁 16个单片机c语言实验程序
💻 LIS
📖 第 1 页 / 共 2 页
字号:
                        .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 + -