📄 main.s
字号:
.module main.c
.area text(rom, con, rel)
.dbfile E:\mysoft\DH980\main.c
.dbfunc e delay_loop _delay_loop fV
; i -> R16,R17
.even
_delay_loop::
.dbline -1
.dbline 15
; //ICC-AVR application builder : 2007-5-17 下午 09:24:21
; // Target : M169
; // Crystal: 4.0000Mhz
; #define _MAIN_C
; #include <iom169v.h>
; #include <macros.h>
; #include <stdio.h>
; //#include "LTC2449.h"
; #include "main.h"
; #include "uart.h"
; #include "cs5532.h"
; #define average_quantity 15 //平均个数
;
; void delay_loop(unsigned int i)
; {
xjmp L3
L2:
.dbline 16
.dbline 16
subi R16,1
sbci R17,0
.dbline 16
L3:
.dbline 16
; while(i){i--;}
cpi R16,0
cpc R16,R17
brne L2
X0:
.dbline -2
L1:
.dbline 0 ; func end
ret
.dbsym r i 16 i
.dbend
.dbfunc e port_init _port_init fV
.even
_port_init::
.dbline -1
.dbline 19
; }
; void port_init(void)
; {
.dbline 20
; PORTA = 0xFF;
ldi R24,255
out 0x2,R24
.dbline 21
; DDRA = 0xFF;
out 0x1,R24
.dbline 22
; PORTB = 0x7F;
ldi R24,127
out 0x5,R24
.dbline 23
; DDRB = 0x80;
ldi R24,128
out 0x4,R24
.dbline 24
; PORTC = 0xFF;
ldi R24,255
out 0x8,R24
.dbline 25
; DDRC = 0xFF;
out 0x7,R24
.dbline 26
; PORTD = 0xFF;
out 0xb,R24
.dbline 27
; DDRD = 0xFF;
out 0xa,R24
.dbline 28
; PORTE = 0xA7;
ldi R24,167
out 0xe,R24
.dbline 29
; DDRE = 0x58;
ldi R24,88
out 0xd,R24
.dbline 30
; PORTF = 0x0F;
ldi R24,15
out 0x11,R24
.dbline 31
; DDRF = 0x0F;
out 0x10,R24
.dbline 32
; PORTG = 0x17;
ldi R24,23
out 0x14,R24
.dbline 33
; DDRG = 0x1F;
ldi R24,31
out 0x13,R24
.dbline -2
L5:
.dbline 0 ; func end
ret
.dbend
.dbfunc e timer1_init _timer1_init fV
.even
_timer1_init::
.dbline -1
.dbline 41
; }
;
; //TIMER1 initialize - prescale:1
; // WGM: 0) Normal, TOP=0xFFFF
; // desired value: 1mSec
; // actual value: 1.000mSec (0.0%)
; void timer1_init(void)
; {
.dbline 42
; TCCR1B = 0x00; //stop
clr R2
sts 129,R2
.dbline 43
; TCNT1H = 0xD4; //setup
ldi R24,212
sts 133,R24
.dbline 44
; TCNT1L = 0xCE;
ldi R24,206
sts 132,R24
.dbline 45
; OCR1AH = 0x2B;
ldi R24,43
sts 137,R24
.dbline 46
; OCR1AL = 0x32;
ldi R24,50
sts 136,R24
.dbline 47
; OCR1BH = 0x2B;
ldi R24,43
sts 139,R24
.dbline 48
; OCR1BL = 0x32;
ldi R24,50
sts 138,R24
.dbline 49
; ICR1H = 0x2B;
ldi R24,43
sts 135,R24
.dbline 50
; ICR1L = 0x32;
ldi R24,50
sts 134,R24
.dbline 51
; TCCR1A = 0x00;
sts 128,R2
.dbline 52
; TCCR1C = 0x00;
sts 130,R2
.dbline 53
; TCCR1B = 0x01; //start Timer
ldi R24,1
sts 129,R24
.dbline -2
L6:
.dbline 0 ; func end
ret
.dbend
.area vector(rom, abs)
.org 36
jmp _timer1_ovf_isr
.area text(rom, con, rel)
.dbfile E:\mysoft\DH980\main.c
.dbfunc e timer1_ovf_isr _timer1_ovf_isr fV
.even
_timer1_ovf_isr::
st -y,R24
st -y,R25
st -y,R30
in R24,0x3f
st -y,R24
.dbline -1
.dbline 58
.dbline 59
ldi R24,212
sts 133,R24
.dbline 60
ldi R24,206
sts 132,R24
.dbline 61
lds R24,_mcu_loop_time
subi R24,255 ; addi 1
sts _mcu_loop_time,R24
.dbline 62
lds R24,_load_time
lds R25,_load_time+1
cpi R24,16
ldi R30,39
cpc R25,R30
brsh L8
.dbline 63
.dbline 64
adiw R24,1
sts _load_time+1,R25
sts _load_time,R24
.dbline 65
L8:
.dbline -2
L7:
ld R24,y+
out 0x3f,R24
ld R30,y+
ld R25,y+
ld R24,y+
.dbline 0 ; func end
reti
.dbend
.dbfunc e init_devices _init_devices fV
.even
_init_devices::
.dbline -1
.dbline 70
; }
;
; #pragma interrupt_handler timer1_ovf_isr:10
; void timer1_ovf_isr(void)
; {
; TCNT1H = 0xD4; //setup
; TCNT1L = 0xCE;
; mcu_loop_time++; //主程序20mS循环用
; if (load_time <10000)
; {
; load_time++; //下载数据定时用
; }
; }
;
; //call this routine to initialize all peripherals
; void init_devices(void)
; {
.dbline 72
; //stop errant interrupts until set up
; CLI(); //disable all interrupts
cli
.dbline 73
; port_init();
xcall _port_init
.dbline 74
; timer1_init();
xcall _timer1_init
.dbline 75
; uart0_init();
xcall _uart0_init
.dbline 77
;
; TIMSK0 = 0x00; //timer interrupt sources
clr R2
sts 110,R2
.dbline 78
; TIMSK1 = 0x01; //timer interrupt sources
ldi R24,1
sts 111,R24
.dbline 79
; TIMSK2 = 0x00; //timer interrupt sources
sts 112,R2
.dbline 80
; PCMSK0 = 0x00; //pin change mask
sts 107,R2
.dbline 81
; PCMSK1 = 0x00; //pin change mask
sts 108,R2
.dbline 82
; EICRA = 0x00; //int0 setup
sts 105,R2
.dbline 83
; SEI(); //re-enable interrupts
sei
.dbline -2
L10:
.dbline 0 ; func end
ret
.dbend
.area data(ram, con, rel)
.dbfile E:\mysoft\DH980\main.c
L12:
.blkb 1
.area idata
.byte 0
.area data(ram, con, rel)
.dbfile E:\mysoft\DH980\main.c
.area bss(ram, con, rel)
.dbfile E:\mysoft\DH980\main.c
L13:
.blkb 240
.area text(rom, con, rel)
.dbfile E:\mysoft\DH980\main.c
.dbfunc e AD_conversion _AD_conversion fV
.dbsym s average L13 A[240:8:15]i
.dbsym s average_l L12 c
; c -> R12
; unlikeliness -> R14
; sum -> y+0
; j -> y+4
; jj -> R10
.even
_AD_conversion::
xcall push_gset5
sbiw R28,5
.dbline -1
.dbline 88
; //all peripherals are now initialized
; }
; //************读出8通道AD值*********************
; void AD_conversion()
; {
.dbline 94
; unsigned char j, jj, c;//通道号,平均值序号,通道号
; unsigned long sum;
; static unsigned char average_l=0;//平均值个数
; static unsigned int average[8][average_quantity]; //求平均数
; unsigned char unlikeliness; //内部循环,1mS检测
; for (j=0; j<5; j++)
clr R0
std y+4,R0
xjmp L17
L14:
.dbline 95
; {
.dbline 96
; unlikeliness = mcu_loop_time;
lds R14,_mcu_loop_time
.dbline 97
; c=j;
ldd R12,y+4
.dbline 99
; //average[j][average_l] = LTC2449_RW(c); //读取AD值
; average[j][average_l] = CS5532_RW(c);
mov R16,R12
clr R17
xcall _CS5532_RW
movw R2,R16
movw R4,R18
ldi R24,30
ldd R0,y+4
mul R24,R0
movw R6,R0
ldi R24,<L13
ldi R25,>L13
add R6,R24
adc R7,R25
lds R8,L12
ldi R24,2
mul R24,R8
movw R30,R0
add R30,R6
adc R31,R7
std z+1,R3
std z+0,R2
.dbline 100
; sum = 0;
ldi R20,0
ldi R21,0
ldi R22,0
ldi R23,0
movw R30,R28
std z+0,R20
std z+1,R21
std z+2,R22
std z+3,R23
.dbline 101
; for (jj=0; jj<average_quantity; jj++) //求平均值
clr R10
xjmp L21
L18:
.dbline 102
.dbline 103
ldi R24,30
ldd R0,y+4
mul R24,R0
movw R2,R0
ldi R24,<L13
ldi R25,>L13
add R2,R24
adc R3,R25
ldi R24,2
mul R24,R10
movw R30,R0
add R30,R2
adc R31,R3
ldd R2,z+0
ldd R3,z+1
clr R4
clr R5
movw R30,R28
ldd R6,z+0
ldd R7,z+1
ldd R8,z+2
ldd R9,z+3
add R6,R2
adc R7,R3
adc R8,R4
adc R9,R5
movw R30,R28
std z+0,R6
std z+1,R7
std z+2,R8
std z+3,R9
.dbline 104
L19:
.dbline 101
inc R10
L21:
.dbline 101
mov R24,R10
cpi R24,15
brlo L18
.dbline 105
; {
; sum += average[j][jj];
; }
; send_data.AD_data[j] = sum/average_quantity;
ldi R24,2
ldd R0,y+4
mul R24,R0
movw R30,R0
ldi R24,<_send_data+1
ldi R25,>_send_data+1
add R30,R24
adc R31,R25
ldi R20,15
ldi R21,0
ldi R22,0
ldi R23,0
movw R26,R28
ld R2,x+
ld R3,x+
ld R4,x+
ld R5,x
st -y,R23
st -y,R22
st -y,R21
st -y,R20
movw R16,R2
movw R18,R4
xcall div32u
std z+1,R17
std z+0,R16
L23:
.dbline 107
.dbline 107
.dbline 107
L24:
.dbline 107
lds R2,_mcu_loop_time
cp R14,R2
breq L23
.dbline 108
L15:
.dbline 94
ldd R0,y+4
inc R0
std y+4,R0
L17:
.dbline 94
ldd R24,y+4
cpi R24,5
brsh X1
xjmp L14
X1:
.dbline 109
lds R24,L12
subi R24,255 ; addi 1
sts L12,R24
.dbline 110
ldi R24,14
lds R2,L12
cp R24,R2
brsh L26
.dbline 110
clr R2
sts L12,R2
L26:
.dbline -2
L11:
adiw R28,5
xcall pop_gset5
.dbline 0 ; func end
ret
.dbsym r c 12 c
.dbsym r unlikeliness 14 c
.dbsym l sum 0 l
.dbsym l j 4 c
.dbsym r jj 10 c
.dbend
.dbfunc e pb_check _pb_check fV
; k -> R16
.even
_pb_check::
.dbline -1
.dbline 114
; //send_data.AD_data[j] = average[j][average_l];
; while (unlikeliness == mcu_loop_time){;}//等待1ms
; }
; average_l++;
; if (average_l > (average_quantity-1)) average_l = 0;
; }
; //************取8个按键值************************
; void pb_check()
; {
.dbline 116
; unsigned char k;
; k=PINB;
in R16,0x3
.dbline 117
; k=k<<1;
lsl R16
.dbline 118
; if((PINE&0B01111111)!=0)
in R24,0xc
andi R24,127
breq L29
.dbline 119
; k|=1;
ori R16,1
xjmp L30
L29:
.dbline 121
; else
; k&=254;
andi R16,254
L30:
.dbline 122
; k ^= 0xff;
ldi R24,255
ldi R25,0
mov R2,R16
clr R3
eor R2,R24
eor R3,R25
mov R16,R2
.dbline 123
; send_data.exterior_switch=k;
sts _send_data,R16
.dbline -2
L28:
.dbline 0 ; func end
ret
.dbsym r k 16 c
.dbend
.dbfunc e main _main fV
.even
_main::
.dbline -1
.dbline 126
; }
; void main(void)
; {
.dbline 127
; init_devices();
xcall _init_devices
.dbline 138
; /*SET_CS; //PE3
; CLR_CS ; //PE3
; SET_SCK; //PE6
; CLR_SCK ; //PE6
; SET_SDI; //PE4
; CLR_SDI; //PE4
; SET_SDO; //PE5
; CLR_SDO ; //PE5
; SDO ; //PE5 */
; //LTC2449_init();
; Init5532();
xcall _Init5532
.dbline 139
; relay_init();
xcall _relay_init
.dbline 140
; load_init();
xcall _load_init
.dbline 141
; updating=0;
clr R2
sts _updating,R2
xjmp L33
X2:
.dbline 143
; while(1)
; {
L35:
.dbline 145
.dbline 145
.dbline 145
L36:
.dbline 145
; //主程序循环定时
; while(mcu_loop_time<20){;}
lds R24,_mcu_loop_time
cpi R24,20
brlo L35
.dbline 146
; mcu_loop_time=0;
clr R2
sts _mcu_loop_time,R2
.dbline 147
; data_load_manage();
xcall _data_load_manage
.dbline 148
; if(updating==1)
lds R24,_updating
cpi R24,1
brne L38
.dbline 149
; {
.dbline 151
; //**********继电器刷新****************
; RELAY_out(&(Down_load.Relay_out[0]));
ldi R16,<_Down_load
ldi R17,>_Down_load
xcall _RELAY_out
.dbline 153
; //*********上传数据********************
; data_send();
xcall _data_send
.dbline 154
; }
L38:
.dbline 155
xcall _pb_check
.dbline 156
xcall _AD_sample
.dbline 158
L33:
.dbline 142
xjmp L36
X3:
.dbline -2
L31:
.dbline 0 ; func end
ret
.dbend
.area bss(ram, con, rel)
.dbfile E:\mysoft\DH980\main.c
_send_data::
.blkb 17
.dbfile E:\mysoft\DH980/main.h
.dbsym e send_data _send_data X
_Down_load::
.blkb 5
.dbsym e Down_load _Down_load X
_updating::
.blkb 1
.dbsym e updating _updating c
_load_no::
.blkb 1
.dbsym e load_no _load_no c
_load_time::
.blkb 2
.dbsym e load_time _load_time i
_PB_in::
.blkb 1
.dbsym e PB_in _PB_in c
_relay_out::
.blkb 4
.dbsym e relay_out _relay_out A[4:4]c
_AD_channels_data::
.blkb 32
.dbsym e AD_channels_data _AD_channels_data A[32:8]l
_mcu_loop_time::
.blkb 1
.dbsym e mcu_loop_time _mcu_loop_time c
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -