?? irr.s
字號:
.dbline 231
cbi 0x1b,7
.dbline 232
ldi R16,200
ldi R17,0
xcall _s_ms
.dbline 233
subi R20,255 ; offset = 1
sbci R21,255
.dbline 234
L41:
.dbline 223
dec R10
L43:
.dbline 223
tst R10
brne L40
X10:
.dbline -2
L37:
.dbline 0 ; func end
xjmp pop_xgsetF03C
.dbsym r t 12 c
.dbsym r i 10 c
.dbsym r pBuffer 20 pc
.dbsym l num 8 i
.dbsym r col 10 c
.dbsym r row 22 c
.dbend
.area vector(rom, abs)
.org 4
jmp _ext_int0_isr
.area text(rom, con, rel)
.dbfile C:\DOCUME~1\wdd\MYDOCU~1\16實驗程序\紅外接收\1602.h
.area data(ram, con, rel)
.dbfile C:\DOCUME~1\wdd\MYDOCU~1\16實驗程序\紅外接收\1602.h
_irr_b::
.blkb 1
.area idata
.byte 0
.area data(ram, con, rel)
.dbfile C:\DOCUME~1\wdd\MYDOCU~1\16實驗程序\紅外接收\1602.h
.dbfile C:\DOCUME~1\wdd\MYDOCU~1\16實驗程序\紅外接收\irr.c
.dbsym e irr_b _irr_b c
_s_s::
.blkb 1
.area idata
.byte 0
.area data(ram, con, rel)
.dbfile C:\DOCUME~1\wdd\MYDOCU~1\16實驗程序\紅外接收\irr.c
.dbsym e s_s _s_s c
_wb::
.blkb 1
.area idata
.byte 0
.area data(ram, con, rel)
.dbfile C:\DOCUME~1\wdd\MYDOCU~1\16實驗程序\紅外接收\irr.c
.dbsym e wb _wb c
_a::
.blkb 1
.area idata
.byte 0
.area data(ram, con, rel)
.dbfile C:\DOCUME~1\wdd\MYDOCU~1\16實驗程序\紅外接收\irr.c
.dbsym e a _a c
_ds::
.blkb 1
.area idata
.byte 0
.area data(ram, con, rel)
.dbfile C:\DOCUME~1\wdd\MYDOCU~1\16實驗程序\紅外接收\irr.c
.dbsym e ds _ds c
_da::
.blkb 4
.area idata
.word 0,0
.area data(ram, con, rel)
.dbfile C:\DOCUME~1\wdd\MYDOCU~1\16實驗程序\紅外接收\irr.c
.dbsym e da _da L
.area text(rom, con, rel)
.dbfile C:\DOCUME~1\wdd\MYDOCU~1\16實驗程序\紅外接收\irr.c
.dbfunc e ext_int0_isr _ext_int0_isr fV
.even
_ext_int0_isr::
st -y,R2
st -y,R3
st -y,R4
st -y,R5
st -y,R16
st -y,R17
st -y,R18
st -y,R19
st -y,R24
st -y,R25
st -y,R26
st -y,R27
in R2,0x3f
st -y,R2
.dbline -1
.dbline 17
; //Atmega16的紅外遙控器接收試驗
; //使用1602液晶進行顯示,
; #include<iom16v.h>
; #include"1602.h"
; #pragma interrupt_handler ext_int0_isr:2 //指定外部中斷函數
; #define uchar unsigned char
; #define uint unsigned int
;
; uchar irr_b=0,s_s=0;
; uchar wb=0,a=0,ds=0;
; long da=0;
; uchar d1,d2,d3,d4;
; uchar ten_1,ten_2,ten_3,ten_4,i;
;
; //中斷接收
; void ext_int0_isr(void)
; {
.dbline 18
; if(irr_b==0) //第一個中斷
lds R2,_irr_b
tst R2
brne L45
X11:
.dbline 19
; {
.dbline 20
; irr_b=1; //狀態為:開始接收
ldi R24,1
sts _irr_b,R24
.dbline 21
; TCNT1L=0x00; //定時器清零
clr R2
out 0x2c,R2
.dbline 22
; }
xjmp L46
L45:
.dbline 23
; else if(irr_b==1) //第二個以后的中斷
lds R24,_irr_b
cpi R24,1
breq X20
xjmp L47
X20:
X12:
.dbline 24
; {
.dbline 25
; a=TCNT1L; //讀取定時器的值
in R2,0x2c
sts _a,R2
.dbline 27
; //判斷是引導,還是數據
; if((170<a)&&(a<235)) //引導
mov R4,R2
clr R3
ldi R24,170
ldi R25,0
cp R24,R2
cpc R25,R3
brge L49
X13:
mov R24,R2
cpi R24,235
brsh L49
X14:
.dbline 28
; {
.dbline 29
; wb=0; //數據計數清零
clr R2
sts _wb,R2
.dbline 30
; da=0; //數據清零
ldi R24,0
ldi R25,0
ldi R26,0
ldi R27,0
sts _da+1,R25
sts _da,R24
sts _da+2+1,R27
sts _da+2,R26
.dbline 31
; TCNT1L=0x00; //定時器清零
out 0x2c,R2
.dbline 32
; }
xjmp L50
L49:
.dbline 33
; else if((8<a)&&(a<25)) //數據0
lds R2,_a
ldi R24,8
cp R24,R2
brsh L51
X15:
mov R24,R2
cpi R24,25
brsh L51
X16:
.dbline 34
; {
.dbline 35
; wb++;
lds R24,_wb
subi R24,255 ; addi 1
sts _wb,R24
.dbline 36
; da=(da<<1);
lds R4,_da+2
lds R5,_da+2+1
lds R2,_da
lds R3,_da+1
lsl R2
rol R3
rol R4
rol R5
sts _da+1,R3
sts _da,R2
sts _da+2+1,R5
sts _da+2,R4
.dbline 37
; TCNT1L=0x00;
clr R2
out 0x2c,R2
.dbline 38
; }
xjmp L52
L51:
.dbline 39
; else if((25<a)&&(a<45)) //數據1
lds R16,_a
ldi R24,25
cp R24,R16
brsh L53
X17:
cpi R16,45
brsh L53
X18:
.dbline 40
; {
.dbline 41
; wb++;
lds R24,_wb
subi R24,255 ; addi 1
sts _wb,R24
.dbline 42
; da=(da<<1)+1;
ldi R24,1
ldi R25,0
ldi R26,0
ldi R27,0
lds R4,_da+2
lds R5,_da+2+1
lds R2,_da
lds R3,_da+1
lsl R2
rol R3
rol R4
rol R5
add R2,R24
adc R3,R25
adc R4,R26
adc R5,R27
sts _da+1,R3
sts _da,R2
sts _da+2+1,R5
sts _da+2,R4
.dbline 43
; TCNT1L=0x00;
clr R2
out 0x2c,R2
.dbline 44
; }
L53:
L52:
L50:
.dbline 45
; }
L47:
L46:
.dbline 46
; if(wb==32) //數據長度夠32位
lds R24,_wb
cpi R24,32
brne L55
X19:
.dbline 47
; {
.dbline 48
; irr_b=0; //狀態為停止接收
clr R2
sts _irr_b,R2
.dbline 49
; wb=0; //數據計數清零
sts _wb,R2
.dbline 50
; s_s=1; //打開顯示許可
ldi R24,1
sts _s_s,R24
.dbline 51
; }
L55:
.dbline -2
L44:
.dbline 0 ; func end
ld R2,y+
out 0x3f,R2
ld R27,y+
ld R26,y+
ld R25,y+
ld R24,y+
ld R19,y+
ld R18,y+
ld R17,y+
ld R16,y+
ld R5,y+
ld R4,y+
ld R3,y+
ld R2,y+
reti
.dbend
.dbfunc e t1_init _t1_init fV
.even
_t1_init::
.dbline -1
.dbline 56
; }
;
; //定時器T1初始化
; void t1_init()
; {
.dbline 57
; TCCR1B=0x00; //關閉定時器
clr R2
out 0x2e,R2
.dbline 58
; TCNT1H=0x00; //定時器初值
out 0x2d,R2
.dbline 59
; TCNT1L=0x00;
out 0x2c,R2
.dbline 60
; TCCR1A=0x00; //普通模式
out 0x2f,R2
.dbline 61
; TCCR1B=0x05; //1024分頻
ldi R24,5
out 0x2e,R24
.dbline -2
L57:
.dbline 0 ; func end
ret
.dbend
.dbfunc e main _main fI
.even
_main::
sbiw R28,2
.dbline -1
.dbline 66
; }
;
; //主函數
; main()
; {
.dbline 68
; //初始化端口
; DDRA=0xff;
ldi R24,255
out 0x1a,R24
.dbline 69
; PORTA=0x00;
clr R2
out 0x1b,R2
.dbline 70
; DDRB=0xff;
out 0x17,R24
.dbline 71
; DDRD=0x00; //中斷輸入
out 0x11,R2
.dbline 72
; PORTD=0xff; //內部上拉
out 0x12,R24
.dbline 74
;
; t1_init(); //定時器t1初始化
xcall _t1_init
.dbline 76
;
; MCUCR = 0x02; //下降沿中斷
ldi R24,2
out 0x35,R24
.dbline 77
; GICR = 0x40; //開外部中斷int_0
ldi R24,64
out 0x3b,R24
.dbline 78
; TIMSK = 0x00;
clr R2
out 0x39,R2
.dbline 79
; SREG=0x80; //開全局中斷
ldi R24,128
out 0x3f,R24
.dbline 80
; s_s=1; //開機進行一次顯示
ldi R24,1
sts _s_s,R24
xjmp L60
L59:
.dbline 82
; while(1)
; {
.dbline 83
; ds=TCNT1L;
in R2,0x2c
sts _ds,R2
.dbline 84
; if(ds>250) //定時器超時,接收復位
ldi R24,250
cp R24,R2
brsh L62
X21:
.dbline 85
; {
.dbline 86
; TCNT1L=0;
clr R2
out 0x2c,R2
.dbline 87
; irr_b=0;
sts _irr_b,R2
.dbline 88
; da=0;
ldi R24,0
ldi R25,0
ldi R26,0
ldi R27,0
sts _da+1,R25
sts _da,R24
sts _da+2+1,R27
sts _da+2,R26
.dbline 89
; wb=0;
sts _wb,R2
.dbline 90
; s_s=0;
sts _s_s,R2
.dbline 91
; }
L62:
.dbline 92
; if(s_s==1) //顯示開關打開,開始顯示
lds R24,_s_s
cpi R24,1
breq X24
xjmp L64
X24:
X22:
.dbline 93
; {
.dbline 94
; SREG=0x00; //關閉全局中斷
clr R2
out 0x3f,R2
.dbline 95
; LcdInit(); //1602初始化
xcall _LcdInit
.dbline 97
; //顯示設備碼
; d1=da>>24;
ldi R24,24
ldi R25,0
lds R18,_da+2
lds R19,_da+2+1
lds R16,_da
lds R17,_da+1
st -y,R24
xcall asr32
sts _d1,R16
.dbline 98
; ten_1=d1/100;
ldi R17,100
xcall div8u
sts _ten_1,R16
.dbline 99
; ten_2=(d1-(100*ten_1))/10;
mov R2,R16
ldi R24,100
mul R24,R2
lds R16,_d1
sub R16,R0
ldi R17,10
xcall div8u
sts _ten_2,R16
.dbline 100
; ten_3=d1-(100*ten_1)-ten_2*10;
lds R2,_ten_1
ldi R24,100
mul R24,R2
lds R2,_d1
sub R2,R0
mov R3,R16
ldi R24,10
mul R24,R3
sub R2,R0
sts _ten_3,R2
.dbline 101
; WriteNum(1,0,ten_1);
lds R2,_ten_1
clr R3
std y+1,R3
std y+0,R2
clr R18
clr R19
ldi R16,1
ldi R17,0
xcall _WriteNum
.dbline 102
; WriteNum(1,1,ten_2);
lds R2,_ten_2
clr R3
std y+1,R3
std y+0,R2
ldi R18,1
ldi R19,0
ldi R16,1
ldi R17,0
xcall _WriteNum
.dbline 103
; WriteNum(1,2,ten_3);
lds R2,_ten_3
clr R3
std y+1,R3
std y+0,R2
ldi R18,2
ldi R19,0
ldi R16,1
ldi R17,0
xcall _WriteNum
.dbline 105
; //顯示設備碼反碼
; d1=da>>16;
lds R2,_da+2
lds R3,_da+3
sts _d1,R2
.dbline 106
; ten_1=d1/100;
ldi R17,100
mov R16,R2
xcall div8u
sts _ten_1,R16
.dbline 107
; ten_2=(d1-(100*ten_1))/10;
mov R2,R16
ldi R24,100
mul R24,R2
lds R16,_d1
sub R16,R0
ldi R17,10
xcall div8u
sts _ten_2,R16
.dbline 108
; ten_3=d1-(100*ten_1)-ten_2*10;
lds R2,_ten_1
ldi R24,100
mul R24,R2
lds R2,_d1
sub R2,R0
mov R3,R16
ldi R24,10
mul R24,R3
sub R2,R0
sts _ten_3,R2
.dbline 109
; WriteNum(1,4,ten_1);
lds R2,_ten_1
clr R3
std y+1,R3
std y+0,R2
ldi R18,4
ldi R19,0
ldi R16,1
ldi R17,0
xcall _WriteNum
.dbline 110
; WriteNum(1,5,ten_2);
lds R2,_ten_2
clr R3
std y+1,R3
std y+0,R2
ldi R18,5
ldi R19,0
ldi R16,1
ldi R17,0
xcall _WriteNum
.dbline 111
; WriteNum(1,6,ten_3);
lds R2,_ten_3
clr R3
std y+1,R3
std y+0,R2
ldi R18,6
ldi R19,0
ldi R16,1
ldi R17,0
xcall _WriteNum
.dbline 113
; //顯示鍵碼
; d1=da>>8;
ldi R24,8
ldi R25,0
lds R18,_da+2
lds R19,_da+2+1
lds R16,_da
lds R17,_da+1
st -y,R24
xcall asr32
sts _d1,R16
.dbline 114
; ten_1=d1/100;
ldi R17,100
xcall div8u
sts _ten_1,R16
.dbline 115
; ten_2=(d1-(100*ten_1))/10;
mov R2,R16
ldi R24,100
mul R24,R2
lds R16,_d1
sub R16,R0
ldi R17,10
xcall div8u
sts _ten_2,R16
.dbline 116
; ten_3=d1-(100*ten_1)-ten_2*10;
lds R2,_ten_1
ldi R24,100
mul R24,R2
lds R2,_d1
sub R2,R0
mov R3,R16
ldi R24,10
mul R24,R3
sub R2,R0
sts _ten_3,R2
.dbline 117
; WriteNum(1,8,ten_1);
lds R2,_ten_1
clr R3
std y+1,R3
std y+0,R2
ldi R18,8
ldi R19,0
ldi R16,1
ldi R17,0
xcall _WriteNum
.dbline 118
; WriteNum(1,9,ten_2);
lds R2,_ten_2
clr R3
std y+1,R3
std y+0,R2
ldi R18,9
ldi R19,0
ldi R16,1
ldi R17,0
xcall _WriteNum
.dbline 119
; WriteNum(1,10,ten_3);
lds R2,_ten_3
clr R3
std y+1,R3
std y+0,R2
ldi R18,10
ldi R19,0
ldi R16,1
ldi R17,0
xcall _WriteNum
.dbline 121
; //顯示鍵碼反碼
; d1=da;
lds R2,_da
lds R3,_da+1
sts _d1,R2
.dbline 122
; ten_1=d1/100;
ldi R17,100
mov R16,R2
xcall div8u
sts _ten_1,R16
.dbline 123
; ten_2=(d1-(100*ten_1))/10;
mov R2,R16
ldi R24,100
mul R24,R2
lds R16,_d1
sub R16,R0
ldi R17,10
xcall div8u
sts _ten_2,R16
.dbline 124
; ten_3=d1-(100*ten_1)-ten_2*10;
lds R2,_ten_1
ldi R24,100
mul R24,R2
lds R2,_d1
sub R2,R0
mov R3,R16
ldi R24,10
mul R24,R3
sub R2,R0
sts _ten_3,R2
.dbline 125
; WriteNum(1,12,ten_1);
lds R2,_ten_1
clr R3
std y+1,R3
std y+0,R2
ldi R18,12
ldi R19,0
ldi R16,1
ldi R17,0
xcall _WriteNum
.dbline 126
; WriteNum(1,13,ten_2);
lds R2,_ten_2
clr R3
std y+1,R3
std y+0,R2
ldi R18,13
ldi R19,0
ldi R16,1
ldi R17,0
xcall _WriteNum
.dbline 127
; WriteNum(1,14,ten_3);
lds R2,_ten_3
clr R3
std y+1,R3
std y+0,R2
ldi R18,14
ldi R19,0
ldi R16,1
ldi R17,0
xcall _WriteNum
.dbline 129
; //復位D端口
; DDRD=0x00; //中斷輸入
clr R2
out 0x11,R2
.dbline 130
; PORTD=0xff; //內部上拉
ldi R24,255
out 0x12,R24
.dbline 131
; s_s=0; //關閉顯示開關
sts _s_s,R2
.dbline 132
; SREG=0x80; //開全局中斷
ldi R24,128
out 0x3f,R24
.dbline 133
; }
L64:
.dbline 134
; }
L60:
.dbline 81
xjmp L59
X23:
.dbline -2
L58:
.dbline 0 ; func end
adiw R28,2
ret
.dbend
.area bss(ram, con, rel)
.dbfile C:\DOCUME~1\wdd\MYDOCU~1\16實驗程序\紅外接收\irr.c
_i::
.blkb 1
.dbsym e i _i c
_ten_4::
.blkb 1
.dbsym e ten_4 _ten_4 c
_ten_3::
.blkb 1
.dbsym e ten_3 _ten_3 c
_ten_2::
.blkb 1
.dbsym e ten_2 _ten_2 c
_ten_1::
.blkb 1
.dbsym e ten_1 _ten_1 c
_d4::
.blkb 1
.dbsym e d4 _d4 c
_d3::
.blkb 1
.dbsym e d3 _d3 c
_d2::
.blkb 1
.dbsym e d2 _d2 c
_d1::
.blkb 1
.dbsym e d1 _d1 c
; }
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -