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

📄 uart_to_twi_m8.s

📁 AVR单片机的T_TO_TWI通讯方式
💻 S
📖 第 1 页 / 共 2 页
字号:
	.even
_show_data::
	rcall push_gset2
	mov R20,R16
	.dbline -1
	.dbline 188
; }
; /************************************************************************
; 通用的,,用来显示一个变量的值,,送到串口来
; *************************************************************************/
; void show_data(unsigned char dat)
; {
	.dbline 191
;     unsigned char dat_buff;
; 	
;     dat_buff = dat;
	mov R22,R20
	.dbline 192
; 	dat >>= 4;
	mov R24,R20
	swap R24
	andi R24,#0x0F
	mov R20,R24
	.dbline 193
; 	dat = dat & 0x0f;
	andi R20,15
	.dbline 194
; 	dat = general_hex_to_ascii( dat );
	mov R16,R20
	rcall _general_hex_to_ascii
	.dbline 195
; 	USART_TransmitByte(dat);
	rcall _USART_TransmitByte
	.dbline 196
; 	dat = dat_buff;
	mov R20,R22
	.dbline 197
; 	dat = dat & 0x0f;
	andi R20,15
	.dbline 198
; 	dat = general_hex_to_ascii( dat );
	mov R16,R20
	rcall _general_hex_to_ascii
	mov R20,R16
	.dbline 199
; 	USART_TransmitByte(dat);
	rcall _USART_TransmitByte
	.dbline -2
L53:
	rcall pop_gset2
	.dbline 0 ; func end
	ret
	.dbsym r dat_buff 22 c
	.dbsym r dat 20 c
	.dbend
	.dbfunc e twi_transmint _twi_transmint fV
;      dat1_buff -> <dead>
;           dat1 -> R20
;           dat2 -> R20
	.even
_twi_transmint::
	rcall push_gset1
	sbiw R28,1
	.dbline -1
	.dbline 203
; }
; //>>>>>>>>>>>>>>>>做包
; void twi_transmint(void)
;  {
	.dbline 207
;     unsigned char dat1,dat2;
; 	unsigned char dat1_buff;
;   
;     if(Twi_Hex_Data_Flag == true)
	lds R24,_Twi_Hex_Data_Flag
	cpi R24,1
	breq X3
	rjmp L55
X3:
	.dbline 208
;     {
	.dbline 210
; 	    
; 	    Twi_Hex_Data_Flag = false;
	clr R2
	sts _Twi_Hex_Data_Flag,R2
	.dbline 211
; 		if(Twi_Write_Flag == true)
	lds R24,_Twi_Write_Flag
	cpi R24,1
	brne L57
	.dbline 212
; 		{
	.dbline 213
; 		    Twi_Write_Flag = false;
	sts _Twi_Write_Flag,R2
	.dbline 214
; 	        dat1 = twi_write_byte(Twi_Hex_Data[0],Twi_Hex_Data[1],Twi_Hex_Data[2]);
	lds R2,_Twi_Hex_Data+2
	std y+0,R2
	lds R18,_Twi_Hex_Data+1
	lds R16,_Twi_Hex_Data
	rcall _twi_write_byte
	mov R20,R16
	.dbline 222
; 		
; 		    #ifdef test
; 			//显示TWI状态字
; 			show_data(dat1);
; 			USART_Transmit("this is write!");
; 			#endif
; 		
; 			if(Write_Succsee_Flag == true)
	lds R24,_Write_Succsee_Flag
	cpi R24,1
	brne L61
	.dbline 223
; 			{
	.dbline 224
; 				Write_Succsee_Flag = false;
	clr R2
	sts _Write_Succsee_Flag,R2
	.dbline 226
; 				
; 				USART_Transmit(UART_TX_buff);//写成功
	ldi R16,<_UART_TX_buff
	ldi R17,>_UART_TX_buff
	rcall _USART_Transmit
	.dbline 230
; 				#ifdef test
; 				USART_Transmit("write successfully!");
; 				#endif
; 			}
	rjmp L62
L61:
	.dbline 232
; 			else
; 			{
	.dbline 233
; 				USART_Transmit(Write_Error);//写不成功
	ldi R16,<_Write_Error
	ldi R17,>_Write_Error
	rcall _USART_Transmit
	.dbline 237
; 				#ifdef test
; 			    USART_Transmit("write error!");
; 				#endif
; 			}
L62:
	.dbline 238
; 			WDR();
	wdr
	.dbline 239
; 		}
L57:
	.dbline 240
; 		if(Twi_Read_Flag == true)
	lds R24,_Twi_Read_Flag
	cpi R24,1
	brne L63
	.dbline 241
;         {
	.dbline 242
; 			Twi_Read_Flag = false;
	clr R2
	sts _Twi_Read_Flag,R2
	.dbline 243
; 			dat2 = twi_read_byte(Twi_Hex_Data[0],Twi_Hex_Data[1]);
	lds R18,_Twi_Hex_Data+1
	lds R16,_Twi_Hex_Data
	rcall _twi_read_byte
	mov R20,R16
	.dbline 249
; 			#ifdef test
; 			show_data(dat2);
; 			USART_Transmit("this is read!");
; 			#endif
; 			
; 			if(Read_Succsee_Flag  != true)
	lds R24,_Read_Succsee_Flag
	cpi R24,1
	breq L66
	.dbline 250
; 			{
	.dbline 251
; 				USART_Transmit(Read_Error);//读失败
	ldi R16,<_Read_Error
	ldi R17,>_Read_Error
	rcall _USART_Transmit
	.dbline 255
; 				#ifdef test
; 				USART_Transmit("read error!");
; 				#endif
; 			}
	rjmp L67
L66:
	.dbline 257
; 			else
; 			{
	.dbline 258
; 				Read_Succsee_Flag  = false;
	clr R2
	sts _Read_Succsee_Flag,R2
	.dbline 260
; 				
; 				hex_to_ascii(dat2);//读成功 且读的数在dat2中				
	mov R16,R20
	rcall _hex_to_ascii
	.dbline 261
; 				USART_Transmit(UART_TX_buff);
	ldi R16,<_UART_TX_buff
	ldi R17,>_UART_TX_buff
	rcall _USART_Transmit
	.dbline 265
; 				#ifdef test
; 				USART_Transmit("read successfully!");
; 				#endif
; 			}
L67:
	.dbline 266
; 			WDR();
	wdr
	.dbline 267
; 		}
L63:
	.dbline 268
L55:
	.dbline -2
L54:
	adiw R28,1
	rcall pop_gset1
	.dbline 0 ; func end
	ret
	.dbsym l dat1_buff 2 c
	.dbsym r dat1 20 c
	.dbsym r dat2 20 c
	.dbend
	.dbfunc e init_data _init_data fV
	.even
_init_data::
	.dbline -1
	.dbline 272
; 	}
;  }
; 
; void init_data(void)
; {
	.dbline 273
;    Twi_Write_Flag     = false;
	clr R2
	sts _Twi_Write_Flag,R2
	.dbline 274
;    Twi_Read_Flag      = false;
	sts _Twi_Read_Flag,R2
	.dbline 275
;    Twi_Hex_Data_Flag  = false;      
	sts _Twi_Hex_Data_Flag,R2
	.dbline 276
;    Twi_ASCI_Data_Flag = false;
	sts _Twi_ASCI_Data_Flag,R2
	.dbline 277
;    Slave_Led_Status   = LED_OFF;
	sts _Slave_Led_Status,R2
	.dbline 278
;    Main_Led_Status    = LED_OFF;
	sts _Main_Led_Status,R2
	.dbline 279
;    Cur_Main_Led_Status= LED_OFF;
	sts _Cur_Main_Led_Status,R2
	.dbline 280
;    Count_10ms         = 0;
	sts _Count_10ms,R2
	.dbline 281
;    WDR();
	wdr
	.dbline -2
L68:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e port_init _port_init fV
	.even
_port_init::
	.dbline -1
	.dbline 284
; }
; void port_init(void)
; {
	.dbline 285
;  PORTB = 0x3F;
	ldi R24,63
	out 0x18,R24
	.dbline 286
;  DDRB  = 0x00;
	clr R2
	out 0x17,R2
	.dbline 287
;  PORTC = 0x4F; //m103 output only
	ldi R24,79
	out 0x15,R24
	.dbline 288
;  DDRC  = 0x00;
	out 0x14,R2
	.dbline 289
;  PORTD = 0xFC;
	ldi R24,252
	out 0x12,R24
	.dbline 290
;  DDRD  = 0x00;
	out 0x11,R2
	.dbline -2
L69:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e init_devices _init_devices fV
	.even
_init_devices::
	.dbline -1
	.dbline 294
; }
; //call this routine to initialize all peripherals
; void init_devices(void)
; {
	.dbline 296
;  //stop errant interrupts until set up
;  CLI(); //disable all interrupts
	cli
	.dbline 297
;  port_init();
	rcall _port_init
	.dbline 298
;  uart0_init();
	rcall _uart0_init
	.dbline 299
;  twi_init();
	rcall _twi_init
	.dbline 300
;  timer0_init();
	rcall _timer0_init
	.dbline 301
;  watchdog_init();
	rcall _watchdog_init
	.dbline 303
; 
;  MCUCR = 0x00;
	clr R2
	out 0x35,R2
	.dbline 304
;  GICR  = 0x00;
	out 0x3b,R2
	.dbline 305
;  TIMSK = 0x00; //timer interrupt sources
	out 0x39,R2
	.dbline 306
;  SEI(); //re-enable interrupts
	sei
	.dbline -2
L70:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e check_watchdog _check_watchdog fV
	.even
_check_watchdog::
	.dbline -1
	.dbline 310
;  //all peripherals are now initialized
; }
; void check_watchdog(void)
; {
	.dbline 311
;  	WDR();//喂狗
	wdr
	.dbline -2
L71:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e watchdog_init _watchdog_init fV
	.even
_watchdog_init::
	.dbline -1
	.dbline 314
; }
; void watchdog_init(void)
; {
	.dbline 315
;  WDR();//看门狗计数清零
	wdr
	.dbline 316
;  WDTCR=((1<<WDE)|(1<<WDP2)|(1<<WDP0));//64K分频,0.52S
	ldi R24,13
	out 0x21,R24
	.dbline -2
L72:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e timer0_init _timer0_init fV
	.even
_timer0_init::
	.dbline -1
	.dbline 324
;  //WDIE是看门狗中断使能,WDE看门狗使能 101 512k
; }
; 
; //TIMER0 initialize - prescale:256
; // desired value: 100Hz
; // actual value: 100.000Hz (0.0%)
; void timer0_init(void)
; {
	.dbline 325
;  TCCR0 = 0x00; //stop
	clr R2
	out 0x33,R2
	.dbline 326
;  TCNT0 = 0x4C; //set count
	ldi R24,76
	out 0x32,R24
	.dbline 327
;  TCCR0 = 0x04; //start timer
	ldi R24,4
	out 0x33,R24
	.dbline -2
L73:
	.dbline 0 ; func end
	ret
	.dbend
	.area vector(rom, abs)
	.org 18
	rjmp _timer0_ovf_isr
	.area text(rom, con, rel)
	.dbfile F:\UART_TO_TWI\uart_to_twi_m8.c
	.dbfunc e timer0_ovf_isr _timer0_ovf_isr fV
	.even
_timer0_ovf_isr::
	st -y,R2
	st -y,R24
	st -y,R25
	in R2,0x3f
	st -y,R2
	.dbline -1
	.dbline 332
; }
; 
; #pragma interrupt_handler timer0_ovf_isr:10
; void timer0_ovf_isr(void)
; {
	.dbline 333
;     TCNT0 = 0x4C; //reload counter value
	ldi R24,76
	out 0x32,R24
	.dbline 335
;     //主灯
;     Count_10ms++;
	lds R24,_Count_10ms
	subi R24,255    ; addi 1
	sts _Count_10ms,R24
	.dbline 336
;     if((Count_10ms>0)&&(Count_10ms<5))
	clr R2
	cp R2,R24
	brsh L75
	cpi R24,5
	brsh L75
	.dbline 337
;     {
	.dbline 338
;        Cur_Main_Led_Status = LED_ON;
	ldi R24,1
	sts _Cur_Main_Led_Status,R24
	.dbline 339
; 	}
L75:
	.dbline 340
	ldi R24,5
	lds R2,_Count_10ms
	cp R24,R2
	brsh L77
	mov R24,R2
	cpi R24,10
	brsh L77
	.dbline 341
	.dbline 342
	clr R2
	sts _Cur_Main_Led_Status,R2
	.dbline 343
L77:
	.dbline -2
L74:
	ld R2,y+
	out 0x3f,R2
	ld R25,y+
	ld R24,y+
	ld R2,y+
	.dbline 0 ; func end
	reti
	.dbend
	.dbfunc e check_main_led _check_main_led fV
	.even
_check_main_led::
	.dbline -1
	.dbline 346
;     if((Count_10ms>5)&&(Count_10ms<10))
;     {
;       Cur_Main_Led_Status = LED_OFF;
;     }
; }
; void check_main_led(void)
; {
	.dbline 347
;    if(Main_Led_Status != Cur_Main_Led_Status)
	lds R2,_Cur_Main_Led_Status
	lds R3,_Main_Led_Status
	cp R3,R2
	breq L80
	.dbline 348
;    {
	.dbline 349
;  	  if(Main_Led_Status == LED_ON) 	   Main_Led_Off();
	mov R24,R3
	cpi R24,1
	brne L82
	.dbline 349
	sbi 0x12,3
	rjmp L83
L82:
	.dbline 350
; 	  else		   	  		   	   Main_Led_On();
	cbi 0x12,3
L83:
	.dbline 351
	lds R2,_Cur_Main_Led_Status
	sts _Main_Led_Status,R2
	.dbline 352
L80:
	.dbline -2
L79:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e check_slave_led _check_slave_led fV
	.even
_check_slave_led::
	.dbline -1
	.dbline 355
; 	  Main_Led_Status = Cur_Main_Led_Status;
;    }
; }
; void check_slave_led(void)
; {
	.dbline 356
;     if(Slave_Led_Status == LED_ON) 
	lds R24,_Slave_Led_Status
	cpi R24,1
	brne L85
	.dbline 357
;     {
	.dbline 358
;       Slave_Led_On();
	cbi 0x12,2
	.dbline 359
; 	}
	rjmp L86
L85:
	.dbline 361
	.dbline 362
	sbi 0x12,2
	.dbline 363
L86:
	.dbline -2
L84:
	.dbline 0 ; func end
	ret
	.dbend
	.area bss(ram, con, rel)
	.dbfile F:\UART_TO_TWI\uart_to_twi_m8.c
_Count_10ms::
	.blkb 1
	.dbsym e Count_10ms _Count_10ms c
_Cur_Main_Led_Status::
	.blkb 1
	.dbsym e Cur_Main_Led_Status _Cur_Main_Led_Status c
_Main_Led_Status::
	.blkb 1
	.dbsym e Main_Led_Status _Main_Led_Status c
_Slave_Led_Status::
	.blkb 1
	.dbsym e Slave_Led_Status _Slave_Led_Status c
_Twi_Hex_Data_Flag::
	.blkb 1
	.dbsym e Twi_Hex_Data_Flag _Twi_Hex_Data_Flag c
_Twi_ASCI_Data_Flag::
	.blkb 1
	.dbsym e Twi_ASCI_Data_Flag _Twi_ASCI_Data_Flag c
_Twi_Read_Flag::
	.blkb 1
	.dbsym e Twi_Read_Flag _Twi_Read_Flag c
_Twi_Write_Flag::
	.blkb 1
	.dbsym e Twi_Write_Flag _Twi_Write_Flag c
_Twi_ASCI_Data::
	.blkb 6
	.dbsym e Twi_ASCI_Data _Twi_ASCI_Data A[6:6]c
_Twi_Hex_Data::
	.blkb 3
	.dbsym e Twi_Hex_Data _Twi_Hex_Data A[3:3]c
	.area data(ram, con, rel)
	.dbfile F:\UART_TO_TWI\uart_to_twi_m8.c
L2:
	.blkb 9
	.area idata
	.byte 'r,'e,'a,'d,32,'g,'o,33,0
	.area data(ram, con, rel)
	.dbfile F:\UART_TO_TWI\uart_to_twi_m8.c

⌨️ 快捷键说明

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