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

📄 uart.s

📁 LTC2449 AD转换 LTC2449 AD转换 LTC2449 AD转换
💻 S
字号:
	.module uart.c
	.area text(rom, con, rel)
	.dbfile E:\mysoft\DH980\uart.c
	.dbfunc e uart0_init _uart0_init fV
	.even
_uart0_init::
	.dbline -1
	.dbline 13
; #include <iom169v.h>
; #include <macros.h>
; #include <stdio.h>
; #include "main.h"
; #include "uart.h"
; 
; unsigned char relay_temp[7];
; unsigned char *load;
; //UART0 initialize
; // desired baud rate: 19200
; // actual: baud rate:19200 (0.0%)
; void uart0_init(void)
; {
	.dbline 14
;  UCSR0B = 0x00; //disable while setting baud rate
	clr R2
	sts 193,R2
	.dbline 15
;  UCSR0A = 0x00;
	sts 192,R2
	.dbline 16
;  UCSR0C = 0x07;
	ldi R24,7
	sts 194,R24
	.dbline 17
;  UBRR0L = 0x23; //set baud rate lo
	ldi R24,35
	sts 196,R24
	.dbline 18
;  UBRR0H = 0x00; //set baud rate hi
	sts 197,R2
	.dbline 19
;  UCSR0B = 0x98;
	ldi R24,152
	sts 193,R24
	.dbline -2
L1:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e put_c _put_c fV
;              c -> R16
	.even
_put_c::
	.dbline -1
	.dbline 23
; }
; 
; void put_c(unsigned char c) //发送采用查询方式
; {
L3:
	.dbline 24
L4:
	.dbline 24
; 	while( (UCSRA & 0b00100000)==0);
	lds R2,192
	sbrs R2,5
	rjmp L3
	.dbline 26
; 	//delay_loop(5);
; 	UDR=c;
	sts 198,R16
	.dbline -2
L2:
	.dbline 0 ; func end
	ret
	.dbsym r c 16 c
	.dbend
	.dbfunc e put_s _put_s fV
;            ptr -> R20,R21
	.even
_put_s::
	xcall push_gset1
	movw R20,R16
	.dbline -1
	.dbline 30
; }
; 
; void put_s(unsigned char *ptr)
; {
	xjmp L8
L7:
	.dbline 32
	.dbline 33
	movw R30,R20
	ld R16,Z+
	movw R20,R30
	xcall _put_c
	.dbline 34
L8:
	.dbline 31
; 	while (*ptr)
	movw R30,R20
	ldd R2,z+0
	tst R2
	brne L7
	.dbline -2
L6:
	xcall pop_gset1
	.dbline 0 ; func end
	ret
	.dbsym r ptr 20 pc
	.dbend
	.area vector(rom, abs)
	.org 52
	jmp _uart0_rx_isr
	.area text(rom, con, rel)
	.dbfile E:\mysoft\DH980\uart.c
	.dbfunc e uart0_rx_isr _uart0_rx_isr fV
	.even
_uart0_rx_isr::
	st -y,R2
	st -y,R3
	st -y,R24
	st -y,R25
	st -y,R30
	st -y,R31
	in R2,0x3f
	st -y,R2
	.dbline -1
	.dbline 40
; 	{
; 		put_c(*ptr++);
; 	}
; }
; 
; 
; #pragma interrupt_handler uart0_rx_isr:14
; void uart0_rx_isr(void)
; {
	.dbline 41
; 	if (load_time > 3)
	ldi R24,3
	ldi R25,0
	lds R2,_load_time
	lds R3,_load_time+1
	cp R24,R2
	cpc R25,R3
	brsh L11
	.dbline 42
; 		{
	.dbline 43
; 			load_no = 0;
	clr R2
	sts _load_no,R2
	.dbline 44
; 			load = &relay_temp[0];
	ldi R24,<_relay_temp
	ldi R25,>_relay_temp
	sts _load+1,R25
	sts _load,R24
	.dbline 45
; 		}
L11:
	.dbline 46
	clr R2
	clr R3
	sts _load_time+1,R3
	sts _load_time,R2
	.dbline 47
	lds R24,_load_no
	cpi R24,5
	brsh L13
	.dbline 48
	.dbline 49
	lds R2,_load
	lds R3,_load+1
	mov R30,R24
	clr R31
	add R30,R2
	adc R31,R3
	lds R2,198
	std z+0,R2
	.dbline 50
	lds R24,_load_no
	subi R24,255    ; addi 1
	sts _load_no,R24
	.dbline 51
L13:
	.dbline -2
L10:
	ld R2,y+
	out 0x3f,R2
	ld R31,y+
	ld R30,y+
	ld R25,y+
	ld R24,y+
	ld R3,y+
	ld R2,y+
	.dbline 0 ; func end
	reti
	.dbend
	.dbfunc e load_init _load_init fV
	.even
_load_init::
	.dbline -1
	.dbline 54
; 	load_time=0;
; 	if(load_no<5)
; 		{
; 			*(load+load_no) = UDR;
; 			load_no++;
; 		}
; }
; void load_init()
; {
	.dbline 55
; 	load_time=0;
	clr R2
	clr R3
	sts _load_time+1,R3
	sts _load_time,R2
	.dbline 56
; 	load_no=0;
	sts _load_no,R2
	.dbline 57
; 	load = &relay_temp[0];
	ldi R24,<_relay_temp
	ldi R25,>_relay_temp
	sts _load+1,R25
	sts _load,R24
	.dbline -2
L15:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e data_load_manage _data_load_manage fV
;              p -> R20,R21
;          sum_c -> R22
;              t -> R10
	.even
_data_load_manage::
	xcall push_gset3
	.dbline -1
	.dbline 60
; }
; void data_load_manage()
; {
	.dbline 63
; 	unsigned char sum_c, t;	//和验算,循环次数
; 	unsigned char *p;
; 	if((load_no==5))	//下载完成条件
	lds R24,_load_no
	cpi R24,5
	breq X0
	xjmp L17
X0:
	.dbline 64
; 		{
	.dbline 65
; 			load_init();	//初始下载
	xcall _load_init
	.dbline 66
; 			sum_c = 0;
	clr R22
	.dbline 67
; 			for (t=0; t<4; t++)	//和验算
	clr R10
	xjmp L22
L19:
	.dbline 68
	.dbline 69
	lds R30,_load
	lds R31,_load+1
	ldd R2,z+0
	add R22,R2
	.dbline 70
	movw R24,R30
	adiw R24,1
	sts _load+1,R25
	sts _load,R24
	.dbline 71
L20:
	.dbline 67
	inc R10
L22:
	.dbline 67
	mov R24,R10
	cpi R24,4
	brlo L19
	.dbline 72
; 				{
; 					sum_c += (*load);
; 					load++;
; 				}
; 			if (sum_c == (*load))
	lds R30,_load
	lds R31,_load+1
	ldd R2,z+0
	cp R22,R2
	brne L23
	.dbline 73
; 				{							//刷新继电器值
	.dbline 74
; 					load = &relay_temp[0];
	ldi R24,<_relay_temp
	ldi R25,>_relay_temp
	sts _load+1,R25
	sts _load,R24
	.dbline 75
; 					p = Down_load.Relay_out;
	ldi R20,<_Down_load
	ldi R21,>_Down_load
	.dbline 76
; 					for (t=0; t<5; t++)
	clr R10
	xjmp L28
L25:
	.dbline 77
	.dbline 78
	lds R30,_load
	lds R31,_load+1
	ldd R2,z+0
	movw R30,R20
	std z+0,R2
	.dbline 79
	subi R20,255  ; offset = 1
	sbci R21,255
	.dbline 80
	lds R24,_load
	lds R25,_load+1
	adiw R24,1
	sts _load+1,R25
	sts _load,R24
	.dbline 81
L26:
	.dbline 76
	inc R10
L28:
	.dbline 76
	mov R24,R10
	cpi R24,5
	brlo L25
	.dbline 82
; 						{
; 							*p = *load;
; 							p++;
; 							load++;
; 						}
; 					updating=1;
	ldi R24,1
	sts _updating,R24
	.dbline 83
; 					load = &relay_temp[0];
	ldi R24,<_relay_temp
	ldi R25,>_relay_temp
	sts _load+1,R25
	sts _load,R24
	.dbline 84
; 				}
L23:
	.dbline 85
; 		}
L17:
	.dbline 88
	ldi R24,500
	ldi R25,1
	lds R2,_load_time
	lds R3,_load_time+1
	cp R24,R2
	cpc R25,R3
	brsh L29
	.dbline 89
	.dbline 90
	xcall _load_init
	.dbline 91
	xcall _relay_init
	.dbline 92
L29:
	.dbline -2
L16:
	xcall pop_gset3
	.dbline 0 ; func end
	ret
	.dbsym r p 20 pc
	.dbsym r sum_c 22 c
	.dbsym r t 10 c
	.dbend
	.dbfunc e data_send _data_send fV
;       sum_temp -> R20
;              l -> R22
;           send -> R10,R11
	.even
_data_send::
	xcall push_gset3
	.dbline -1
	.dbline 96
;  
; 	//长时间没收到上位机信号处理
; 	if (load_time>500)
; 		{
; 			load_init();
; 			relay_init();	//关闭全部继电器
; 		}
; }
; 
; void data_send()
; {
	.dbline 99
; 	unsigned char *send;	//发送数据用指针
; 	unsigned char l;			//发送12字节循环
; 	unsigned char sum_temp=0;//和效验
	clr R20
	.dbline 100
; 	send=&send_data.exterior_switch;
	ldi R24,<_send_data
	ldi R25,>_send_data
	movw R10,R24
	.dbline 101
; 	for (l=0; l<17; l++)
	clr R22
	xjmp L35
L32:
	.dbline 102
	.dbline 103
	movw R30,R10
	ldd R2,z+0
	add R20,R2
	.dbline 104
	ldd R16,z+0
	xcall _put_c
	.dbline 105
	movw R24,R10
	adiw R24,1
	movw R10,R24
	.dbline 106
L33:
	.dbline 101
	inc R22
L35:
	.dbline 101
	cpi R22,17
	brlo L32
	.dbline 107
; 		{
; 			sum_temp+=*send;
; 			put_c(*send);
; 			send++;
; 		}	
; 	put_c(sum_temp);
	mov R16,R20
	xcall _put_c
	.dbline -2
L31:
	xcall pop_gset3
	.dbline 0 ; func end
	ret
	.dbsym r sum_temp 20 c
	.dbsym r l 22 c
	.dbsym r send 10 pc
	.dbend
	.area bss(ram, con, rel)
	.dbfile E:\mysoft\DH980\uart.c
_load::
	.blkb 2
	.dbsym e load _load pc
_relay_temp::
	.blkb 7
	.dbsym e relay_temp _relay_temp A[7:7]c

⌨️ 快捷键说明

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