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

📄 sudu.s

📁 用AVR单片机实现脉冲采集源代码
💻 S
📖 第 1 页 / 共 2 页
字号:
	.dbline -1
	.dbline 137
; 	
; void DataTransmit(void)   //串行485数据发送
; {
	.dbline 139
;     //ndata[2] = nLL;
; 	 ndata[3] = n;
	lds R2,_n
	lds R3,_n+1
	sts _ndata+3,R2
	.dbline 140
; 	ndata[4] = numLL;
	lds R2,_numLL
	sts _ndata+4,R2
	.dbline 141
; 	ndata[5] = numLH;
	lds R2,_numLH
	sts _ndata+5,R2
	.dbline 142
; 	ndata[6] = numHL;
	lds R2,_numHL
	sts _ndata+6,R2
	.dbline 143
; 	ndata[7] = numHH;
	lds R2,_numHH
	sts _ndata+7,R2
	.dbline 144
; 	UCSRB|=(1<<TXCIE);
	sbi 0xa,6
	.dbline 145
; 	UDR = ndata[0];
	lds R2,_ndata
	out 0xc,R2
	.dbline -2
	.dbline 147
;     
; 	}
L21:
	.dbline 0 ; func end
	ret
	.dbend
	.area vector(rom, abs)
	.org 26
	rjmp _uart0_tx_isr
	.area text(rom, con, rel)
	.dbfile sudu.c
	.dbfunc e uart0_tx_isr _uart0_tx_isr fV
	.even
_uart0_tx_isr::
	st -y,R2
	st -y,R24
	st -y,R25
	st -y,R30
	st -y,R31
	in R2,0x3f
	st -y,R2
	.dbline -1
	.dbline 152
; 
; 
; #pragma interrupt_handler uart0_tx_isr:iv_USART_TXC
; void uart0_tx_isr(void)
; {
	.dbline 154
;           
; if(K<7)
	lds R24,_K
	cpi R24,7
	brsh L28
	.dbline 155
;      {K=K+1;
	.dbline 155
	subi R24,255    ; addi 1
	sts _K,R24
	.dbline 156
; 	 UDR=ndata[K];
	ldi R24,<_ndata
	ldi R25,>_ndata
	lds R30,_K
	clr R31
	add R30,R24
	adc R31,R25
	ldd R2,z+0
	out 0xc,R2
	.dbline 157
; 	 }  
	rjmp L29
L28:
	.dbline 160
	.dbline 161
	clr R2
	sts _K,R2
	.dbline 162
	cbi 0xa,6
	.dbline 163
L29:
	.dbline -2
	.dbline 166
;        
;      else
;     {
; 	K=0;   
; 	UCSRB&=~(1<<TXCIE);  //1?UART ?¤?é?¨a?D??
; 	} 
;      
;      
; }
L27:
	ld R2,y+
	out 0x3f,R2
	ld R31,y+
	ld R30,y+
	ld R25,y+
	ld R24,y+
	ld R2,y+
	.dbline 0 ; func end
	reti
	.dbend
	.dbfunc e USART_Init _USART_Init fV
	.even
_USART_Init::
	.dbline -1
	.dbline 169
; 
; void USART_Init(void)    //串行初始化
; {
	.dbline 170
;     UCSRB|=(1<<TXEN);//允许发送
	sbi 0xa,3
	.dbline 171
;   UBRRL=(fosc/16/(baud+1))%256; //波特率的设置
	ldi R24,52
	out 0x9,R24
	.dbline 172
;   UBRRH=(fosc/16/(baud+1))/256;
	clr R2
	out 0x20,R2
	.dbline 173
;   UCSRC=0x86;//8 位数据+1 位STOP 位
	ldi R24,134
	out 0x20,R24
	.dbline -2
	.dbline 175
; 	 
; }
L30:
	.dbline 0 ; func end
	ret
	.dbend
	.area vector(rom, abs)
	.org 18
	rjmp _tim0Ovf
	.area text(rom, con, rel)
	.dbfile sudu.c
	.dbfunc e tim0Ovf _tim0Ovf fV
	.even
