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

📄 doo1.s

📁 433M收发,内有PCB(用99打开),源程序ICC打开,用了IC发送和三极管两种,接收用RX3310
💻 S
字号:
	.module DOO1.c
	.area data(ram, con, rel)
_mark::
	.blkb 2
	.area idata
	.word 1500
	.area data(ram, con, rel)
	.dbfile E:\abol\file\EMD\programme\EM-PB-2129\DOO1.c
	.dbsym e mark _mark I
_flag::
	.blkb 1
	.area idata
	.byte 0
	.area data(ram, con, rel)
	.dbfile E:\abol\file\EMD\programme\EM-PB-2129\DOO1.c
	.dbsym e flag _flag c
_flagh::
	.blkb 1
	.area idata
	.byte 0
	.area data(ram, con, rel)
	.dbfile E:\abol\file\EMD\programme\EM-PB-2129\DOO1.c
	.dbsym e flagh _flagh c
_acount::
	.blkb 1
	.area idata
	.byte 0
	.area data(ram, con, rel)
	.dbfile E:\abol\file\EMD\programme\EM-PB-2129\DOO1.c
	.dbsym e acount _acount c
_bcount::
	.blkb 1
	.area idata
	.byte 0
	.area data(ram, con, rel)
	.dbfile E:\abol\file\EMD\programme\EM-PB-2129\DOO1.c
	.dbsym e bcount _bcount c
_powbit::
	.blkb 1
	.area idata
	.byte 0
	.area data(ram, con, rel)
	.dbfile E:\abol\file\EMD\programme\EM-PB-2129\DOO1.c
	.dbsym e powbit _powbit c
	.area text(rom, con, rel)
	.dbfile E:\abol\file\EMD\programme\EM-PB-2129\DOO1.c
	.dbfunc e port_init _port_init fV
	.even
_port_init::
	.dbline -1
	.dbline 29
