📄 uart.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 + -