_tim0Ovf::
	st -y,R2
	st -y,R24
	st -y,R25
	in R2,0x3f
	st -y,R2
	.dbline -1
	.dbline 182
; 
; 
; //定时器0溢出中断
; #pragma interrupt_handler tim0Ovf:10		// vector #
; //测量时间定时
; void tim0Ovf(void)
; {
	.dbline 183
;     TCCR0 = 0x00;   //停止TC0
	clr R2
	out 0x33,R2
	.dbline 185
; 	//INT0中断关
; 	GICR = 0x00;
	out 0x3b,R2
	.dbline 187
; 	
; 	m += 1;
	lds R24,_m
	lds R25,_m+1
	adiw R24,1
	sts _m+1,R25
	sts _m,R24
	.dbline 188
; 	TCNT0 = TIME50ms; 
	ldi R24,174
	out 0x32,R24
	.dbline 189
; 	TCCR0 = 0x05;      // Timer on //1024分频
	ldi R24,5
	out 0x33,R24
	.dbline 194
; 	
; 	//PORTB |= (1<<PORTB1);
; 	//PORTB &= ~(1<<PORTB1);
; 	
; 	if(GIFR& 0x40)
	in R2,0x3a
	sbrs R2,6
	rjmp L32
	.dbline 195
;       GIFR = 0x40;    //清除INT0中断标志
	ldi R24,64
	out 0x3a,R24
L32:
	.dbline 196
; 	SEI();
	sei
	.dbline 198
; 	//INT0中断开
; 	GICR = 0x40;
	ldi R24,64
	out 0x3b,R24
	.dbline -2
	.dbline 200
; 	
; }
L31:
	ld R2,y+
	out 0x3f,R2
	ld R25,y+
	ld R24,y+
	ld R2,y+
	.dbline 0 ; func end
	reti
	.dbend
	.area vector(rom, abs)
	.org 2
	rjmp _INT_0
	.area text(rom, con, rel)
	.dbfile sudu.c
	.dbfunc e INT_0 _INT_0 fV
	.even
_INT_0::
	rcall push_lset
	.dbline -1
	.dbline 205
; //INT0中断服务子程序
; #pragma interrupt_handler INT_0:2	// vector #
; 
; void INT_0(void)
; {
	.dbline 206
;     n = m;
	lds R2,_m
	lds R3,_m+1
	sts _n+1,R3
	sts _n,R2
	.dbline 215
; 	/*
; 	while(1)
; 	{
; 	PORTD |= (1<<PORTD3);
; 	PORTD &= ~(1<<PORTD3);
; 	delay(500);
; 	}
; 	*/
; 	num_read();      //从EEROM读出num
	rcall _num_read
	.dbline 216
; 	num += m ;  
	lds R2,_m
	lds R3,_m+1
	clr R4
	clr R5
	lds R8,_num+2
	lds R9,_num+2+1
	lds R6,_num
	lds R7,_num+1
	add R6,R2
	adc R7,R3
	adc R8,R4
	adc R9,R5
	sts _num+1,R7
	sts _num,R6
	sts _num+2+1,R9
	sts _num+2,R8
	.dbline 217
; 	num_write();     //将num写入EEROM
	rcall _num_write
	.dbline 218
; 	DataTransmit();  //串行485数据发送
	rcall _DataTransmit
	.dbline 219
; 	m = 0;
	clr R2
	clr R3
	sts _m+1,R3
	sts _m,R2
	.dbline 220
; 	TCNT0 = TIME50ms;
	ldi R24,174
	out 0x32,R24
	.dbline 221
; 	TCCR0 = 0x05;    //Timer on //1024分频
	ldi R24,5
	out 0x33,R24
	.dbline -2
	.dbline 224
; 	
;   
; }
L34:
	rcall pop_lset
	.dbline 0 ; func end
	reti
	.dbend
	.dbfunc e main _main fV
	.even
_main::
	.dbline -1
	.dbline 228
