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

📄 解读.s

📁 通过单片机对遥控发送过来的信号进行解读
💻 S
📖 第 1 页 / 共 2 页
字号:
	.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 + -