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

📄 uart_atmega8.s

📁 AVR单片机的T_TO_TWI通讯方式
💻 S
字号:
	.module uart_atmega8.c
	.area text(rom, con, rel)
	.dbfile H:\UART_TO_TWI\uart_atmega8.c
	.dbfunc e main _main fV
	.even
_main::
	.dbline -1
	.dbline 29
; /*****************************************************************
; ICC-AVR application builder : 2005-8-19 14:40:53
;  Target : M8
;  Crystal: 7.3728Mhz
; // Crystal: 4.6080Mhz
; 
; 实验:做usart串行通讯实验
; 目的:了解及会使用usart串口
; CPU:atmega8L
; 相关的5个寄存器:UCSRA,UCSRB,UCSRC,UDR,UBRR(UBRRH,UBRRL)
; 	         其中:UBRRH和UCSRC共用一个地址
; ******************************************************************/
; /*配置:CKOPT=0,CKSEL3..0=1111,SUT1..0=11(65ms慢速上升电源)*/
; #include <iom8v.h>
; #include <macros.h>
; #include "usart_m8.h"
; #include "twi.h"
; 
; void check_I2C(void);
; void init_data(void);
; void port_init(void);
; void init_devices(void);
; void check_watchdog(void);
; void process_data_pack(void);
; void watchdog_init(void);
; 
; 
; void main(void)
; {
	.dbline 30
; 	init_devices();
	rcall _init_devices
	.dbline 31
; 	init_data();
	rcall _init_data
	rjmp L3
L2:
	.dbline 34
	.dbline 35
	rcall _check_I2C
	.dbline 36
	ldi R16,<L5
	ldi R17,>L5
	rcall _USART_Transmit
	.dbline 37
	rcall _process_data_pack
	.dbline 38
	rcall _check_watchdog
	.dbline 39
L3:
	.dbline 33
	rjmp L2
X0:
	.dbline -2
L1:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e process_data_pack _process_data_pack fV
	.even
_process_data_pack::
	.dbline -1
	.dbline 43
;   
; 	while(1)  //forever
; 	   {
; 	      check_I2C();
; 		  USART_Transmit( "我是中国人" );
; 	      process_data_pack();
; 		  check_watchdog();//喂狗
;        }
; }
; //解包
; void process_data_pack(void)
; {
	.dbline 44
;    if(Rx_Over_Pack_Flag == true)
	lds R24,_Rx_Over_Pack_Flag
	cpi R24,1
	brne L7
	.dbline 45
;     {
	.dbline 46
; 		if((UART_RX_buff[1] == 0x57)&&(UART_RX_buff[8] == 0x58))
	lds R24,_UART_RX_buff+1
	cpi R24,87
	brne L9
	lds R24,_UART_RX_buff+8
	cpi R24,88
	brne L9
	.dbline 47
; 		{
	.dbline 49
; 		  
; 		}
L9:
	.dbline 50
; 		if((UART_RX_buff[1] == 0x52)&&(UART_RX_buff[8] == 0x58))
	lds R24,_UART_RX_buff+1
	cpi R24,82
	brne L13
	lds R24,_UART_RX_buff+8
	cpi R24,88
	brne L13
	.dbline 51
; 		{
	.dbline 53
; 		 
; 		}
L13:
	.dbline 54
L7:
	.dbline -2
L6:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e check_I2C _check_I2C fV
;            dat -> <dead>
	.even
_check_I2C::
	.dbline -1
	.dbline 59
	.dbline 62
	lds R24,_Mem_Write_Flag
	cpi R24,1
	brne L18
	.dbline 63
	.dbline 64
	clr R2
	sts _Mem_Write_Flag,R2
	.dbline 66
	.dbline 67
L18:
	.dbline -2
L17:
	.dbline 0 ; func end
	ret
	.dbsym l dat 1 c
	.dbend
	.dbfunc e init_data _init_data fV
	.even
_init_data::
	.dbline -1
	.dbline 71
; 	}
; }
; 
; 
; void check_I2C(void)
; {
; 	unsigned char dat;
; 	
; 	if(Mem_Write_Flag == true)
; 	{
; 	 	Mem_Write_Flag = false;			  
; 
; 		;
; 	}	
; }
; 
; void init_data(void)
; {
	.dbline 72
;  ;// Rx_Flag    = false;
	.dbline -2
L20:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e port_init _port_init fV
	.even
_port_init::
	.dbline -1
	.dbline 75
; }
; void port_init(void)
; {
	.dbline 76
;  PORTB = 0x3F;
	ldi R24,63
	out 0x18,R24
	.dbline 77
;  DDRB  = 0x00;
	clr R2
	out 0x17,R2
	.dbline 78
;  PORTC = 0x4F; //m103 output only
	ldi R24,79
	out 0x15,R24
	.dbline 79
;  DDRC  = 0x00;
	out 0x14,R2
	.dbline 80
;  PORTD = 0xFC;
	ldi R24,252
	out 0x12,R24
	.dbline 81
;  DDRD  = 0x00;
	out 0x11,R2
	.dbline -2
L21:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e init_devices _init_devices fV
	.even
_init_devices::
	.dbline -1
	.dbline 85
; }
; //call this routine to initialize all peripherals
; void init_devices(void)
; {
	.dbline 87
;  //stop errant interrupts until set up
;  CLI(); //disable all interrupts
	cli
	.dbline 88
;  port_init();
	rcall _port_init
	.dbline 89
;  uart0_init();
	rcall _uart0_init
	.dbline 90
;  twi_init();
	rcall _twi_init
	.dbline 91
;  watchdog_init();
	rcall _watchdog_init
	.dbline 93
; 
;  MCUCR = 0x00;
	clr R2
	out 0x35,R2
	.dbline 94
;  GICR  = 0x00;
	out 0x3b,R2
	.dbline 95
;  TIMSK = 0x00; //timer interrupt sources
	out 0x39,R2
	.dbline 96
;  SEI(); //re-enable interrupts
	sei
	.dbline -2
L22:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e check_watchdog _check_watchdog fV
	.even
_check_watchdog::
	.dbline -1
	.dbline 100
;  //all peripherals are now initialized
; }
; void check_watchdog(void)
; {
	.dbline 101
;  	WDR();//喂狗
	wdr
	.dbline -2
L23:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e watchdog_init _watchdog_init fV
	.even
_watchdog_init::
	.dbline -1
	.dbline 104
; }
; void watchdog_init(void)
; {
	.dbline 105
;  WDR();//看门狗计数清零
	wdr
	.dbline 106
;  WDTCR=((1<<WDE)|(1<<WDP2)|(1<<WDP0));//64K分频,0.52S
	ldi R24,13
	out 0x21,R24
	.dbline -2
L24:
	.dbline 0 ; func end
	ret
	.dbend
	.area data(ram, con, rel)
	.dbfile H:\UART_TO_TWI\uart_atmega8.c
L5:
	.blkb 11
	.area idata
	.byte 206,210,202,199,214,208,185,250,200,203,0
	.area data(ram, con, rel)
	.dbfile H:\UART_TO_TWI\uart_atmega8.c

⌨️ 快捷键说明

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