; #include <iot13v.h>
; #include <macros.h>
; #include "delay.h"
; #include "eeprom.h"
; #define uchar unsigned char
; #define unit unsigned int
; #define ulong unsigned long
; #define xtal 9.8
; 
; int mark=1500;	
; 
; unsigned int ai,aa;
; unsigned char crc,i,j,flag=0,flagh=0,flagl,acount=0,bcount=0,powbit=0;
; unsigned char DECODER_CODE1,DECODER_CODE0; 
; unsigned char data[3];	
; unsigned char dataf[3];
; 
; 
; //PB3是控制输出端口!
; #define	POWER_ON		PORTB |= (1 << PB2)	//打开输出
; #define	POWER_OFF		PORTB &= ~(1 << PB2)	//关闭输出	
; #define	LED_ON			PORTB |= (1 << PB0)	//打开输出
; #define	LED_OFF			PORTB &= ~(1 << PB0)	//关闭输出
; #define	RF_ON			PORTB |= (1 << PB1)	//打开输出
; #define	RF_OFF			PORTB &= ~(1 << PB1)	//关闭输出
; 
; //端口初始化
; void port_init(void)
; {
	.dbline 30
; 	PORTB = 0x38;	//输入设置有上拉电阻,输出预设低电平
	ldi R24,56
	out 0x18,R24
	.dbline 31
; 	DDRB  = 0x07;	//PB4输入,PB3输出
	ldi R24,7
	out 0x17,R24
	.dbline -2
L1:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e adc_init _adc_init fV
	.even
_adc_init::
	.dbline -1
	.dbline 35
; } 
; //转换初始化
; void adc_init(void)
; {
	.dbline 36
; 	ADCSRA=0x00;	//vcc作为模拟参考电压
	clr R2
	out 0x6,R2
	.dbline 38
; 
; 	ADCMUX = 0x03;	//选择ADC2通道
	ldi R24,3
	out 0x7,R24
	.dbline 39
; 	ACSR = (1 << ACD);//禁用模拟比较器
	ldi R24,128
	ldi R25,0
	out 0x9,R25
	out 0x8,R24
	.dbline 43
; 
; 	//使能ADC,终端允许,自由模式,时钟CLK/8
; 	//0x86允许转换ADEN,ADSC,时钟128分频 75KHz@9.6MHz system clock
; 	ADCSRA = (1 << ADEN) | 0x07;//| ( 1 << ADATE )
	ldi R24,135
	out 0x6,R24
	.dbline -2
L2:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e watchdog_init _watchdog_init fV
	.even
_watchdog_init::
	.dbline -1
	.dbline 48
; 	
; }
; //看门狗初始化
; void watchdog_init(void)
; {
	.dbline 49
;  WDR(); //this prevents a timout on enabling
	wdr
	.dbline 50
;  WDTCR=(1<<WDCE)|(1<<WDE);
	ldi R24,24
	out 0x21,R24
	.dbline 51
;  WDTCR=(0<<WDE);
	clr R2
	out 0x21,R2
	.dbline -2
L3:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e GetADC _GetADC fi
;      adc_value -> R20,R21
	.even
_GetADC::
	rcall push_gset1
	.dbline -1
	.dbline 56
; }
; 
; //从AD口读入一个值
; unsigned int GetADC(void)
; {
	.dbline 60
; 
; unsigned int	adc_value;
; 
; 	ADC = 0;
	clr R2
	clr R3
	out 0x5,R3
	out 0x4,R2
	.dbline 61
; 	ADCSRA  |=  (1 << ADSC);	//启动AD转换
	sbi 0x6,6
	.dbline 63
; 
; 	del(10);
	ldi R16,10
	ldi R17,0
	rcall _del
L5:
	.dbline 64
L6:
	.dbline 64
; 	while(!(ADCSRA&(BIT(ADIF))));////ADIF=4, 表示若ADCSR的第5位置为1,则中断AD转换
	sbis 0x6,4
	rjmp L5
	.dbline 67
; 	//loop_until_bit_is_set(ADCSRA, ADIF);//等待AD转换结束
; 
; 	ADCSRA |= (1 << ADIF);		//写1清除标志位
	sbi 0x6,4
	.dbline 69
; 
; 	adc_value = ADC;		//读转换结果
	in R20,0x4
	in R21,0x5
	.dbline 71
; 
; 	return adc_value;
	mov R16,R20
	mov R17,R21
	.dbline -2
L4:
	rcall pop_gset1
	.dbline 0 ; func end
	ret
	.dbsym r adc_value 20 i
	.dbend
	.dbfunc e CRC3 _CRC3 fc
;              i -> <dead>
;              j -> R22
;            len -> R10
;           data -> R20,R21
	.even
_CRC3::
	rcall push_gset3
	mov R10,R18
	mov R20,R16
	mov R21,R17
	.dbline -1
	.dbline 85
; }
; 
; 
; /****************************************** 
; CRC3校验函数  
; 输  入:        ptr需要进行校验的数据包  
;         len需要校验的数据包字节数  
; 输  出:        校验码; 
; 调  用:        无; 
; 被调用:        从机协议打包函数; 
; 功  能:        将一给定的数据包进行CRC3校验给调用者返回校验码  
; ******************************************/ 
; unsigned char CRC3(unsigned char *data, unsigned char len) 
; { 
	.dbline 88
;     unsigned char i; 
;     unsigned char j; 
;     j = 0; 
	clr R22
	.dbline 89
; 	crc=0;
	clr R2
	sts _crc,R2
	rjmp L10
L9:
	.dbline 92
; 
;     while(len) 
;     { 
	.dbline 94
;         /*多项式除法*/ 
;         if(*data & (0x80>>j))  //如果该位为1 
	mov R18,R22
	clr R19
	ldi R16,128
	ldi R17,0
	rcall asr16
	mov R30,R20
	mov R31,R21
	ldd R2,z+0
	clr R3
	and R2,R16
	and R3,R17
	tst R2
	brne X0
	tst R3
	breq L12
X0:
	.dbline 95
;             crc |= 0x01;  //则在余数尾部添1否则添0 
	lds R24,_crc
	ori R24,1
	sts _crc,R24
L12:
	.dbline 96
;         if(crc >= 0x8) 
	lds R24,_crc
	cpi R24,8
	brlo L14
	.dbline 97
;             crc ^= 11; 
	ldi R24,11
	lds R2,_crc
	eor R2,R24
	sts _crc,R2
L14:
	.dbline 98
;         crc <<= 1; 
	lds R2,_crc
	lsl R2
	sts _crc,R2
	.dbline 99
;         j++;
	inc R22
	.dbline 100
; 		if(len==1)
	mov R24,R10
	cpi R24,1
	brne L16
	.dbline 101
; 		{
	.dbline 102
; 		  if(j == 7) 
	cpi R22,7
	brne L17
	.dbline 103
;          { 
	.dbline 104
;             j = 0; 
	clr R22
	.dbline 105
;             data++; 
	subi R20,255  ; offset = 1
	sbci R21,255
	.dbline 106
;             len--; 
	dec R10
	.dbline 107
;          }
	.dbline 108
; 		}
	rjmp L17
L16:
	.dbline 110
; 		else
; 		{ 
	.dbline 111
;          if(j == 8) 
	cpi R22,8
	brne L20
	.dbline 112
;          { 
	.dbline 113
;             j = 0; 
	clr R22
	.dbline 114
;             data++; 
	subi R20,255  ; offset = 1
	sbci R21,255
	.dbline 115
;             len--; 
	dec R10
	.dbline 116
;          }
L20:
	.dbline 117
; 		}
L17:
	.dbline 118
L10:
	.dbline 91
	tst R10
	brne L9
	.dbline 119
; 	}
;     return(crc); 	 
	lds R16,_crc
	.dbline -2
L8:
	rcall pop_gset3
	.dbline 0 ; func end
	ret
	.dbsym l i 1 c
	.dbsym r j 22 c
	.dbsym r len 10 c
	.dbsym r data 20 pc
	.dbend
	.dbfunc e addr_f _addr_f fV
;              j -> <dead>
;              i -> <dead>
	.even
_addr_f::
	.dbline -1
	.dbline 125
; }
; 
; 
; //地址计算
; void addr_f(void)
; {
	.dbline 128
;     unsigned char i; 
;     unsigned char j;
; data[0]=EEPROM_read(0);
	clr R16
	rcall _EEPROM_read
	sts _data,R16
	.dbline 129
; data[1]=EEPROM_read(1);		  //EEPORM内地址,最大FFFF
	ldi R16,1
	rcall _EEPROM_read
	sts _data+1,R16
	.dbline 130
; data[2]=0;
	clr R2
	sts _data+2,R2
	.dbline 131
; if(GetADC()<327)  data[2]|=0x80;
	rcall _GetADC
	cpi R16,71
	ldi R30,1
	cpc R17,R30
	brsh L25
	.dbline 131
	lds R24,_data+2
	ori R24,128
	sts _data+2,R24
L25:
	.dbline 132
; if(powbit) data[2]|=0x40;	   
	lds R2,_powbit
	tst R2
	breq L28
	.dbline 132
	lds R24,_data+2
	ori R24,64
	sts _data+2,R24
L28:
	.dbline 133
; data[2]+=CRC3(data,3);
	ldi R18,3
	ldi R16,<_data
	ldi R17,>_data
	rcall _CRC3
	lds R2,_data+2
	add R2,R16
	sts _data+2,R2
	.dbline -2
L22:
	.dbline 0 ; func end
	ret
	.dbsym l j 1 c
	.dbsym l i 1 c
	.dbend
	.dbfunc e data_1 _data_1 fV
	.even
_data_1::
	.dbline -1
	.dbline 137
; }
; //要发送的数据1
; void data_1(void)
; {
	.dbline 138
;  RF_OFF;
	cbi 0x18,1
	.dbline 139
;  del(700);
	ldi R16,700
	ldi R17,2
	rcall _del
	.dbline 140
;  RF_ON;
	sbi 0x18,1
	.dbline 141
;  del(350);
	ldi R16,350
	ldi R17,1
	rcall _del
	.dbline -2
L32:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e data_0 _data_0 fV
	.even
_data_0::
	.dbline -1
	.dbline 145
; }
; //要发送的数据0
; void data_0(void)
; {
	.dbline 146
;  RF_OFF;
	cbi 0x18,1
	.dbline 147
;  del(350);
	ldi R16,350
	ldi R17,1
	rcall _del
	.dbline 148
;  RF_ON;
	sbi 0x18,1
	.dbline 149
;  del(700);
	ldi R16,700
	ldi R17,2
	rcall _del
	.dbline -2
L33:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e rf _rf fV
;              i -> R20
;              j -> R10
;          dataf -> R22,R23
	.even
_rf::
	rcall push_gset3
	mov R22,R16
	mov R23,R17
	.dbline -1
	.dbline 153
; } 
; //发送数据 
; void rf (unsigned char *dataf)
; {
	.dbline 156
;     unsigned char i; 
;     unsigned char j;
;  RF_ON;			//起始位
	sbi 0x18,1
	.dbline 157
;  del(350);
	ldi R16,350
	ldi R17,1
	rcall _del
	.dbline 158
;  for(i=0;i<3;i++)
	clr R20
	rjmp L38
L35:
	.dbline 159
;  {		 for(j=0;j<8;j++)
	.dbline 159
	clr R10
	rjmp L42
L39:
	.dbline 160
;  		 {
	.dbline 161
;          if(*dataf& (0x80>>j))  //如果该位为1 
	mov R18,R10
	clr R19
	ldi R16,128
	ldi R17,0
	rcall asr16
	mov R30,R22
	mov R31,R23
	ldd R2,z+0
	clr R3
	and R2,R16
	and R3,R17
	tst R2
	brne X1
	tst R3
	breq L43
X1:
	.dbline 162
;             data_1();
	rcall _data_1
	rjmp L44
L43:
	.dbline 163
;             else data_0();
	rcall _data_0
L44:
	.dbline 164
L40:
	.dbline 159
	inc R10
L42:
	.dbline 159
	mov R24,R10
	cpi R24,8
	brlo L39
	.dbline 165
	subi R22,255  ; offset = 1
	sbci R23,255
	.dbline 166
L36:
	.dbline 158
	inc R20
L38:
	.dbline 158
	cpi R20,3
	brlo L35
	.dbline 167
; 		} 
; 		dataf++; 
;  }
;  RF_OFF;
	cbi 0x18,1
	.dbline -2
L34:
	rcall pop_gset3
	.dbline 0 ; func end
	ret
	.dbsym r i 20 c
	.dbsym r j 10 c
	.dbsym r dataf 22 pc
	.dbend
	.dbfunc e main _main fV
;              i -> R20
	.even
_main::
	.dbline -1
	.dbline 171
; }
; //主函数!不用解释了
; void main()
; {
	.dbline 175
; 
;    unsigned char i;
; 	//以下初始化硬件
; 	port_init();	//端口初始化  
	rcall _port_init
	.dbline 176
; 	adc_init();	//ADC初始化
	rcall _adc_init
	.dbline 177
; 	watchdog_init();//初始化看门狗	
	rcall _watchdog_init
	.dbline 178
; 	POWER_ON;
	sbi 0x18,2
	.dbline 179
; 	if(!(PINB&0X10)) powbit=1;	
	sbic 0x16,4
	rjmp L46
	.dbline 179
	ldi R24,1
	sts _powbit,R24
L46:
	.dbline 180
; 	delay(1);
	ldi R16,1
	ldi R17,0
	rcall _delay
	rjmp L49
L48:
	.dbline 183
; 
; 	while(1)
; 	{
	.dbline 184
; 	WDR();	
	wdr
	.dbline 185
;     LED_ON;
	sbi 0x18,0
	.dbline 186
; 	delay(100);
	ldi R16,100
	ldi R17,0
	rcall _delay
	.dbline 187
; 	addr_f();
	rcall _addr_f
	.dbline 188
; 	for(i=0;i<50;i++)
	clr R20
	rjmp L54
L51:
	.dbline 189
	.dbline 190
	lds R2,_data
	sts _dataf,R2
	.dbline 191
	lds R2,_data+1
	sts _dataf+1,R2
	.dbline 192
	lds R2,_data+2
	sts _dataf+2,R2
	.dbline 193
	ldi R16,<_dataf
	ldi R17,>_dataf
	rcall _rf
	.dbline 194
	ldi R16,3
	ldi R17,0
	rcall _delay
	.dbline 195
L52:
	.dbline 188
	inc R20
L54:
	.dbline 188
	cpi R20,50
	brlo L51
	.dbline 196
	cbi 0x18,2
	.dbline 197
	ldi R16,100
	ldi R17,0
	rcall _delay
	.dbline 198
	cbi 0x18,0
	.dbline 199
L49:
	.dbline 182
	rjmp L48
X2:
	.dbline -2
L45:
	.dbline 0 ; func end
	ret
	.dbsym r i 20 c
	.dbend
	.area bss(ram, con, rel)
	.dbfile E:\abol\file\EMD\programme\EM-PB-2129\DOO1.c
_dataf::
	.blkb 3
	.dbsym e dataf _dataf A[3:3]c
_data::
	.blkb 3
	.dbsym e data _data A[3:3]c
_DECODER_CODE0::
	.blkb 1
	.dbsym e DECODER_CODE0 _DECODER_CODE0 c
_DECODER_CODE1::
	.blkb 1
	.dbsym e DECODER_CODE1 _DECODER_CODE1 c
_flagl::
	.blkb 1
	.dbsym e flagl _flagl c
_j::
	.blkb 1
	.dbsym e j _j c
_i::
	.blkb 1
	.dbsym e i _i c
_aa::
	.blkb 2
	.dbsym e aa _aa i
_ai::
	.blkb 2
	.dbsym e ai _ai i
_crc::
	.blkb 1
	.dbsym e crc _crc c

⌨️ 快捷键说明

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