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

📄 init.s

📁 433M收发,内有PCB(用99打开),源程序ICC打开,用了IC发送和三极管两种,接收用RX3310
💻 S
📖 第 1 页 / 共 2 页
字号:
	.module init.c
	.area data(ram, con, rel)
_ptr::
	.blkb 2
	.area idata
	.byte 0,0
	.area data(ram, con, rel)
	.blkb 1
	.area idata
	.byte 0
	.area data(ram, con, rel)
	.dbfile E:\abol\file\EMD\programme\init.c
	.dbsym e ptr _ptr A[3:3]c
	.area text(rom, con, rel)
	.dbfile E:\abol\file\EMD\programme\init.c
	.dbfunc e port_init _port_init fV
	.even
_port_init::
	.dbline -1
	.dbline 22
; /********************************************************/
; /*         			ABOL      			  				*/
; /*                868MHZ数码管显示接收器   				*/
; /*     作者:于朝晖     2008-5-24 9:30:00  				*/
; /*     目标MCU:MEGA16  晶振:INT RC 8MHZ  				*/
; /* 文件名称:init.c  负责初始化MCU各内部资源及外部端口	*/
; /* 编译:ICC-AVR application builder					*/
; /* 当前版本: 1.0										*/
; /* 修改日期: 2008.5.24										*/
; /********************************************************/
; 
; #include <iom88v.h>	 
; #include <macros.h>
; #include "eeprom.h"  
; #include "delay.h"
; #include "init.h"
; #define bitset(var, bitno) ((var) |= (1 << (bitno)))
; #define bitclr(var, bitno) ((var) &= ~(1 << (bitno)))
; unsigned char ptr[3]={0,0,0};																		 
; 
; void port_init(void)
; {
	.dbline 23
;  PORTB = 0xff; //00010000     ff
	ldi R24,255
	out 0x5,R24
	.dbline 24
;  DDRB  = 0xff; //11111111     ff
	out 0x4,R24
	.dbline 25
;  PORTC = 0x0c; //00001100     0c
	ldi R24,12
	out 0x8,R24
	.dbline 26
;  DDRC  = 0xf7; //11111011     f7
	ldi R24,247
	out 0x7,R24
	.dbline 27
;  PORTD = 0xee; //11101111     e7
	ldi R24,238
	out 0xb,R24
	.dbline 28
;  DDRD  = 0x11; //00010001     19  
	ldi R24,17
	out 0xa,R24
	.dbline -2
L1:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e timer0_init _timer0_init fV
	.even
_timer0_init::
	.dbline -1
	.dbline 32
; }
; 
; void timer0_init(void)
; {
	.dbline 33
; TCNT0  =196;                                // T/C0开始值  
	ldi R24,196
	out 0x26,R24
	.dbline 34
; TCCR0B=0x02;                            // 预分频 ck/8 ,计数允许 
	ldi R24,2
	out 0x25,R24
	.dbline 35
; TIFR0=0;
	clr R2
	out 0x15,R2
	.dbline 36
; TIMSK0=1;
	ldi R24,1
	sts 110,R24
	.dbline 37
; TIFR0=1;
	out 0x15,R24
	.dbline -2
L2:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e timer2_init _timer2_init fV
	.even
_timer2_init::
	.dbline -1
	.dbline 41
; }
; 
; void timer2_init(void)
; {
	.dbline 42
; TIMSK2=0;
	clr R2
	sts 112,R2
	.dbline 43
; ASSR=32; 			  			//外部时钟输入使能
	ldi R24,32
	sts 182,R24
	.dbline 44
; TCCR2A=0;						//普通模式
	sts 176,R2
	.dbline 45
; TCCR2B=3;						//32分频
	ldi R24,3
	sts 177,R24
	.dbline 46
; TCNT2=0;                        // T/C2开始值 
	sts 178,R2
	.dbline 47
; NOP(); 
	nop
	.dbline 49
; 
; NOP(); 
	nop
	.dbline 50
; NOP(); 
	nop
	.dbline 51
; NOP(); 
	nop
	.dbline 52
; TIFR2=0;						//清标致位
	out 0x17,R2
	.dbline 53
; TIMSK2=0;                       // 预分频 32768/32 ,计数允许 
	sts 112,R2
	.dbline 54
; TIFR2=1;
	ldi R24,1
	out 0x17,R24
	.dbline -2
L3:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e watchdog_init _watchdog_init fV
	.even
_watchdog_init::
	.dbline -1
	.dbline 58
; }
; 
; void watchdog_init(void)
; {
	.dbline 59
;  WDR(); //this prevents a timout on enabling
	wdr
	.dbline 60
;  WDTCSR=(1<<WDCE)|(1<<WDE);
	ldi R24,24
	sts 96,R24
	.dbline 61
;  WDTCSR=(0<<WDE);
	clr R2
	sts 96,R2
	.dbline -2
L4:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e init_devices _init_devices fV
	.even
_init_devices::
	.dbline -1
	.dbline 67
; }
; 
; 
; //call this routine to initialize all peripherals
; void init_devices(void)
; {
	.dbline 69
;  //stop errant interrupts until set up
;  CLI(); //disable all interrupts
	cli
	.dbline 70
;  port_init();
	rcall _port_init
	.dbline 71
;  timer0_init();
	rcall _timer0_init
	.dbline 72
;  timer2_init();
	rcall _timer2_init
	.dbline 75
;  //watchdog_init();
; 
;  MCUCR = 0x00;
	clr R2
	out 0x35,R2
	.dbline 76
;  EIMSK = 0x00;
	out 0x1d,R2
	.dbline 77
;  EICRA = 0x00; //extended ext ints
	sts 105,R2
	.dbline 79
;  
;  TIMSK0 = 0x01; //timer 0 interrupt sources
	ldi R24,1
	sts 110,R24
	.dbline 80
;  TIMSK1 = 0x00; //timer 1 interrupt sources
	sts 111,R2
	.dbline 81
;  TIMSK2 = 0x01; //timer 2 interrupt sources 
	sts 112,R24
	.dbline 83
; 
;  PCMSK0 = 0x00; //pin change mask 0 
	sts 107,R2
	.dbline 84
;  PCMSK1 = 0x00; //pin change mask 1 
	sts 108,R2
	.dbline 85
;  PCMSK2 = 0x00; //pin change mask 2
	sts 109,R2
	.dbline 86
;  PCICR = 0x00; //pin change enable 
	sts 104,R2
	.dbline 88
;  //PRR = 0xa2; //power controller
;  SEI(); //re-enable interrupts
	sei
	.dbline 89
;  ADCSRA=0X16;
	ldi R24,22
	sts 122,R24
	.dbline 90
;  ADMUX=0X00; 	  			//关ADC
	sts 124,R2
	.dbline 91
;  ACSR=(1<<ACD);
	ldi R24,128
	out 0x30,R24
	.dbline 92
;  SMCR=(0<<SM2)|(1<<SM1)|(0<<SM0);   	//设定为掉电模式
	ldi R24,4
	out 0x33,R24
	.dbline -2
L5:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e ADconv _ADconv fV
	.even
_ADconv::
	.dbline -1
	.dbline 98
;  //all peripherals are now initialized
; }
; 
; /*		AD转换	*/	
; void ADconv (void)
; {WDR();
	.dbline 98
	wdr
	.dbline 99
;  CLI();
	cli
	.dbline 100
;  ADMUX=0XE0;               //1.1V基准,ADC0通道0B11100000
	ldi R24,224
	sts 124,R24
	.dbline 101
;  ADCSRA=0XC6;			   //使能和转换
	ldi R24,198
	sts 122,R24
L7:
	.dbline 102
L8:
	.dbline 102
;  while(!(ADCSRA & (1<<ADIF)));//转换测试
	lds R2,122
	sbrs R2,4
	rjmp L7
	.dbline 103
;  ADcon=ADCL;
	lds R2,120
	sts _ADcon,R2
	.dbline 104
;  ADcon=ADCH;
	lds R2,121
	sts _ADcon,R2
	.dbline 105
;  ADCSRA=0X16;
	ldi R24,22
	sts 122,R24
	.dbline 106
;  ADMUX=0X00; 	  			//关ADC
	clr R2
	sts 124,R2
	.dbline 107
;  SEI();
	sei
	.dbline -2
L6:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e CRC3 _CRC3 fc
;              i -> <dead>
;              j -> R22
;            len -> R10
;           data -> R20,R21
	.even
_CRC3::
	rcall push_gset3
	mov R10,R18
	movw R20,R16
	.dbline -1
	.dbline 120
;  }
; /****************************************** 
; CRC3校验函数  
; 输  入:        ptr需要进行校验的数据包  
;         len需要校验的数据包字节数  
; 输  出:        校验码; 
; 调  用:        无; 
; 被调用:        从机协议打包函数; 
; 功  能:        将一给定的数据包进行CRC12校验给调用者返回校验码  
; ******************************************/ 
; 
; unsigned char CRC3(unsigned char *data, unsigned char len) 
; { 
	.dbline 123
;     unsigned char i; 
;     unsigned char j; 
;     j = 0; 
	clr R22
	.dbline 124
; 	crc=0;
	clr R2
	sts _crc,R2
	rjmp L12
L11:
	.dbline 126
;     while(len) 
;     { 
	.dbline 128
;         /*多项式除法*/ 
;         if(*data & (0x80>>j))  //如果该位为1 
	mov R18,R22
	clr R19
	ldi R16,128
	ldi R17,0
	rcall asr16
	movw R30,R20
	ldd R2,z+0
	clr R3
	and R2,R16
	and R3,R17
	tst R2
	brne X0
	tst R3
	breq L14
X0:
	.dbline 129
;             crc |= 0x01;  //则在余数尾部添1否则添0 
	lds R24,_crc
	ori R24,1
	sts _crc,R24
L14:
	.dbline 130
;         if(crc >= 0x8) 
	lds R24,_crc
	cpi R24,8
	brlo L16
	.dbline 131
;             crc ^= 11; 
	ldi R24,11
	lds R2,_crc
	eor R2,R24
	sts _crc,R2
L16:
	.dbline 132
;         crc <<= 1; 
	lds R2,_crc
	lsl R2
	sts _crc,R2
	.dbline 133
;         j++; 
	inc R22
	.dbline 134
;         if(j == 8) 
	cpi R22,8
	brne L18
	.dbline 135
;         { 
	.dbline 136
;             j = 0; 
	clr R22
	.dbline 137
;             data++; 
	subi R20,255  ; offset = 1
	sbci R21,255
	.dbline 138
;             len--; 
	dec R10
	.dbline 139
;         } 
L18:
	.dbline 140
L12:
	.dbline 125
	tst R10
	brne L11
	.dbline 141
; 	}
;     return(crc); 	 
	lds R16,_crc
	.dbline -2
L10:
	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
	.area vector(rom, abs)
	.org 32
	rjmp _timer0_ovf_isr
	.area text(rom, con, rel)
	.dbfile E:\abol\file\EMD\programme\init.c
	.dbfunc e timer0_ovf_isr _timer0_ovf_isr fV
;              j -> R20
;              i -> R22
	.even
_timer0_ovf_isr::
	rcall push_lset
	rcall push_gset2
	.dbline -1
	.dbline 145
; }
; #pragma interrupt_handler timer0_ovf_isr:17
; void timer0_ovf_isr(void)     //中断程序 
; { 
	.dbline 147
;   unsigned char i,j;
;   TCNT0=196;    //产生16.8K的信号
	ldi R24,196
	out 0x26,R24
	.dbline 149
; 
;   if (((flag&0x02)!=0)&&((flag&0x04)==0))//RF开关	 
	lds R2,_flag
	sbrs R2,1
	rjmp L21
	sbrc R2,2
	rjmp L21
	.dbline 150
;   {//1
	.dbline 151
;    if ((PINC&0x08)==0)//测试输入电平 如输入为1跳到高计数
	sbic 0x6,3
	rjmp L23
	.dbline 152
;     {//2
	.dbline 153
;      if ((flag&0x01)==0)//检测以前的解码状态
	sbrc R2,0
	rjmp L25
	.dbline 154
;      {//2-1
	.dbline 155
; 	 LO_COUNT++;//最大计数 FFH
	lds R24,_LO_COUNT
	subi R24,255    ; addi 1
	sts _LO_COUNT,R24
	.dbline 156
; 	   if (LO_COUNT==0)
	tst R24
	breq X3
	rjmp L20
X3:
	.dbline 157
; 	    {//2-1'
	.dbline 158
; 	    LO_COUNT--;
	subi R24,1
	sts _LO_COUNT,R24
	.dbline 159
; 	    }//2-1'
	.dbline 160
; 	 return;//大于FFH跳出中断
	rjmp L20
L25:
	.dbline 162
; 	 }//2-1
; 	 DECODER_STATUS_L; //变成当前状态
	lds R24,_flag
	andi R24,254
	sts _flag,R24
	.dbline 163
; 	 LO_COUNT_SAVE=LO_COUNT;//保存低电平计数
	lds R2,_LO_COUNT
	sts _LO_COUNT_SAVE,R2
	.dbline 164
; 	 LO_COUNT=0;//更新低电平计数
	clr R2
	sts _LO_COUNT,R2
	.dbline 165
; 	 if ((HI_COUNT_SAVE>MAXDURATION)||(HI_COUNT_SAVE==0))//如果高电平大于限定值
	ldi R30,<_MAXDURATION
	ldi R31,>_MAXDURATION
	lpm R30,Z
	lds R2,_HI_COUNT_SAVE
	cp R30,R2
	brlo L31
	tst R2
	breq X4
	rjmp L20
X4:
L31:
	.dbline 166
; 	   {//2-2
	.dbline 167
; 	   BITCOUNTER=CODELANGTH;//代码是错误的
	ldi R30,<_CODELANGTH
	ldi R31,>_CODELANGTH
	lpm R30,Z
	sts _BITCOUNTER,R30
	.dbline 168
; 	   data[0]=0; 
	clr R2
	sts _data,R2
	.dbline 169
; 	   data[1]=0;
	sts _data+1,R2
	.dbline 170
; 	   data[2]=0;
	sts _data+2,R2
	.dbline 171
; 	   }//2-2
	.dbline 172
; 	   return;//跳出中断
	rjmp L20
L23:
	.dbline 175
;     }//2
;    else//高计数
;    {//3
	.dbline 176
;    if ((flag&0x01)!=0)//检测以前的解码状态
	lds R2,_flag
	sbrs R2,0
	rjmp L34
	.dbline 177
;     {//4
	.dbline 178
; 	HI_COUNT++;
	lds R24,_HI_COUNT
	subi R24,255    ; addi 1
	sts _HI_COUNT,R24
	.dbline 179
; 	  if (HI_COUNT==0)//大于FFH跳出中断
	tst R24
	breq X5
	rjmp L20
X5:
	.dbline 180
; 	  {//4-1
	.dbline 181
; 	  HI_COUNT--;
	subi R24,1
	sts _HI_COUNT,R24
	.dbline 182
; 	  }//4-1
	.dbline 183
; 	  return;//跳出中断
	rjmp L20
L34:
	.dbline 185
;     }//4
; 	DECODER_STATUS_H; //变成当前状态
	lds R24,_flag
	ori R24,1
	sts _flag,R24
	.dbline 186
; 	HI_COUNT_SAVE=HI_COUNT;//保存高电平计数
	lds R2,_HI_COUNT
	sts _HI_COUNT_SAVE,R2
	.dbline 187
; 	HI_COUNT=0;//更新低电平计数
	clr R2
	sts _HI_COUNT,R2

⌨️ 快捷键说明

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