📄 main.s
字号:
.module main.c
.area text(rom, con, rel)
.dbfile D:\liliang\can-232\CAN-232/delay.c
.dbfunc e shortdelay _shortdelay fV
; tt -> R16
.even
_shortdelay::
.dbline -1
.dbline 15
; /********************************************************************
; * 函数库说明:主函数 *
; * 版本说明: 1.0 Bate *
; * 作者: andylee *
; * 日期: 2006年10月 *
; * 平台: mega16 16M *
; * 说明: CAN数据采集卡的系统监控函数 *
; ********************************************************************/
;
; #include <iom16v.h>
; #include <macros.h>
; #include "libdef.h"
; #include "delay.c"
; #include "rprint.c"
; #include "can.c"
.dbline 16
; #include "uart.c"
_L2: subi R16,1
.dbline 17
; #include "isr.c"
nop
.dbline 18
;
brne _L2
.dbline 19
; //#define DEBUG_MAIN
nop
.dbline 20
;
ret
.dbline -2
L1:
.dbline 0 ; func end
ret
.dbsym r tt 16 c
.dbend
.dbfunc e delay_us _delay_us fV
.even
_delay_us::
.dbline -1
.dbline 25
; /**********
; * 常量定义*
; **********/
; unsigned int temp=0;
; unsigned int value;
.dbline 26
;
ldi R16,2
xcall _shortdelay
.dbline -2
L2:
.dbline 0 ; func end
ret
.dbend
.dbfunc e delay_nus _delay_nus fV
; i -> R10,R11
; n -> R12,R13
.even
_delay_nus::
xcall push_gset4x
movw R12,R16
.dbline -1
.dbline 30
; void main (void)
; {
; unsigned char main_temp_all; //数据暂变量
; unsigned char main_temp_uart;
.dbline 31
; CLI();
clr R10
clr R11
.dbline 32
;
xjmp L7
L4:
.dbline 33
xcall _delay_us
L5:
.dbline 32
movw R24,R10
adiw R24,1
movw R10,R24
L7:
.dbline 32
cp R10,R12
cpc R11,R13
brlo L4
.dbline -2
L3:
xcall pop_gset4x
.dbline 0 ; func end
ret
.dbsym r i 10 i
.dbsym r n 12 i
.dbend
.dbfunc e delay_ms _delay_ms fV
; i -> R16,R17
.even
_delay_ms::
.dbline -1
.dbline 37
; //CAN相关初始化
; sja_port_init();
; sja_init();
;
; //can_cmd_init();
.dbline 39
clr R16
clr R17
xjmp L12
L9:
.dbline 39
L10:
.dbline 39
subi R16,255 ; offset = 1
sbci R17,255
L12:
.dbline 39
;
; isr_init(); //外部中断0初始化
cpi R16,116
ldi R30,4
cpc R17,R30
brlo L9
.dbline -2
L8:
.dbline 0 ; func end
ret
.dbsym r i 16 i
.dbend
.dbfunc e delay_nms _delay_nms fV
; i -> R10,R11
; n -> R12,R13
.even
_delay_nms::
xcall push_gset4x
movw R12,R16
.dbline -1
.dbline 43
; uartInit(); //串口初始化
; rprintfInit(uartSendByte); //发送函数初始化
;
; watchdog_init();
.dbline 44
;
clr R10
clr R11
.dbline 45
; SEI();
xjmp L17
L14:
.dbline 46
xcall _delay_ms
L15:
.dbline 45
movw R24,R10
adiw R24,1
movw R10,R24
L17:
.dbline 45
cp R10,R12
cpc R11,R13
brlo L14
.dbline -2
L13:
xcall pop_gset4x
.dbline 0 ; func end
ret
.dbsym r i 10 i
.dbsym r n 12 i
.dbend
.area data(ram, con, rel)
.dbfile D:\liliang\can-232\CAN-232/delay.c
_HexChars:
.blkb 17
.area idata
.byte 48,49,50,51,52,53,54,55,56,57,'A,'B,'C,'D,'E,'F
.byte 0
.area data(ram, con, rel)
.dbfile D:\liliang\can-232\CAN-232/delay.c
.dbfile D:\liliang\can-232\CAN-232/rprint.c
.dbsym s HexChars _HexChars A[17:17]c
.area text(rom, con, rel)
.dbfile D:\liliang\can-232\CAN-232/rprint.c
.dbfunc e rprintfInit _rprintfInit fV
; putchar_func -> R16,R17
.even
_rprintfInit::
.dbline -1
.dbline 31
.dbline 32
sts _rputchar+1,R17
sts _rputchar,R16
.dbline -2
L18:
.dbline 0 ; func end
ret
.dbsym r putchar_func 16 pfV
.dbend
.dbfunc e rprintfChar _rprintfChar fV
; c -> R10
.even
_rprintfChar::
xcall push_gset3x
mov R10,R16
.dbline -1
.dbline 38
.dbline 40
mov R16,R10
lds R30,_rputchar
lds R31,_rputchar+1
xcall xicall
.dbline -2
L19:
xcall pop_gset3x
.dbline 0 ; func end
ret
.dbsym r c 10 c
.dbend
.dbfunc e rprintfStr _rprintfStr fV
; str -> R10,R11
.even
_rprintfStr::
xcall push_gset3x
movw R10,R16
.dbline -1
.dbline 46
; buffer_init(); //can发送的缓冲区初始化
.dbline 49
; #ifdef DEBUG_MAIN
; uartSendByte(0xaa);
; uartSendByte(0xaa);
tst R10
brne L24
tst R11
brne L24
X0:
.dbline 49
xjmp L20
L23:
.dbline 53
movw R30,R10
ld R16,Z+
movw R10,R30
xcall _rprintfChar
L24:
.dbline 52
; #endif
; DDRA|=(1<<DDA0)|(1<<DDA1);
;
movw R30,R10
ldd R2,z+0
tst R2
brne L23
.dbline -2
L20:
xcall pop_gset3x
.dbline 0 ; func end
ret
.dbsym r str 10 pc
.dbend
.dbfunc e rprintfStrLen _rprintfStrLen fV
; i -> R10,R11
; len -> R12,R13
; start -> y+6
; str -> R14,R15
.even
_rprintfStrLen::
st -y,r19
st -y,r18
xcall push_gset5x
movw R14,R16
ldd R12,y+8
ldd R13,y+9
.dbline -1
.dbline 59
; PORTA&=~(1<<PA0);
; PORTA&=~(1<<PA1);
; WDR();
; delay_nms(1000);
; WDR();
; PORTA|=(1<<PA0);
; PORTA|=(1<<PA1);
.dbline 60
; while(1)
clr R10
clr R11
.dbline 63
; {
; #ifdef DEBUG_MAIN
; uartSendByte(0XAA);
tst R14
brne L30
tst R15
brne L30
X1:
.dbline 63
xjmp L26
L29:
.dbline 66
L30:
.dbline 66
; uartSendByte(0XBB);
; #endif
; /*
movw R2,R10
movw R24,R2
adiw R24,1
movw R10,R24
ldd R0,y+6
ldd R1,y+7
cp R2,R0
cpc R3,R1
brsh L32
movw R30,R14
ld R2,Z+
movw R14,R30
tst R2
brne L29
L32:
.dbline 69
; delay_nms(500); //为什么加个延时在这才正常运行?
; TransmitMessage[6]=0xb0;
; uart_b0_flag=0;
clr R10
clr R11
xjmp L36
L33:
.dbline 70
; sja_tx(TransmitMessage); //CAN节点数据发送
.dbline 73
; PORTA&=~(1<<PA0);
; */
; WDR();
movw R30,R14
ldd R2,z+0
tst R2
breq L37
.dbline 74
; delay_nms(1000);
ld R16,Z+
movw R14,R30
xcall _rprintfChar
xjmp L38
L37:
.dbline 76
; WDR();
; delay_nms(1000);
ldi R16,32
xcall _rprintfChar
L38:
.dbline 77
L34:
.dbline 69
movw R24,R10
adiw R24,1
movw R10,R24
L36:
.dbline 69
cp R10,R12
cpc R11,R13
brlo L33
.dbline -2
L26:
xcall pop_gset5x
adiw R28,2
.dbline 0 ; func end
ret
.dbsym r i 10 I
.dbsym r len 12 i
.dbsym l start 6 i
.dbsym r str 14 pc
.dbend
.dbfunc e rprintfProgStr _rprintfProgStr fV
; c -> R10
; str -> R12,R13
.even
_rprintfProgStr::
xcall push_gset4x
movw R12,R16
.dbline -1
.dbline 88
; WDR();
; if(uart_b0_flag==1) //降压模拟
; {
; TransmitMessage[6]=0xb0;
; uart_b0_flag=0;
; sja_tx(TransmitMessage); //CAN节点数据发送
; PORTA&=~(1<<PA0);
; }
;
; if(uart_b8_flag==1) //停止充电模拟
; {
; TransmitMessage[6]=0xb8;
.dbline 93
; uart_b8_flag=0;
; sja_tx(TransmitMessage); //CAN节点数据发送
; PORTA&=~(1<<PA1);
; }
;
tst R12
brne L43
tst R13
brne L43
X2:
.dbline 93
xjmp L39
L42:
.dbline 97
mov R16,R10
xcall _rprintfChar
L43:
.dbline 96
; if(uart_normal_flag==1) //正常工作状态
; {
; TransmitMessage[6]=0x00;
movw R2,R12
movw R24,R2
adiw R24,1
movw R12,R24
movw R30,R2
lpm R2,Z
mov R10,R2
tst R10
brne L42
.dbline -2
L39:
xcall pop_gset4x
.dbline 0 ; func end
ret
.dbsym r c 10 c
.dbsym r str 12 pkc
.dbend
.dbfunc e rprintfCRLF _rprintfCRLF fV
.even
_rprintfCRLF::
.dbline -1
.dbline 107
; uart_normal_flag=0;
; sja_tx(TransmitMessage); //CAN节点数据发送
; }
;
; if(uart_alarm_flag==1) //报警状态
; {
; TransmitMessage[6]=0xa0;
; uart_alarm_flag=0;
; sja_tx(TransmitMessage); //CAN节点数据发送
; }
;
.dbline 109
; WDR();
; delay_nms(100);
ldi R16,13
xcall _rprintfChar
.dbline 110
; WDR();
ldi R16,10
xcall _rprintfChar
.dbline -2
L45:
.dbline 0 ; func end
ret
.dbend
.dbfunc e rprintfu04 _rprintfu04 fV
; data -> R10
.even
_rprintfu04::
xcall push_gset3x
mov R10,R16
.dbline -1
.dbline 120
; if(can_receive_flag==1) //有一次有效中断
; {
; can_receive_flag=0; //清标志
;
; //给串口发数据,把收到的数据送向计算机,计算机去处理
; for(main_temp_all=0;main_temp_all<=12;main_temp_all++)
; {
; main_temp_uart=RxBuffer[main_temp_all];
; uartSendByte(main_temp_uart);
; }
.dbline 121
; delay_nms(1000);
ldi R24,<_HexChars
ldi R25,>_HexChars
mov R30,R10
clr R31
andi R30,15
andi R31,0
add R30,R24
adc R31,R25
ldd R16,z+0
xcall _rprintfChar
.dbline -2
L46:
xcall pop_gset3x
.dbline 0 ; func end
ret
.dbsym r data 10 c
.dbend
.dbfunc e rprintfu08 _rprintfu08 fV
; data -> R10
.even
_rprintfu08::
xcall push_gset3x
mov R10,R16
.dbline -1
.dbline 127
; }
;
; WDR();
; delay_nms(1000); //方便看数据
; WDR();
; PORTA|=(1<<PA0);
.dbline 129
; PORTA|=(1<<PA1);
; }
mov R16,R10
swap R16
andi R16,#0x0F
xcall _rprintfu04
.dbline 130
; }
mov R16,R10
xcall _rprintfu04
.dbline -2
L47:
xcall pop_gset3x
.dbline 0 ; func end
ret
.dbsym r data 10 c
.dbend
.dbfunc e rprintfu16 _rprintfu16 fV
; data -> R10,R11
.even
_rprintfu16::
xcall push_gset3x
movw R10,R16
.dbline -1
.dbline 136
;
;
;
;
;
;
.dbline 138
;
;
movw R16,R10
mov R16,R17
clr R17
xcall _rprintfu08
.dbline 139
;
mov R16,R10
xcall _rprintfu08
.dbline -2
L48:
xcall pop_gset3x
.dbline 0 ; func end
ret
.dbsym r data 10 s
.dbend
.dbfunc e rprintfu32 _rprintfu32 fV
; data -> y+0
.even
_rprintfu32::
xcall push_arg4
.dbline -1
.dbline 145
;
;
;
;
;
;
.dbline 147
;
;
movw R30,R28
ldd R2,z+0
ldd R3,z+1
ldd R4,z+2
ldd R5,z+3
movw R16,R4
xcall _rprintfu16
.dbline 148
;
movw R30,R28
ldd R16,z+0
ldd R17,z+1
xcall _rprintfu16
.dbline -2
L49:
adiw R28,4
.dbline 0 ; func end
ret
.dbsym l data 0 l
.dbend
.dbfunc e rprintfFloat _rprintfFloat fV
; negative -> R10
; firstplace -> y+12
; digit -> R14
; i -> R12
; place -> y+0
; x -> y+21
; numDigits -> y+19
.even
_rprintfFloat::
xcall push_arg4
xcall push_gset5x
sbiw R28,13
.dbline -1
.dbline 159
;
;
;
;
;
;
;
;
;
;
;
.dbline 160
;
clr R0
std y+12,R0
.dbline 163
;
;
;
ldi R16,<L51
ldi R17,>L51
xcall lpm32
movw R30,R28
std z+0,R16
std z+1,R17
std z+2,R18
std z+3,R19
.dbline 166
;
;
;
movw R30,R28
ldd R2,z+21
ldd R3,z+22
ldd R4,z+23
ldd R5,z+24
st -y,R5
st -y,R4
st -y,R3
st -y,R2
ldi R16,<L54
ldi R17,>L54
xcall lpm32
st -y,R19
st -y,R18
st -y,R17
st -y,R16
xcall cmp32f
brge L52
ldi R24,1
ldi R25,0
movw R10,R24
xjmp L53
L52:
clr R10
clr R11
L53:
.dbline 168
;
;
ldi R16,<L54
ldi R17,>L54
xcall lpm32
st -y,R19
st -y,R18
st -y,R17
st -y,R16
movw R30,R28
; stack offset 4
ldd R2,z+25
ldd R3,z+26
ldd R4,z+27
ldd R5,z+28
st -y,R5
st -y,R4
st -y,R3
st -y,R2
xcall cmp32f
brge L55
movw R30,R28
ldd R2,z+21
ldd R3,z+22
ldd R4,z+23
ldd R5,z+24
movw R30,R28
std z+4,R2
std z+5,R3
std z+6,R4
std z+7,R5
xjmp L56
L55:
movw R30,R28
ldd R2,z+21
ldd R3,z+22
ldd R4,z+23
ldd R5,z+24
st -y,R5
st -y,R4
st -y,R3
st -y,R2
xcall neg32f
movw R30,R28
std z+4,R16
std z+5,R17
std z+6,R18
std z+7,R19
L56:
movw R30,R28
ldd R2,z+4
ldd R3,z+5
ldd R4,z+6
ldd R5,z+7
movw R30,R28
std z+21,R2
std z+22,R3
std z+23,R4
std z+24,R5
.dbline 171
;
;
;
clr R12
xjmp L60
L57:
.dbline 172
;
.dbline 173
;
movw R30,R28
ldd R2,z+21
ldd R3,z+22
ldd R4,z+23
ldd R5,z+24
st -y,R5
st -y,R4
st -y,R3
st -y,R2
movw R30,R28
; stack offset 4
ldd R2,z+4
ldd R3,z+5
ldd R4,z+6
ldd R5,z+7
st -y,R5
st -y,R4
st -y,R3
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -