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

📄 ire.s

📁 16个单片机c语言实验程序
💻 S
字号:
	.module ire.c
	.area text(rom, con, rel)
	.dbfile ..\..\..\..\..\DOCUME~1\wdd\MYDOCU~1\16实验程序\红外发射\ire.c
	.dbfile C:\DOCUME~1\wdd\MYDOCU~1\16实验程序\红外发射\ire.c
	.dbfunc e port_init _port_init fV
	.even
_port_init::
	.dbline -1
	.dbline 8
; #include <iom16v.h>
; #include <macros.h>
; #define uchar unsigned char
; #define uint unsigned int
; 
; //端口初始化
; void port_init(void)
; {
	.dbline 9
;  PORTA = 0xff;
	ldi R24,255
	out 0x1b,R24
	.dbline 10
;  DDRA  = 0xff;
	out 0x1a,R24
	.dbline 11
;  PORTB = 0xff;
	out 0x18,R24
	.dbline 12
;  DDRB  = 0xff;
	out 0x17,R24
	.dbline 13
;  PORTC = 0xff; 
	out 0x15,R24
	.dbline 14
;  DDRC  = 0xff;
	out 0x14,R24
	.dbline 15
;  PORTD = 0xff;
	out 0x12,R24
	.dbline 16
;  DDRD  = 0xff;
	out 0x11,R24
	.dbline -2
L1:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e timer0_init _timer0_init fV
	.even
_timer0_init::
	.dbline -1
	.dbline 22
; }
; 
; //T0初始化,产生38k的载波
; // actual value: 38.462KHz (1.2%)
; void timer0_init(void)
; {
	.dbline 23
;  TCCR0 = 0x00; //stop
	clr R2
	out 0x33,R2
	.dbline 24
;  ASSR  = 0x00; //set async mode
	out 0x22,R2
	.dbline 25
;  TCNT0 = 0xe8; //set count
	ldi R24,232
	out 0x32,R24
	.dbline 26
;  OCR0  = 0x34;
	ldi R24,52
	out 0x3c,R24
	.dbline 27
;  TCCR0 = 0x02; //start timer
	ldi R24,2
	out 0x33,R24
	.dbline -2
L2:
	.dbline 0 ; func end
	ret
	.dbend
	.area vector(rom, abs)
	.org 36
	jmp _timer0_ovf_isr
	.area text(rom, con, rel)
	.dbfile C:\DOCUME~1\wdd\MYDOCU~1\16实验程序\红外发射\ire.c
	.dbfunc e timer0_ovf_isr _timer0_ovf_isr fV
	.even
_timer0_ovf_isr::
	st -y,R2
	st -y,R24
	in R2,0x3f
	st -y,R2
	.dbline -1
	.dbline 33
; }
; 
; //T0中断
; #pragma interrupt_handler timer0_ovf_isr:iv_TIM0_OVF
; void timer0_ovf_isr(void)
; {
	.dbline 34
;  TCNT0 = 0xe8; //reload counter value
	ldi R24,232
	out 0x32,R24
	.dbline 35
;  PORTD^=(1<<1);  //引脚输出38K信号
	ldi R24,2
	in R2,0x12
	eor R2,R24
	out 0x12,R2
	.dbline -2
L3:
	.dbline 0 ; func end
	ld R2,y+
	out 0x3f,R2
	ld R24,y+
	ld R2,y+
	reti
	.dbend
	.dbfunc e timer1_init _timer1_init fI
;             tl -> R18
;             th -> R16
	.even
_timer1_init::
	.dbline -1
	.dbline 43
; }
; 
; //TIMER1 initialize - prescale:8
; // WGM: 0) Normal, TOP=0xFFFF
; // desired value: 588Hz
; // actual value: 588.062Hz (0.0%)
; timer1_init(uchar th,uchar tl)
; {
	.dbline 44
;  TIFR|=0X04;          //复位溢出标志
	in R24,0x38
	ori R24,4
	out 0x38,R24
	.dbline 45
;  TCCR1B = 0x00;       //stop
	clr R2
	out 0x2e,R2
	.dbline 46
;  TCNT1H = th;         //setup
	out 0x2d,R16
	.dbline 47
;  TCNT1L = tl;
	out 0x2c,R18
	.dbline 48
;  TCCR1A = 0x00;
	out 0x2f,R2
	.dbline 49
;  TCCR1B = 0x02;       //start Timer
	ldi R24,2
	out 0x2e,R24
L5:
	.dbline 50
;  while(!(TIFR&0X04)); //溢出后离开
L6:
	.dbline 50
	in R2,0x38
	sbrs R2,2
	rjmp L5
X0:
	.dbline -2
L4:
	.dbline 0 ; func end
	ret
	.dbsym r tl 18 c
	.dbsym r th 16 c
	.dbend
	.dbfunc e init_devices _init_devices fV
	.even
_init_devices::
	.dbline -1
	.dbline 55
; }
; 
; //call this routine to initialize all peripherals
; void init_devices(void)
; {
	.dbline 57
;  //stop errant interrupts until set up
;  CLI(); //disable all interrupts
	cli
	.dbline 58
;  port_init();
	xcall _port_init
	.dbline 59
;  timer0_init();
	xcall _timer0_init
	.dbline 61
; 
;  MCUCR = 0x00;
	clr R2
	out 0x35,R2
	.dbline 62
;  GICR  = 0x00;
	out 0x3b,R2
	.dbline 63
;  TIMSK = 0x01; //timer interrupt sources
	ldi R24,1
	out 0x39,R24
	.dbline 64
;  SEI(); //re-enable interrupts
	sei
	.dbline -2
L8:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e out_1 _out_1 fI
	.even
_out_1::
	.dbline -1
	.dbline 69
;  //all peripherals are now initialized
; }
; 
; out_1() //输出1
; {
	.dbline 70
; TIMSK=0x01;               //发送
	ldi R24,1
	out 0x39,R24
	.dbline 71
; timer1_init(0xfb,0xa0);  //560us
	ldi R18,160
	ldi R16,251
	xcall _timer1_init
	.dbline 72
; TIMSK=0x00;               //停止发送
	clr R2
	out 0x39,R2
	.dbline 73
; timer1_init(0xf2,0xb7);  //1650us
	ldi R18,183
	ldi R16,242
	.dbline -2
L9:
	.dbline 0 ; func end
	xjmp _timer1_init
	.dbend
	.dbfunc e out_0 _out_0 fI
	.even
_out_0::
	.dbline -1
	.dbline 77
; }
; 
; out_0() //输出0
; {
	.dbline 78
; TIMSK=0x01;               //发送
	ldi R24,1
	out 0x39,R24
	.dbline 79
; timer1_init(0xfb,0xa0);  //560us
	ldi R18,160
	ldi R16,251
	xcall _timer1_init
	.dbline 80
; TIMSK=0x00;               //停止发送
	clr R2
	out 0x39,R2
	.dbline 81
; timer1_init(0xfb,0xa0);  //560us
	ldi R18,160
	ldi R16,251
	.dbline -2
L10:
	.dbline 0 ; func end
	xjmp _timer1_init
	.dbend
	.dbfunc e out_f _out_f fI
	.even
_out_f::
	.dbline -1
	.dbline 85
; }
; 
; out_f() //输出结束
; {
	.dbline 86
; TIMSK=0x01;               //发送
	ldi R24,1
	out 0x39,R24
	.dbline 87
; timer1_init(0xfb,0xa0);  //560us
	ldi R18,160
	ldi R16,251
	xcall _timer1_init
	.dbline 88
; TIMSK=0x00;               //停止发送
	clr R2
	out 0x39,R2
	.dbline -2
L11:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e send_n _send_n fV
;              i -> R22
;             cc -> R20
;             bb -> R10
;             aa -> R12
	.even
_send_n::
	xcall push_xgsetF03C
	mov R10,R18
	mov R12,R16
	.dbline -1
	.dbline 93
; }
; 
; //发送函数
; void send_n(uchar aa,uchar bb)  //aa系统码,bb键码
; {
	.dbline 95
;  uchar cc,i;
;  TIMSK=0x01;
	ldi R24,1
	out 0x39,R24
	.dbline 96
;  timer1_init(0xb9,0x9e);     //引导码9ms低
	ldi R18,158
	ldi R16,185
	xcall _timer1_init
	.dbline 97
;  TIMSK=0x00;
	clr R2
	out 0x39,R2
	.dbline 98
;  timer1_init(0xdc,0xcf);     //引导码4.5ms高
	ldi R18,207
	ldi R16,220
	xcall _timer1_init
	.dbline 100
;  //发送系统码      
;  cc=0x80;
	ldi R20,128
	.dbline 101
;  for(i=0;i<8;i++)        
	clr R22
	xjmp L16
L13:
	.dbline 102
;     {
	.dbline 103
;      if(aa&cc)
	mov R2,R12
	and R2,R20
	breq L17
X1:
	.dbline 104
;        {
	.dbline 105
;         out_1();
	xcall _out_1
	.dbline 106
;        }
	xjmp L18
L17:
	.dbline 108
;      else
;        {       
	.dbline 109
;         out_0();
	xcall _out_0
	.dbline 110
;        }
L18:
	.dbline 111
;     cc=cc>>1;
	lsr R20
	.dbline 112
;     }
L14:
	.dbline 101
	inc R22
L16:
	.dbline 101
	cpi R22,8
	brlo L13
X2:
	.dbline 114
;  //发送系统反码
;  aa=~aa;
	com R12
	.dbline 115
;  cc=0x80;
	ldi R20,128
	.dbline 116
;  for(i=0;i<8;i++)        
	clr R22
	xjmp L22
L19:
	.dbline 117
;     {
	.dbline 118
;      if(aa&cc)
	mov R2,R12
	and R2,R20
	breq L23
X3:
	.dbline 119
;        {
	.dbline 120
;         out_1();
	xcall _out_1
	.dbline 121
;        }
	xjmp L24
L23:
	.dbline 123
;      else
;        {       
	.dbline 124
;         out_0();
	xcall _out_0
	.dbline 125
;        }
L24:
	.dbline 126
;     cc=cc>>1;
	lsr R20
	.dbline 127
;     }
L20:
	.dbline 116
	inc R22
L22:
	.dbline 116
	cpi R22,8
	brlo L19
X4:
	.dbline 129
;  //发送键码   
;  cc=0x80;
	ldi R20,128
	.dbline 130
;  for(i=0;i<8;i++)
	clr R22
	xjmp L28
L25:
	.dbline 131
;     {
	.dbline 132
;      if(bb&cc)
	mov R2,R10
	and R2,R20
	breq L29
X5:
	.dbline 133
;        {
	.dbline 134
;         out_1();
	xcall _out_1
	.dbline 135
;        }
	xjmp L30
L29:
	.dbline 137
;      else
;        {       
	.dbline 138
;         out_0();
	xcall _out_0
	.dbline 139
;        }
L30:
	.dbline 140
;     cc=cc>>1;
	lsr R20
	.dbline 141
;     }
L26:
	.dbline 130
	inc R22
L28:
	.dbline 130
	cpi R22,8
	brlo L25
X6:
	.dbline 143
;  //发送键码反码
;  bb=~bb;
	com R10
	.dbline 144
;  cc=0x80;
	ldi R20,128
	.dbline 145
;  for(i=0;i<8;i++)
	clr R22
	xjmp L34
L31:
	.dbline 146
;     {
	.dbline 147
;      if(bb&cc)
	mov R2,R10
	and R2,R20
	breq L35
X7:
	.dbline 148
;        {
	.dbline 149
;         out_1();
	xcall _out_1
	.dbline 150
;        }
	xjmp L36
L35:
	.dbline 152
;      else
;        {       
	.dbline 153
;         out_0();
	xcall _out_0
	.dbline 154
;        }
L36:
	.dbline 155
;     cc=cc>>1;
	lsr R20
	.dbline 156
;     }
L32:
	.dbline 145
	inc R22
L34:
	.dbline 145
	cpi R22,8
	brlo L31
X8:
	.dbline 158
; //结束
; out_f();
	xcall _out_f
	.dbline -2
L12:
	.dbline 0 ; func end
	xjmp pop_xgsetF03C
	.dbsym r i 22 c
	.dbsym r cc 20 c
	.dbsym r bb 10 c
	.dbsym r aa 12 c
	.dbend
	.dbfunc e main _main fI
	.even
_main::
	.dbline -1
	.dbline 162
; }
; 
; main()
; {
	.dbline 163
; init_devices();
	xcall _init_devices
	xjmp L39
L38:
	.dbline 165
; while(1)
;      {
	.dbline 166
;       send_n(0x00,0x58);   //发送遥控码
	ldi R18,88
	clr R16
	xcall _send_n
L41:
	.dbline 167
; 	  while(1);
L42:
	.dbline 167
	xjmp L41
L39:
	.dbline 164
	xjmp L38
X9:
	.dbline -2
L37:
	.dbline 0 ; func end
	ret
	.dbend
;      }
; }

⌨️ 快捷键说明

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