; 
; 
; void main(void)
; {
	.dbline 229
;     delay(200);
	ldi R16,200
	rcall _delay
	.dbline 230
;     OSCCAL=e2rom_read(osccal_addr); 
	ldi R16,511
	ldi R17,1
	rcall _e2rom_read
	out 0x31,R16
	.dbline 233
; 	 //OSCCAL=osccal;
; 	 
; 	PORTD|=(1<<PORTD3);
	sbi 0x12,3
	.dbline 235
; 	
; 	MCUCR = 0x02;        //INT0下降沿				 
	ldi R24,2
	out 0x35,R24
	.dbline 236
; 	TIMSK = 0x01;        //TC0溢出中断允许
	ldi R24,1
	out 0x39,R24
	.dbline 239
; 	
; 	//定时器0中断设置
; 	TCCR0 = 0x00;        //停止TC0
	clr R2
	out 0x33,R2
	.dbline 240
; 	TCNT0 = TIME50ms;    //初装值
	ldi R24,174
	out 0x32,R24
	.dbline 242
; 	
; 	USART_Init();
	rcall _USART_Init
	.dbline 244
; 	
; 	DDRD=0xfb;
	ldi R24,251
	out 0x11,R24
	.dbline 246
; 	
; 	SEI();
	sei
	.dbline 248
; 	
; 	GICR = 0x40;         //INT0中断开
	ldi R24,64
	out 0x3b,R24
	.dbline 249
; 	m = 0;
	clr R2
	clr R3
	sts _m+1,R3
	sts _m,R2
	.dbline 250
; 	TCCR0 = 0x05;        //Timer on //1024分频
	ldi R24,5
	out 0x33,R24
	rjmp L37
L36:
	.dbline 254
; 	//主循环...
; 	
; 	while(1)
; 	{
	.dbline 260
; 	   /*测试程序段,已屏蔽*/
; 	   /*PORTB &= ~(1<<PORTB2);
; 	   delay(1);
; 	   PORTB |= (1<<PORTB2);
; 	   */
; 	 DataTransmit();
	rcall _DataTransmit
	.dbline 261
; 	for(k=1;k<100;k++)
	ldi R24,1
	ldi R25,0
	sts _k+1,R25
	sts _k,R24
	rjmp L42
L39:
	.dbline 262
	ldi R16,200
	rcall _delay
L40:
	.dbline 261
	lds R24,_k
	lds R25,_k+1
	adiw R24,1
	sts _k+1,R25
	sts _k,R24
L42:
	.dbline 261
	lds R24,_k
	lds R25,_k+1
	cpi R24,100
	ldi R30,0
	cpc R25,R30
	brlo L39
	.dbline 265
L37:
	.dbline 253
	rjmp L36
X0:
	.dbline -2
	.dbline 268
; 	     delay(200);  
;     
; 	    
; 	}
;    
; 
; }
L35:
	.dbline 0 ; func end
	ret
	.dbend
	.area bss(ram, con, rel)
	.dbfile sudu.c
_data_receive::
	.blkb 3
	.dbsym e data_receive _data_receive A[3:3]c
_xxx::
	.blkb 3
	.dbsym e xxx _xxx A[3:3]c
_cx::
	.blkb 1
	.dbsym e cx _cx c
_i::
	.blkb 1
	.dbsym e i _i c
_flag_receive::
	.blkb 1
	.dbsym e flag_receive _flag_receive c
_nLH::
	.blkb 1
	.dbsym e nLH _nLH c
_nLL::
	.blkb 1
	.dbsym e nLL _nLL c
_K::
	.blkb 1
	.dbsym e K _K c
_numHH::
	.blkb 1
	.dbsym e numHH _numHH c
_numHL::
	.blkb 1
	.dbsym e numHL _numHL c
_numLH::
	.blkb 1
	.dbsym e numLH _numLH c
_numLL::
	.blkb 1
	.dbsym e numLL _numLL c
_num::
	.blkb 4
	.dbsym e num _num l
_k::
	.blkb 2
	.dbsym e k _k i
_n::
	.blkb 2
	.dbsym e n _n i
_m::
	.blkb 2
	.dbsym e m _m i

⌨️ 快捷键说明

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