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

📄 test.s

📁 uart软件仿真实现
💻 S
字号:
	.module TEST.C
	.area text(rom, con, rel)
	.dbfile D:\iccavr\mega16\11\UART\TEST.C
	.dbfile D:\iccavr\mega16\11\UART\uart.h
	.dbfunc e uart_init _uart_init fV
	.even
_uart_init::
	.dbline -1
	.dbline 9
; /**********串口端口定义**********/
; #define RxD  PD0
; #define TxD  PD1
; 
; #define baudrate  9600      	//波特率
; #define F_CPU     8000000UL     //定义晶振频率
; 
; void uart_init(void)
; {
	.dbline 11
;   /*****RS232口线设置*****/
;   PORTD|=BIT(RxD)|BIT(TxD);
	in R24,0x12
	ori R24,3
	out 0x12,R24
	.dbline 12
;   DDRD&=~BIT(RxD);
	cbi 0x11,0
	.dbline 13
;   DDRD|=BIT(TxD);
	sbi 0x11,1
	.dbline 16
;   
;   /* 设置波特率*/
;   UBRRL=(F_CPU/baudrate/16-1)%256; //本设置波特率不加倍及U2X=0
	ldi R24,51
	out 0x9,R24
	.dbline 17
;   UBRRH=(F_CPU/baudrate/16-1)/256;
	clr R2
	out 0x20,R2
	.dbline 24
;   /*U2X=1的设置波特率*/
;   //UBRRL= (F_CPU/BAUDRATE/8-1)%256;
;   //UBRRH= (F_CPU/BAUDRATE/8-1)/256;
; 
;   /* 接收器与发送器使能*/
;   //UCSRB=(1<<RXEN)|(1<<TXEN);
;   UCSRB|=BIT(4)|BIT(3);
	in R24,0xa
	ori R24,24
	out 0xa,R24
	.dbline 29
;   
;   /*设置传输格式*/
;   //异步,8位数据,无奇偶校验,一个停止位,无倍速
;   //UCSRC=(1<<URSEL)|(1<<UCSZ0)|(1<<UCSZ1);
;   UCSRC|=BIT(7)|BIT(2)|BIT(1);  
	in R24,0x20
	ori R24,134
	out 0x20,R24
	.dbline -2
L1:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e putc _putc fV
;              c -> R16
	.even
_putc::
	.dbline -1
	.dbline 34
; }
; 
; //串口数据发送,查询方式
; void putc(unsigned char c)
; {
L3:
	.dbline 36
;    /* 等待发送缓冲器为空 */
;    while (!(UCSRA&(1<<UDRE)));
L4:
	.dbline 36
	sbis 0xb,5
	rjmp L3
X0:
	.dbline 38
;   /* 将数据放入缓冲器,发送数据 */
;    UDR = c;
	out 0xc,R16
	.dbline -2
L2:
	.dbline 0 ; func end
	ret
	.dbsym r c 16 c
	.dbend
	.dbfunc e puts _puts fV
;              s -> R20,R21
	.even
_puts::
	st -y,R20
	st -y,R21
	movw R20,R16
	.dbline -1
	.dbline 43
; }
; 
; //串口字符串发送,查询方式
; void puts(unsigned char *s)
; {
	xjmp L8
L7:
	.dbline 45
;   while(*s)
;   {
	.dbline 46
;    putc(*s);
	movw R30,R20
	ldd R16,z+0
	xcall _putc
	.dbline 47
;    s++;
	subi R20,255  ; offset = 1
	sbci R21,255
	.dbline 48
;   }
L8:
	.dbline 44
	movw R30,R20
	ldd R2,z+0
	tst R2
	brne L7
X1:
	.dbline 49
;   putc('\n');
	ldi R16,10
	xcall _putc
	.dbline -2
L6:
	.dbline 0 ; func end
	ld R21,y+
	ld R20,y+
	ret
	.dbsym r s 20 pc
	.dbend
	.dbfunc e getc _getc fc
	.even
_getc::
	.dbline -1
	.dbline 55
;   //return 1;
; }
; 
; //串口数据接收,查询方式
; unsigned char getc(void)
; {
L11:
	.dbline 57
;   /* 等待接收数据*/
;   while (!(UCSRA&(1<<RXC)));
L12:
	.dbline 57
	sbis 0xb,7
	rjmp L11
X2:
	.dbline 59
;   /* 从缓冲器中获取并返回数据*/
;   return UDR;
	in R16,0xc
	.dbline -2
L10:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e get_s _get_s fV
;              i -> R20,R21
;            num -> R10,R11
;             js -> R12,R13
	.even
_get_s::
	xcall push_xgset303C
	movw R10,R18
	movw R12,R16
	.dbline -1
	.dbline 64
; }
; 
; //串口接收数据存储,存储到数组中
; void get_s(unsigned char *js,unsigned int num)
; {
	.dbline 66
;  unsigned int i; 
;    for(i=0;i<num;i++)
	clr R20
	clr R21
	xjmp L18
L15:
	.dbline 67
;    {
	.dbline 68
; 	 js[i]=getc();		//保存数据到数组里面
	xcall _getc
	movw R30,R20
	add R30,R12
	adc R31,R13
	std z+0,R16
	.dbline 69
;    }
L16:
	.dbline 66
	subi R20,255  ; offset = 1
	sbci R21,255
L18:
	.dbline 66
	cp R20,R10
	cpc R21,R11
	brlo L15
X3:
	.dbline -2
L14:
	.dbline 0 ; func end
	xjmp pop_xgset303C
	.dbsym r i 20 i
	.dbsym r num 10 i
	.dbsym r js 12 pc
	.dbend
	.dbfile D:\iccavr\mega16\11\UART\TEST.C
	.dbfunc e main _main fV
	.even
_main::
	.dbline -1
	.dbline 11
; //ICC-AVR application builder : 2008-11-4 12:34:31
; // Target : M16
; // Crystal: 8.0000Mhz
; 
; #include <iom16v.h>
; #include <macros.h>
; 
; #include "uart.h"
; 
; void main(void)
; {
	.dbline 12
;  uart_init();
	xcall _uart_init
	xjmp L21
L20:
	.dbline 14
;  while(1)
;  {
	.dbline 15
;   putc(getc());
	xcall _getc
	xcall _putc
	.dbline 16
;  }
L21:
	.dbline 13
	xjmp L20
X4:
	.dbline -2
L19:
	.dbline 0 ; func end
	ret
	.dbend
; }

⌨️ 快捷键说明

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