?? ire.s
字號:
.module ire.c
.area text(rom, con, rel)
.dbfile ..\..\..\..\..\DOCUME~1\wdd\MYDOCU~1\16實驗程序\紅外發(fā)射\ire.c
.dbfile C:\DOCUME~1\wdd\MYDOCU~1\16實驗程序\紅外發(fā)射\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初始化,產(chǎn)生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實驗程序\紅外發(fā)射\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; //發(fā)送
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; //停止發(fā)送
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; //發(fā)送
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; //停止發(fā)送
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; //發(fā)送
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; //停止發(fā)送
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
; }
;
; //發(fā)送函數(shù)
; void send_n(uchar aa,uchar bb) //aa系統(tǒng)碼,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
; //發(fā)送系統(tǒng)碼
; 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
; //發(fā)送系統(tǒng)反碼
; 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
; //發(fā)送鍵碼
; 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
; //發(fā)送鍵碼反碼
; 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); //發(fā)送遙控碼
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 + -