📄 main.s
字号:
.module main.c
.area text(rom, con, rel)
.dbfile E:\新建文件夹\ADDA_ICC\cfile\main.c
.dbfunc e main _main fV
; test -> R10,R11
; RS -> R22,R23
; j -> y+2
; value -> R20,R21
; count -> R10,R11
.even
_main::
sbiw R28,6
.dbline -1
.dbline 18
; #define ENABLE_BIT_DEFINITIONS
;
; #include "includes.h"
;
;
;
; //#define Vref 50000
; void init_adc(void);
; void WDR(void);
; void WDT_init(void);
;
; //unsigned char adc_mux = 0x01; //通道选择
;
; unsigned char RSend;
; unsigned char RS_buf[10];
; unsigned char RS_flag;
; void main(void)
; {
.dbline 21
; float j;
; int count;
; unsigned char *test = "The Voltage is: ";
ldi R24,<L2
ldi R25,>L2
movw R10,R24
.dbline 22
; unsigned char *value = "0.000 V";
ldi R20,<L3
ldi R21,>L3
.dbline 24
; unsigned char *RS;
; RS = RS_buf;
ldi R22,<_RS_buf
ldi R23,>_RS_buf
.dbline 25
; RS_flag = 0;
clr R2
sts _RS_flag,R2
.dbline 26
; delay_nms(1);
ldi R16,1
ldi R17,0
xcall _delay_nms
.dbline 28
; //dataport=0xff;
; OSCCAL=0Xab;//系统时钟校准,不同的芯片和不的频率,
ldi R24,171
out 0x31,R24
.dbline 29
; init_adc();
xcall _init_adc
.dbline 30
; InitSerial();
xcall _InitSerial
.dbline 32
; //init_time1();
; Init_LCD();
xcall _Init_LCD
.dbline 35
; // WDT_init();
;
; LCD_DisplayString(1,1,test);
std y+1,R11
std y+0,R10
ldi R18,1
ldi R16,1
xcall _LCD_DisplayString
.dbline 36
; LCD_DisplayString(2,1,value);
std y+1,R21
std y+0,R20
ldi R18,1
ldi R16,2
xcall _LCD_DisplayString
.dbline 37
; put_string(value);
movw R16,R20
xcall _put_string
.dbline 38
; put_char(0x0d);
ldi R16,13
ldi R17,0
xcall _put_char
.dbline 39
; put_char(0x0a);
ldi R16,10
ldi R17,0
xcall _put_char
xjmp L5
L4:
.dbline 41
; while(1)
; {
.dbline 43
; //j = (float)(((float)((Vref/1023)))*(ADCH*256+ADCL))/1000.00;
; j = (float)(((float)((Vref/1023)))*( ADC&0X3FF))/1000.00;
ldi R16,<L7
ldi R17,>L7
xcall lpm32
movw R2,R16
movw R4,R18
in R16,0x4
in R17,0x5
andi R17,3
xcall uint2fp
st -y,R19
st -y,R18
st -y,R17
st -y,R16
movw R16,R2
movw R18,R4
xcall fpmule2
movw R2,R16
movw R4,R18
ldi R16,<L8
ldi R17,>L8
xcall lpm32
st -y,R19
st -y,R18
st -y,R17
st -y,R16
movw R16,R2
movw R18,R4
xcall fpdiv2
std y+2,R16
std y+3,R17
std y+4,R18
std y+5,R19
.dbline 44
; count = j*100;
ldi R16,<L9
ldi R17,>L9
xcall lpm32
movw R24,R28
adiw R24,2
st -y,R25
st -y,R24
xcall fpmule1
xcall fpint
movw R10,R16
.dbline 45
; value[0] = count /1000+0x30;
ldi R18,1000
ldi R19,3
xcall div16s
movw R24,R16
adiw R24,48
movw R30,R20
std z+0,R24
.dbline 46
; count = count %1000;
ldi R18,1000
ldi R19,3
movw R16,R10
xcall mod16s
movw R10,R16
.dbline 47
; value[2] = count /100+0x30;
ldi R18,100
ldi R19,0
xcall div16s
movw R24,R16
adiw R24,48
movw R30,R20
std z+2,R24
.dbline 48
; count = count %100;
ldi R18,100
ldi R19,0
movw R16,R10
xcall mod16s
movw R10,R16
.dbline 49
; value[3] = count /10 + 0x30;
ldi R18,10
ldi R19,0
xcall div16s
movw R24,R16
adiw R24,48
movw R30,R20
std z+3,R24
.dbline 50
; value[4] = count %10 + 0x30;
ldi R18,10
ldi R19,0
movw R16,R10
xcall mod16s
movw R24,R16
adiw R24,48
movw R30,R20
std z+4,R24
.dbline 52
;
; LCD_Cursor(0,1);
ldi R18,1
clr R16
xcall _LCD_Cursor
.dbline 53
; LCD_DisplayString(2,1,value);
std y+1,R21
std y+0,R20
ldi R18,1
ldi R16,2
xcall _LCD_DisplayString
.dbline 54
; put_string(value);
movw R16,R20
xcall _put_string
.dbline 55
; put_char(0x0d);
ldi R16,13
ldi R17,0
xcall _put_char
.dbline 56
; put_char(0x0a);
ldi R16,10
ldi R17,0
xcall _put_char
.dbline 57
; delay_nms(1000);
ldi R16,1000
ldi R17,3
xcall _delay_nms
.dbline 58
; if(RS_flag)
lds R2,_RS_flag
tst R2
breq L10
X0:
.dbline 59
; {
.dbline 60
; LCD_DisplayString(2,10,RS);
std y+1,R23
std y+0,R22
ldi R18,10
ldi R16,2
xcall _LCD_DisplayString
.dbline 61
; RS_flag = 0;
clr R2
sts _RS_flag,R2
.dbline 62
; }
L10:
.dbline 63
; }
L5:
.dbline 40
xjmp L4
X1:
.dbline -2
L1:
.dbline 0 ; func end
adiw R28,6
ret
.dbsym r test 10 pc
.dbsym r RS 22 pc
.dbsym l j 2 D
.dbsym r value 20 pc
.dbsym r count 10 I
.dbend
.area vector(rom, abs)
.org 44
jmp _uart_rx_isr
.area text(rom, con, rel)
.dbfile E:\新建文件夹\ADDA_ICC\cfile\main.c
.dbfunc e uart_rx_isr _uart_rx_isr fV
.even
_uart_rx_isr::
st -y,R0
st -y,R1
st -y,R2
st -y,R3
st -y,R4
st -y,R5
st -y,R6
st -y,R7
st -y,R8
st -y,R9
st -y,R16
st -y,R17
st -y,R18
st -y,R19
st -y,R24
st -y,R25
st -y,R26
st -y,R27
st -y,R30
st -y,R31
in R0,0x3f
st -y,R0
.dbline -1
.dbline 70
;
; }
; #pragma interrupt_handler uart_rx_isr:iv_USART_RXC
; void uart_rx_isr(void)
; /*#pragma vector = USART_RXC_vect
; __interrupt void usart_isr( void )*/
; {
.dbline 71
; SREG &= !(1<<7);
clr R2
out 0x3f,R2
.dbline 72
; RS_flag = 1;
ldi R24,1
sts _RS_flag,R24
.dbline 73
; RSend++;
lds R24,_RSend
subi R24,255 ; addi 1
sts _RSend,R24
.dbline 74
; RS_buf[RSend] = UDR;
ldi R24,<_RS_buf
ldi R25,>_RS_buf
lds R30,_RSend
clr R31
add R30,R24
adc R31,R25
in R2,0xc
std z+0,R2
.dbline 75
; put_char(RS_buf[RSend]);
lds R30,_RSend
clr R31
add R30,R24
adc R31,R25
ldd R16,z+0
clr R17
xcall _put_char
.dbline 76
; if(RSend>=10)
lds R24,_RSend
cpi R24,10
brlo L13
X2:
.dbline 77
; {
.dbline 78
; RSend = 0;
clr R2
sts _RSend,R2
.dbline 79
; }
L13:
.dbline 80
; SREG |= (1<<7);
bset 7
.dbline -2
L12:
.dbline 0 ; func end
ld R0,y+
out 0x3f,R0
ld R31,y+
ld R30,y+
ld R27,y+
ld R26,y+
ld R25,y+
ld R24,y+
ld R19,y+
ld R18,y+
ld R17,y+
ld R16,y+
ld R9,y+
ld R8,y+
ld R7,y+
ld R6,y+
ld R5,y+
ld R4,y+
ld R3,y+
ld R2,y+
ld R1,y+
ld R0,y+
reti
.dbend
.area bss(ram, con, rel)
.dbfile E:\新建文件夹\ADDA_ICC\cfile\main.c
_RS_flag::
.blkb 1
.dbsym e RS_flag _RS_flag c
_RS_buf::
.blkb 10
.dbsym e RS_buf _RS_buf A[10:10]c
_RSend::
.blkb 1
.dbsym e RSend _RSend c
.area lit(rom, con, rel)
L9:
.word 0x0,0x42c8
L8:
.word 0x0,0x447a
L7:
.word 0x0,0x41c8
.area data(ram, con, rel)
.dbfile E:\新建文件夹\ADDA_ICC\cfile\main.c
L3:
.blkb 8
.area idata
.byte 48,46,48,48,48,32,'V,0
.area data(ram, con, rel)
.dbfile E:\新建文件夹\ADDA_ICC\cfile\main.c
L2:
.blkb 17
.area idata
.byte 'T,'h,'e,32,'V,'o,'l,'t,'a,'g,'e,32,'i,'s,58,32
.byte 0
.area data(ram, con, rel)
.dbfile E:\新建文件夹\ADDA_ICC\cfile\main.c
; }
;
;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -