📄 解读.s
字号:
.module _解读.c
.area text(rom, con, rel)
.dbfile E:\单片机\AVR程序\红外解读/12864.h
.dbfunc e delay_1us _delay_1us fV
.even
_delay_1us::
.dbline -1
.dbline 28
; //包含所需头文件
; #include <ioM16v.h>
; #include <macros.h>
; #include"12864.h"
;
;
; char jieshou[11]="1111111111";
; uint oldFall;
; uchar bitcnt=0;
; uchar data0=0;//在接收单字节时可以作为辨识码,接收数据组时应作为存储下标 本程序用作存储下标
; uchar data1=0;//操作码
; /*uchar num;
; uint bb;*/
; /*
; void clearjieshou()
; {uchar i;
; for(i=1;i<=49;i++)
; {
; jieshou[i-1]=0x00;
; }
; }*/
; //端口初始化
; void port_init(void)
; {
; PORTA = 0x0E;
; DDRA = 0x0E;
; PORTB = 0x00;
; DDRB = 0x00;
.dbline 29
; PORTC = 0x00;
nop
.dbline -2
L1:
.dbline 0 ; func end
ret
.dbend
.dbfunc e delay_nus _delay_nus fV
; i -> R20,R21
; n -> R22,R23
.even
_delay_nus::
xcall push_gset2
movw R22,R16
.dbline -1
.dbline 32
; DDRC = 0x00;
; PORTD = 0x00;
; DDRD = 0x00;
.dbline 33
; }
clr R20
clr R21
.dbline 34
;
xjmp L6
L3:
.dbline 35
xcall _delay_1us
L4:
.dbline 34
subi R20,255 ; offset = 1
sbci R21,255
L6:
.dbline 34
cp R20,R22
cpc R21,R23
brlo L3
.dbline -2
L2:
xcall pop_gset2
.dbline 0 ; func end
ret
.dbsym r i 20 i
.dbsym r n 22 i
.dbend
.dbfunc e delay_1ms _delay_1ms fV
; i -> R16,R17
.even
_delay_1ms::
.dbline -1
.dbline 38
;
; //定时T1初始化
; void timer1_init(void)
; {
.dbline 40
clr R16
clr R17
xjmp L11
L8:
.dbline 40
L9:
.dbline 40
subi R16,255 ; offset = 1
sbci R17,255
L11:
.dbline 40
; TCCR1B = 0x00;//停止定时器
; TIMSK |= 0x20;//中断允许
cpi R16,116
ldi R30,4
cpc R17,R30
brlo L8
.dbline -2
L7:
.dbline 0 ; func end
ret
.dbsym r i 16 i
.dbend
.dbfunc e delay_nms _delay_nms fV
; i -> R20,R21
; n -> R22,R23
.even
_delay_nms::
xcall push_gset2
movw R22,R16
.dbline -1
.dbline 43
; TCNT1H = 0xFF;
; TCNT1L = 0xFF;//初始值
; OCR1AH = 0xFE;
.dbline 44
; OCR1AL = 0xFF;//匹配A值
clr R20
clr R21
.dbline 45
; OCR1BH = 0xFE;
xjmp L16
L13:
.dbline 46
xcall _delay_1ms
L14:
.dbline 45
subi R20,255 ; offset = 1
sbci R21,255
L16:
.dbline 45
cp R20,R22
cpc R21,R23
brlo L13
.dbline -2
L12:
xcall pop_gset2
.dbline 0 ; func end
ret
.dbsym r i 20 i
.dbsym r n 22 i
.dbend
.dbfunc e send_8bit _send_8bit fV
; i -> R20
; ch -> R22
.even
_send_8bit::
xcall push_gset2
mov R22,R16
.dbline -1
.dbline 56
; OCR1BL = 0xFF;//匹配B值
; ICR1H = 0xFF;
; ICR1L = 0xFF;//输入捕捉匹配值
; TCCR1A = 0x00;
; TCCR1B = 0x42;//启动定时器
; }
;
;
;
; //定时器T1输入捕捉中断服务程序
; #pragma interrupt_handler timer1_capt_isr:6
.dbline 58
; void timer1_capt_isr(void)
; {
clr R20
xjmp L21
L18:
.dbline 59
; uint temp,newFall;
.dbline 59
sbi 0x1b,3
ldi R16,1
ldi R17,0
xcall _delay_nus
.dbline 60
; newFall=ICR1;
mov R16,R22
mov R17,R20
xcall lsl8
mov R24,R16
andi R24,128
breq L22
.dbline 60
sbi 0x1b,2
xjmp L23
L22:
.dbline 61
; temp=newFall-oldFall; //计算脉冲加间隔的时间
cbi 0x1b,2
L23:
.dbline 62
cbi 0x1b,3
ldi R16,1
ldi R17,0
xcall _delay_nus
.dbline 63
L19:
.dbline 58
inc R20
L21:
.dbline 58
cpi R20,8
brlo L18
.dbline -2
L17:
xcall pop_gset2
.dbline 0 ; func end
ret
.dbsym r i 20 c
.dbsym r ch 22 c
.dbend
.dbfunc e WriteData _WriteData fV
; data -> R20
.even
_WriteData::
xcall push_gset1
mov R20,R16
.dbline -1
.dbline 67
; oldFall=newFall;
; if(temp>724 && temp<1525) // "0"信号
; {
; temp=0;
; }
; else if(temp>1845 && temp<2645) //"1"信号
.dbline 68
; {
sbi 0x1b,1
.dbline 69
; temp=1;
ldi R16,250
xcall _send_8bit
.dbline 70
; }
mov R16,R20
andi R16,240
xcall _send_8bit
.dbline 71
; else if(temp>13100 && temp<13900) //header信号
mov R16,R20
andi R16,#0x0F
swap R16
xcall _send_8bit
.dbline 72
; {
cbi 0x1b,1
.dbline -2
L24:
xcall pop_gset1
.dbline 0 ; func end
ret
.dbsym r data 20 c
.dbend
.dbfunc e WriteCommand _WriteCommand fV
; command -> R20
.even
_WriteCommand::
xcall push_gset1
mov R20,R16
.dbline -1
.dbline 76
; bitcnt=0;
; data0=0;
; data1=0;
; return; //返回,等待下次开始接收
.dbline 77
; }
sbi 0x1b,1
.dbline 78
; else ///干扰信号
ldi R16,248
xcall _send_8bit
.dbline 79
; {
mov R16,R20
andi R16,240
xcall _send_8bit
.dbline 80
;
mov R16,R20
andi R16,#0x0F
swap R16
xcall _send_8bit
.dbline 81
; return;
cbi 0x1b,1
.dbline -2
L25:
xcall pop_gset1
.dbline 0 ; func end
ret
.dbsym r command 20 c
.dbend
.dbfunc e guangbiao _guangbiao fV
; x -> R20
.even
_guangbiao::
xcall push_gset1
mov R20,R16
.dbline -1
.dbline 85
; }
; bitcnt++;
; if(bitcnt<16) //开始接收前16位
; {
.dbline 86
; data0=data0|(uint)temp;
cpi R20,1
brne L27
.dbline 86
ldi R16,15
xcall _WriteCommand
xjmp L28
L27:
.dbline 87
ldi R16,12
xcall _WriteCommand
L28:
.dbline -2
L26:
xcall pop_gset1
.dbline 0 ; func end
ret
.dbsym r x 20 c
.dbend
.dbfunc e Set_display_Adress _Set_display_Adress fV
; address -> R20
; x -> R22
; y -> R20
.even
_Set_display_Adress::
xcall push_gset2
mov R22,R18
mov R20,R16
.dbline -1
.dbline 92
; data0=data0<<1;
; }
; else if(bitcnt==16)
; {
; data0=data0|(uint)temp;
; }
.dbline 94
; else if(bitcnt<32) //开始接收后16位
; {
clr R21
cpi R20,0
cpc R20,R21
breq L33
X0:
cpi R20,1
ldi R30,0
cpc R21,R30
breq L34
cpi R20,2
ldi R30,0
cpc R21,R30
breq L35
cpi R20,3
ldi R30,0
cpc R21,R30
breq L36
xjmp L30
X1:
.dbline 95
; data1=data1|(uint)temp;
L33:
.dbline 97
; data1=data1<<1;
; }
mov R20,R22
subi R20,128 ; addi 128
.dbline 98
; else if(bitcnt==32) //接收完最后一位
xjmp L31
L34:
.dbline 100
; {
; data1=data1|(uint)temp;
mov R20,R22
subi R20,112 ; addi 144
.dbline 101
; }
xjmp L31
L35:
.dbline 103
; }
;
mov R20,R22
subi R20,120 ; addi 136
.dbline 104
;
xjmp L31
L36:
.dbline 106
; void init_devices(void)
; {
mov R20,R22
subi R20,104 ; addi 152
.dbline 107
; CLI(); //禁止所有中断
L30:
L31:
.dbline 109
; GICR = 0x00;
; port_init();
mov R16,R20
xcall _WriteCommand
.dbline -2
L29:
xcall pop_gset2
.dbline 0 ; func end
ret
.dbsym r address 20 c
.dbsym r x 22 c
.dbsym r y 20 c
.dbend
.dbfunc e display_String _display_String fV
; i -> R20
; s -> R22,R23
; x -> R10
; y -> R12
.even
_display_String::
xcall push_gset5
mov R10,R18
mov R12,R16
ldd R22,y+10
ldd R23,y+11
.dbline -1
.dbline 113
; lcd12864_init();
; timer1_init();
; SEI();//开全局中断
; }
.dbline 114
; //主函数
clr R20
.dbline 115
; void main(void)
movw R30,R22
ldd R2,z+0
tst R2
brne L38
.dbline 115
xjmp L37
L38:
.dbline 116
; {
clr R20
L40:
.dbline 117
; init_devices();
.dbline 118
; //在这继续添加你的代码
mov R30,R20
clr R31
add R30,R22
adc R31,R23
ldd R2,z+0
tst R2
brne L44
.dbline 118
xjmp L42
L44:
.dbline 119
; while(1)
tst R20
brne L48
ldi R24,1
ldi R25,0
movw R14,R24
xjmp L49
L48:
clr R14
clr R15
L49:
ldi R18,2
ldi R19,0
movw R16,R14
xcall mod16s
cpi R16,0
cpc R16,R17
breq L46
X2:
.dbline 120
; {
mov R18,R10
mov R16,R12
xcall _Set_display_Adress
L46:
.dbline 121
;
mov R30,R20
clr R31
add R30,R22
adc R31,R23
ldd R16,z+0
xcall _WriteData
.dbline 122
; if(bitcnt==32&&data0==127)//接收完成
ldi R17,2
mov R16,R20
xcall mod8u
tst R16
breq L50
.dbline 122
inc R10
L50:
.dbline 123
; {
ldi R24,7
cp R24,R10
brsh L52
.dbline 123
.dbline 123
inc R12
clr R10
.dbline 123
L52:
.dbline 124
L41:
.dbline 116
inc R20
.dbline 116
xjmp L40
L42:
.dbline -2
L37:
xcall pop_gset5
.dbline 0 ; func end
ret
.dbsym r i 20 c
.dbsym r s 22 pc
.dbsym r x 10 c
.dbsym r y 12 c
.dbend
.dbfunc e display_Char _display_Char fV
; ch -> y+4
; x -> R22
; y -> R20
.even
_display_Char::
xcall push_gset2
mov R22,R18
mov R20,R16
.dbline -1
.dbline 128
; CLI();
; switch(data1)
; {
; case 87 : PORTD=0x01;//确定
; break;
.dbline 129
; case 39 :PORTD=0x02;//暂停
mov R18,R22
mov R16,R20
xcall _Set_display_Adress
.dbline 130
; break;
ldd R16,y+4
xcall _WriteData
.dbline -2
L54:
xcall pop_gset2
.dbline 0 ; func end
ret
.dbsym l ch 4 c
.dbsym r x 22 c
.dbsym r y 20 c
.dbend
.dbfunc e display_Num _display_Num fV
; tmp -> y+0
; i -> R20
; N -> R22
; num -> R10,R11
; x -> R12
; y -> R14
.even
_display_Num::
xcall push_gset5
mov R12,R18
mov R14,R16
sbiw R28,5
ldd R10,y+15
ldd R11,y+16
ldd R22,y+17
.dbline -1
.dbline 135
; case 23 :PORTD=0x04;//上
; break;
; case 167 :PORTD=0x08;//下
; break;
; case 215 :PORTD=0x10;//右
.dbline 138
; break;
; case 79 :PORTD=0x20;//左
; break;
clr R20
xjmp L59
L56:
.dbline 139
.dbline 140
ldi R18,10
ldi R19,0
movw R16,R10
xcall mod16u
movw R24,R28
mov R30,R20
clr R31
add R30,R24
adc R31,R25
std z+0,R16
.dbline 141
ldi R18,10
ldi R19,0
movw R16,R10
xcall div16u
movw R10,R16
.dbline 142
L57:
.dbline 138
inc R20
L59:
.dbline 138
cp R20,R22
brlo L56
.dbline 142
; case 7 :PORTD=0x40;//菜单
; break;
; case 207 :PORTD=0x80;//退出
; break;
.dbline 143
; default:PORTD=0x00;break;
dec R20
xjmp L61
L60:
.dbline 145
; }
; }
.dbline 146
; }
mov R18,R12
mov R16,R14
xcall _Set_display_Adress
.dbline 147
; }
mov R2,R20
clr R3
subi R20,1
movw R24,R28
mov R30,R2
clr R31
add R30,R24
adc R31,R25
ldd R16,z+0
subi R16,208 ; addi 48
xcall _WriteData
.dbline 148
;
tst R20
brne L63
.dbline 149
;
.dbline 149
movw R24,R28
mov R30,R20
clr R31
add R30,R24
adc R31,R25
ldd R16,z+0
subi R16,208 ; addi 48
xcall _WriteData
.dbline 149
xjmp L62
L63:
.dbline 150
;
mov R2,R20
clr R3
subi R20,1
movw R24,R28
mov R30,R2
clr R31
add R30,R24
adc R31,R25
ldd R16,z+0
subi R16,208 ; addi 48
xcall _WriteData
.dbline 151
;
tst R20
brne L65
.dbline 152
;
.dbline 152
movw R24,R28
mov R30,R20
clr R31
add R30,R24
adc R31,R25
ldd R16,z+0
subi R16,208 ; addi 48
xcall _WriteData
.dbline 152
xjmp L62
L65:
.dbline 153
inc R12
.dbline 154
L61:
.dbline 144
xjmp L60
L62:
.dbline 155
;
;
;
dec R12
.dbline -2
L55:
adiw R28,5
xcall pop_gset5
.dbline 0 ; func end
ret
.dbsym l tmp 0 A[5:5]c
.dbsym r i 20 c
.dbsym r N 22 c
.dbsym r num 10 i
.dbsym r x 12 c
.dbsym r y 14 c
.dbend
.dbfunc e Display_Picture _Display_Picture fV
; i -> R20,R21
; x -> R22,R23
; y -> R14,R15
; j -> R10,R11
; l -> y+0
; k -> R12,R13
; tab -> y+12
.even
_Display_Picture::
st -y,r17
st -y,r16
xcall push_gset5
sbiw R28,2
.dbline -1
.dbline 159
;
;
;
;
.dbline 160
;
clr R0
clr R1
std y+1,R1
std y+0,R0
.dbline 160
ldi R22,128
ldi R23,0
.dbline 161
;
clr R20
clr R21
xjmp L71
L68:
.dbline 162
;
.dbline 163
;
clr R10
clr R11
ldi R24,128
ldi R25,0
movw R14,R24
xjmp L75
L72:
.dbline 164
;
.dbline 165
;
ldi R16,54
xcall _WriteCommand
.dbline 166
;
mov R16,R14
xcall _WriteCommand
.dbline 167
;
mov R16,R22
xcall _WriteCommand
.dbline 168
;
ldi R16,48
xcall _WriteCommand
.dbline 169
;
ldi R24,16
ldi R25,0
movw R12,R24
xjmp L77
L76:
.dbline 171
ldd R2,y+0
ldd R3,y+1
movw R24,R2
adiw R24,1
std y+1,R25
std y+0,R24
movw R30,R2
ldd R0,y+12
ldd R1,y+13
add R30,R0
adc R31,R1
lpm R16,Z
xcall _WriteData
L77:
.dbline 170
movw R2,R12
movw R24,R2
sbiw R24,1
movw R12,R24
tst R2
brne L76
tst R3
brne L76
X3:
.dbline 172
L73:
.dbline 163
movw R24,R10
adiw R24,1
movw R10,R24
movw R24,R14
adiw R24,1
movw R14,R24
L75:
.dbline 163
movw R24,R10
cpi R24,32
ldi R30,0
cpc R25,R30
brsh X4
xjmp L72
X4:
.dbline 173
ldi R22,136
ldi R23,0
.dbline 174
L69:
.dbline 161
subi R20,255 ; offset = 1
sbci R21,255
L71:
.dbline 161
cpi R20,2
ldi R30,0
cpc R21,R30
brsh X5
xjmp L68
X5:
.dbline -2
L67:
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -