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

📄 usart使用.s

📁 使用mega8的USART与计算机通信
💻 S
字号:
	.module USART使用.c
	.area data(ram, con, rel)
_f::
	.blkb 2
	.area idata
	.byte 1,2
	.area data(ram, con, rel)
	.blkb 2
	.area idata
	.byte 3,4
	.area data(ram, con, rel)
	.blkb 2
	.area idata
	.byte 5,0
	.area data(ram, con, rel)
	.dbfile C:\DOCUME~1\Administrator\桌面\maga8练习\USART\USART使用.c
	.dbsym e f _f A[6:6]c
	.area text(rom, con, rel)
	.dbfile C:\DOCUME~1\Administrator\桌面\maga8练习\USART\USART使用.c
	.dbfunc e port_init _port_init fV
	.even
_port_init::
	.dbline -1
	.dbline 10
; //ICC-AVR application builder : 1980-1-4 4:49:58
; // Target : M8
; // Crystal: 1.0000Mhz
; 
; #include <iom8v.h>
; #include <macros.h>
; unsigned char f[6]={0x01,0x02,0x03,0x04,0x05,0x00};
; 
; void port_init(void)
; {
	.dbline 11
;  PORTB = 0xFF;
	ldi R24,255
	out 0x18,R24
	.dbline 12
;  DDRB  = 0x00;
	clr R2
	out 0x17,R2
	.dbline 13
;  PORTC = 0x7F; //m103 output only
	ldi R24,127
	out 0x15,R24
	.dbline 14
;  DDRC  = 0x00;
	out 0x14,R2
	.dbline 15
;  PORTD = 0xFF;
	ldi R24,255
	out 0x12,R24
	.dbline 16
;  DDRD  = 0x02;
	ldi R24,2
	out 0x11,R24
	.dbline -2
	.dbline 17
; }
L1:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e uart0_init _uart0_init fV
	.even
_uart0_init::
	.dbline -1
	.dbline 25
; 
; //UART0 initialisation
; // desired baud rate: 9600
; // actual: baud rate:9615 (0.2%)
; // char size: 8 bit
; // parity: Disabled
; void uart0_init(void)
; {
	.dbline 26
;  UCSRB = 0x00; //disable while setting baud rate
	clr R2
	out 0xa,R2
	.dbline 27
;  UCSRA = 0x02;//倍速
	ldi R24,2
	out 0xb,R24
	.dbline 28
;  UCSRC = 0x86;//写UCSRAC,XCK下降沿采样,异步
	ldi R24,134
	out 0x20,R24
	.dbline 29
;  UBRRL = 0x0C; //set baud rate lo
	ldi R24,12
	out 0x9,R24
	.dbline 30
;  UBRRH = 0x00; //set baud rate hi
	out 0x20,R2
	.dbline 31
;  UCSRB = 0x98;//接收结束中断使能
	ldi R24,152
	out 0xa,R24
	.dbline -2
	.dbline 32
;  }
L2:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e put_char _put_char fV
;              d -> R16
	.even
_put_char::
	.dbline -1
	.dbline 41
;  /*字符输入函数*/         
; /*unsigned char getchar(void) 
; { 
;        while(!(UCSRA& (1<<RXC))); 
;        return UDR; 
; } 
; *///UART0 发送一个字节
; void put_char(unsigned char d)       
; {/* 等待发送缓冲器为空 */
L4:
	.dbline 42
L5:
	.dbline 42
; while ( !( UCSRA & (1<<UDRE)));
	sbis 0xb,5
	rjmp L4
	.dbline 44
; /* 将数据放入缓冲器,发送数据 */
;   UDR=d;
	out 0xc,R16
	.dbline -2
	.dbline 47
;   //while(!(UCSRA&0x40));        //等待TXC置位
;   //UCSRA|=0x40;                 //写1清零
; }
L3:
	.dbline 0 ; func end
	ret
	.dbsym r d 16 c
	.dbend
	.dbfunc e put_s _put_s fV
;              s -> R20,R21
	.even
_put_s::
	rcall push_gset1
	movw R20,R16
	.dbline -1
	.dbline 50
;  //字符输入函数
; void put_s(unsigned char *s) 
; {  
	rjmp L9
L8:
	.dbline 52
	.dbline 53
	movw R30,R20
	ldd R16,z+0
	rcall _put_char
	.dbline 54
	subi R20,255  ; offset = 1
	sbci R21,255
	.dbline 55
L9:
	.dbline 51
;       while (*s) 
	movw R30,R20
	ldd R2,z+0
	tst R2
	brne L8
	.dbline -2
	.dbline 56
;       { 
;            put_char(*s); 
;            s++; 
;        }         
; }
L7:
	rcall pop_gset1
	.dbline 0 ; func end
	ret
	.dbsym r s 20 pc
	.dbend
	.area vector(rom, abs)
	.org 22
	rjmp _uart0_rx_isr
	.area text(rom, con, rel)
	.dbfile C:\DOCUME~1\Administrator\桌面\maga8练习\USART\USART使用.c
	.dbfunc e uart0_rx_isr _uart0_rx_isr fV
	.even
_uart0_rx_isr::
	rcall push_lset
	.dbline -1
	.dbline 60
; 
; #pragma interrupt_handler uart0_rx_isr:12
; void uart0_rx_isr(void)//接收中断RXC置1时中断
; {
	.dbline 61
; put_char(UDR);//接收完发送短信
	in R16,0xc
	rcall _put_char
	.dbline -2
	.dbline 64
;  
;  //uart has received a character in UDR
; }
L11:
	rcall pop_lset
	.dbline 0 ; func end
	reti
	.dbend
	.dbfunc e init_devices _init_devices fV
	.even
_init_devices::
	.dbline -1
	.dbline 68
; 
; //call this routine to initialise all peripherals
; void init_devices(void)
; {
	.dbline 70
;  //stop errant interrupts until set up
;  CLI(); //disable all interrupts
	cli
	.dbline 71
;  port_init();
	rcall _port_init
	.dbline 72
;  uart0_init();
	rcall _uart0_init
	.dbline 74
; 
;  MCUCR = 0x00;
	clr R2
	out 0x35,R2
	.dbline 75
;  GICR  = 0x00;
	out 0x3b,R2
	.dbline 76
;  TIMSK = 0x00; //timer interrupt sources
	out 0x39,R2
	.dbline 77
;  SEI(); //re-enable interrupts
	sei
	.dbline -2
	.dbline 79
;  //all peripherals are now initialised
; }
L12:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e delay_us _delay_us fV
;           time -> R16,R17
	.even
_delay_us::
	.dbline -1
	.dbline 81
; void delay_us(int time)
; 	 {     
L14:
	.dbline 83
;   	  do
; 	  	{
	.dbline 84
; 		 time--;
	subi R16,1
	sbci R17,0
	.dbline 85
; 		}	
L15:
	.dbline 86
;   	  while (time>1);
	ldi R24,1
	ldi R25,0
	cp R24,R16
	cpc R25,R17
	brlt L14
	.dbline -2
	.dbline 87
; 	 }	   
L13:
	.dbline 0 ; func end
	ret
	.dbsym r time 16 I
	.dbend
	.dbfunc e delay_ms _delay_ms fV
;           time -> R20,R21
	.even
_delay_ms::
	rcall push_gset1
	movw R20,R16
	.dbline -1
	.dbline 89
; void delay_ms(unsigned int time)
; 	 {
	rjmp L19
L18:
	.dbline 91
	.dbline 92
	ldi R16,30
	ldi R17,0
	rcall _delay_us
	.dbline 93
	subi R20,1
	sbci R21,0
	.dbline 94
L19:
	.dbline 90
; 	   while(time!=0)
	cpi R20,0
	cpc R20,R21
	brne L18
X0:
	.dbline -2
	.dbline 95
; 	  	  {		
; 		   delay_us(30);
; 		   time--;
; 		  }
; 	 } 
L17:
	rcall pop_gset1
	.dbline 0 ; func end
	ret
	.dbsym r time 20 i
	.dbend
	.dbfunc e main _main fV
;              i -> R20,R21
	.even
_main::
	.dbline -1
	.dbline 98
; 
; void main()
; {int i;
	.dbline 99
;  init_devices();
	rcall _init_devices
	rjmp L23
L22:
	.dbline 105
;  /*put_s("hello donkey!");
;  put_char(0x0a);
;  put_char(0x0d);
;  put_s("i love you");*/
;  while(1)
;  {
	.dbline 106
;  for(i=0;i<6;i++)
	clr R20
	clr R21
L25:
	.dbline 107
	.dbline 108
	ldi R24,<_f
	ldi R25,>_f
	movw R30,R20
	add R30,R24
	adc R31,R25
	ldd R16,z+0
	rcall _put_char
	.dbline 109
L26:
	.dbline 106
	subi R20,255  ; offset = 1
	sbci R21,255
	.dbline 106
	cpi R20,6
	ldi R30,0
	cpc R21,R30
	brlt L25
	.dbline 111
	ldi R16,100
	ldi R17,0
	rcall _delay_ms
	.dbline 112
L23:
	.dbline 104
	rjmp L22
X1:
	.dbline -2
	.dbline 113
;  {
;  put_char(f[i]);
;  }//显示数字时,调proteus里面黑屏右键hex display mode
;  //while(1);
;  delay_ms(100);
;  }
;  }
L21:
	.dbline 0 ; func end
	ret
	.dbsym r i 20 I
	.dbend

⌨️ 快捷键说明

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