📄 intmcu.s
字号:
.module intmcu.c
.area text(rom, con, rel)
.dbfile D:\报警系统设计资料\报警系统软件\测量模块基于CAN的系统网程序\开关量CAN网\intmcu.c
.dbfunc e port_init _port_init fV
.even
_port_init::
.dbline -1
.dbline 9
; #include "main.h"
;
; Uchar DI_Status[3];
; Uchar PINA_temp,PINB_temp,PINE_temp,PINF_temp;
; unsigned char DI_data_cur[12],DI_data[12],DI_data_pre[12]; //状态寄存器
;
;
; void port_init(void) //端口初始化
; {
.dbline 10
; DDRA = 0x00;
clr R2
out 0x1,R2
.dbline 11
; DDRB = 0xe0;
ldi R24,224
out 0x4,R24
.dbline 12
; DDRE = 0x00;
out 0xd,R2
.dbline 13
; DDRF = 0x00;
out 0x10,R2
.dbline 14
; DDRC = 0x00;
out 0x7,R2
.dbline 15
; DDRD = 0x10;
ldi R24,16
out 0xa,R24
.dbline 16
; PORTG = 0x08;
ldi R24,8
out 0x14,R24
.dbline 17
; DDRG = 0x08;
out 0x13,R24
.dbline -2
L1:
.dbline 0 ; func end
ret
.dbend
.dbfunc e DI_handle _DI_handle fV
.even
_DI_handle::
.dbline -1
.dbline 21
; }
;
; void DI_handle(void) //开关状态读取
; {
.dbline 22
; PINA_temp = PINA;
in R2,0x0
sts _PINA_temp,R2
.dbline 23
; PINB_temp = PINB;
in R2,0x3
sts _PINB_temp,R2
.dbline 24
; PINE_temp = PINE;
in R2,0xc
sts _PINE_temp,R2
.dbline 25
; PINF_temp = PINF;
in R2,0xf
sts _PINF_temp,R2
.dbline 28
;
; /**************Channel 1*****************/
; if(PINA_temp & (1<<3))
lds R24,_PINA_temp
andi R24,8
breq L3
.dbline 29
; DI_Status[0] |= (1<<0);
lds R24,_DI_Status
ori R24,1
sts _DI_Status,R24
xjmp L4
L3:
.dbline 31
; else
; DI_Status[0] &= (~(1<<0));
lds R24,_DI_Status
andi R24,254
sts _DI_Status,R24
L4:
.dbline 33
;
; if(PINF_temp & (1<<2))
lds R24,_PINF_temp
andi R24,4
breq L5
.dbline 34
; DI_Status[0] |= (1<<1);
lds R24,_DI_Status
ori R24,2
sts _DI_Status,R24
xjmp L6
L5:
.dbline 36
; else
; DI_Status[0] &= (~(1<<1));
lds R24,_DI_Status
andi R24,253
sts _DI_Status,R24
L6:
.dbline 39
;
; /**************Channel 2*****************/
; if(PINF_temp & (1<<3))
lds R24,_PINF_temp
andi R24,8
breq L7
.dbline 40
; DI_Status[0] |= (1<<2);
lds R24,_DI_Status
ori R24,4
sts _DI_Status,R24
xjmp L8
L7:
.dbline 42
; else
; DI_Status[0] &= (~(1<<2));
lds R24,_DI_Status
andi R24,251
sts _DI_Status,R24
L8:
.dbline 44
;
; if(PINA_temp & (1<<2))
lds R24,_PINA_temp
andi R24,4
breq L9
.dbline 45
; DI_Status[0] |= (1<<3);
lds R24,_DI_Status
ori R24,8
sts _DI_Status,R24
xjmp L10
L9:
.dbline 47
; else
; DI_Status[0] &= (~(1<<3));
lds R24,_DI_Status
andi R24,247
sts _DI_Status,R24
L10:
.dbline 50
;
; /**************Channel 3*****************/
; if(PINE_temp & (1<<7))
lds R24,_PINE_temp
andi R24,128
breq L11
.dbline 51
; DI_Status[0] |= (1<<4);
lds R24,_DI_Status
ori R24,16
sts _DI_Status,R24
xjmp L12
L11:
.dbline 53
; else
; DI_Status[0] &= (~(1<<4));
lds R24,_DI_Status
andi R24,239
sts _DI_Status,R24
L12:
.dbline 55
;
; if(PINE_temp & (1<<1))
lds R24,_PINE_temp
andi R24,2
breq L13
.dbline 56
; DI_Status[0] |= (1<<5);
lds R24,_DI_Status
ori R24,32
sts _DI_Status,R24
xjmp L14
L13:
.dbline 58
; else
; DI_Status[0] &= (~(1<<5));
lds R24,_DI_Status
andi R24,223
sts _DI_Status,R24
L14:
.dbline 61
;
; /**************Channel 4*****************/
; if(PINE_temp & (1<<0))
lds R24,_PINE_temp
andi R24,1
breq L15
.dbline 62
; DI_Status[0] |= (1<<6);
lds R24,_DI_Status
ori R24,64
sts _DI_Status,R24
xjmp L16
L15:
.dbline 64
; else
; DI_Status[0] &= (~(1<<6));
lds R24,_DI_Status
andi R24,191
sts _DI_Status,R24
L16:
.dbline 66
;
; if(PINE_temp & (1<<6))
lds R24,_PINE_temp
andi R24,64
breq L17
.dbline 67
; DI_Status[0] |= (1<<7);
lds R24,_DI_Status
ori R24,128
sts _DI_Status,R24
xjmp L18
L17:
.dbline 69
; else
; DI_Status[0] &= (~(1<<7));
lds R24,_DI_Status
andi R24,127
sts _DI_Status,R24
L18:
.dbline 72
;
; /**************Channel 5*****************/
; if(PINA_temp & (1<<5))
lds R24,_PINA_temp
andi R24,32
breq L19
.dbline 73
; DI_Status[1] |= (1<<0);
lds R24,_DI_Status+1
ori R24,1
sts _DI_Status+1,R24
xjmp L20
L19:
.dbline 75
; else
; DI_Status[1] &= (~(1<<0));
lds R24,_DI_Status+1
andi R24,254
sts _DI_Status+1,R24
L20:
.dbline 77
;
; if(PINF_temp & (1<<0))
lds R24,_PINF_temp
andi R24,1
breq L23
.dbline 78
; DI_Status[1] |= (1<<1);
lds R24,_DI_Status+1
ori R24,2
sts _DI_Status+1,R24
xjmp L24
L23:
.dbline 80
; else
; DI_Status[1] &= (~(1<<1));
lds R24,_DI_Status+1
andi R24,253
sts _DI_Status+1,R24
L24:
.dbline 83
;
; /**************Channel 6*****************/
; if(PINF_temp & (1<<1))
lds R24,_PINF_temp
andi R24,2
breq L27
.dbline 84
; DI_Status[1] |= (1<<2);
lds R24,_DI_Status+1
ori R24,4
sts _DI_Status+1,R24
xjmp L28
L27:
.dbline 86
; else
; DI_Status[1] &= (~(1<<2));
lds R24,_DI_Status+1
andi R24,251
sts _DI_Status+1,R24
L28:
.dbline 88
;
; if(PINA_temp & (1<<4))
lds R24,_PINA_temp
andi R24,16
breq L31
.dbline 89
; DI_Status[1] |= (1<<3);
lds R24,_DI_Status+1
ori R24,8
sts _DI_Status+1,R24
xjmp L32
L31:
.dbline 91
; else
; DI_Status[1] &= (~(1<<3));
lds R24,_DI_Status+1
andi R24,247
sts _DI_Status+1,R24
L32:
.dbline 97
;
;
; //PB1,PE3 PE2,PB0 PA7,PA1 PA0,PA6 PB3,PE5 PE4,PB2
;
; /**************Channel 7*****************/
; if(PINB_temp & (1<<1))
lds R24,_PINB_temp
andi R24,2
breq L35
.dbline 98
; DI_Status[1] |= (1<<4);
lds R24,_DI_Status+1
ori R24,16
sts _DI_Status+1,R24
xjmp L36
L35:
.dbline 100
; else
; DI_Status[1] &= (~(1<<4));
lds R24,_DI_Status+1
andi R24,239
sts _DI_Status+1,R24
L36:
.dbline 102
;
; if(PINE_temp & (1<<3))
lds R24,_PINE_temp
andi R24,8
breq L39
.dbline 103
; DI_Status[1] |= (1<<5);
lds R24,_DI_Status+1
ori R24,32
sts _DI_Status+1,R24
xjmp L40
L39:
.dbline 105
; else
; DI_Status[1] &= (~(1<<5));
lds R24,_DI_Status+1
andi R24,223
sts _DI_Status+1,R24
L40:
.dbline 108
;
; /**************Channel 8*****************/
; if(PINE_temp & (1<<2))
lds R24,_PINE_temp
andi R24,4
breq L43
.dbline 109
; DI_Status[1] |= (1<<6);
lds R24,_DI_Status+1
ori R24,64
sts _DI_Status+1,R24
xjmp L44
L43:
.dbline 111
; else
; DI_Status[1] &= (~(1<<6));
lds R24,_DI_Status+1
andi R24,191
sts _DI_Status+1,R24
L44:
.dbline 113
;
; if(PINB_temp & (1<<0))
lds R24,_PINB_temp
andi R24,1
breq L47
.dbline 114
; DI_Status[1] |= (1<<7);
lds R24,_DI_Status+1
ori R24,128
sts _DI_Status+1,R24
xjmp L48
L47:
.dbline 116
; else
; DI_Status[1] &= (~(1<<7));
lds R24,_DI_Status+1
andi R24,127
sts _DI_Status+1,R24
L48:
.dbline 119
;
; /**************Channel 9*****************/
; if(PINA_temp & (1<<7))
lds R24,_PINA_temp
andi R24,128
breq L51
.dbline 120
; DI_Status[2] |= (1<<0);
lds R24,_DI_Status+2
ori R24,1
sts _DI_Status+2,R24
xjmp L52
L51:
.dbline 122
; else
; DI_Status[2] &= (~(1<<0));
lds R24,_DI_Status+2
andi R24,254
sts _DI_Status+2,R24
L52:
.dbline 124
;
; if(PINA_temp & (1<<1))
lds R24,_PINA_temp
andi R24,2
breq L55
.dbline 125
; DI_Status[2] |= (1<<1);
lds R24,_DI_Status+2
ori R24,2
sts _DI_Status+2,R24
xjmp L56
L55:
.dbline 127
; else
; DI_Status[2] &= (~(1<<1));
lds R24,_DI_Status+2
andi R24,253
sts _DI_Status+2,R24
L56:
.dbline 130
;
; /**************Channel 10*****************/
; if(PINA_temp & (1<<0))
lds R24,_PINA_temp
andi R24,1
breq L59
.dbline 131
; DI_Status[2] |= (1<<2);
lds R24,_DI_Status+2
ori R24,4
sts _DI_Status+2,R24
xjmp L60
L59:
.dbline 133
; else
; DI_Status[2] &= (~(1<<2));
lds R24,_DI_Status+2
andi R24,251
sts _DI_Status+2,R24
L60:
.dbline 135
;
; if(PINA_temp & (1<<6))
lds R24,_PINA_temp
andi R24,64
breq L63
.dbline 136
; DI_Status[2] |= (1<<3);
lds R24,_DI_Status+2
ori R24,8
sts _DI_Status+2,R24
xjmp L64
L63:
.dbline 138
; else
; DI_Status[2] &= (~(1<<3));
lds R24,_DI_Status+2
andi R24,247
sts _DI_Status+2,R24
L64:
.dbline 141
;
; /**************Channel 11*****************/
; if(PINB_temp & (1<<3))
lds R24,_PINB_temp
andi R24,8
breq L67
.dbline 142
; DI_Status[2] |= (1<<4);
lds R24,_DI_Status+2
ori R24,16
sts _DI_Status+2,R24
xjmp L68
L67:
.dbline 144
; else
; DI_Status[2] &= (~(1<<4));
lds R24,_DI_Status+2
andi R24,239
sts _DI_Status+2,R24
L68:
.dbline 146
;
; if(PINE_temp & (1<<5))
lds R24,_PINE_temp
andi R24,32
breq L71
.dbline 147
; DI_Status[2] |= (1<<5);
lds R24,_DI_Status+2
ori R24,32
sts _DI_Status+2,R24
xjmp L72
L71:
.dbline 149
; else
; DI_Status[2] &= (~(1<<5));
lds R24,_DI_Status+2
andi R24,223
sts _DI_Status+2,R24
L72:
.dbline 152
;
; /**************Channel 12*****************/
; if(PINE_temp & (1<<4))
lds R24,_PINE_temp
andi R24,16
breq L75
.dbline 153
; DI_Status[2] |= (1<<6);
lds R24,_DI_Status+2
ori R24,64
sts _DI_Status+2,R24
xjmp L76
L75:
.dbline 155
; else
; DI_Status[2] &= (~(1<<6));
lds R24,_DI_Status+2
andi R24,191
sts _DI_Status+2,R24
L76:
.dbline 157
;
; if(PINB_temp & (1<<2))
lds R24,_PINB_temp
andi R24,4
breq L79
.dbline 158
; DI_Status[2] |= (1<<7);
lds R24,_DI_Status+2
ori R24,128
sts _DI_Status+2,R24
xjmp L80
L79:
.dbline 160
; else
; DI_Status[2] &= (~(1<<7));
lds R24,_DI_Status+2
andi R24,127
sts _DI_Status+2,R24
L80:
.dbline 166
;
; ///test
; // if((DI_Status[0] != 0xaa) || (DI_Status[1] != 0xaa) || (DI_Status[1] != 0xaa))
; // PORTB |= (1<<5);
;
; data_tranfer(); //刷新DI_data_cur[]的值
xcall _data_tranfer
.dbline -2
L2:
.dbline 0 ; func end
ret
.dbend
.dbfunc e data_tranfer _data_tranfer fV
; j -> R20
; i -> R22
.even
_data_tranfer::
xcall push_gset2
.dbline -1
.dbline 172
;
; }
;
;
; void data_tranfer(void)
; {
.dbline 175
; unsigned char i,j;
;
; for(j=0;j<3;j++)
clr R20
xjmp L87
L84:
.dbline 176
; {
.dbline 177
; for(i=0;i<8;i=i+2)
clr R22
xjmp L91
L88:
.dbline 178
; {
.dbline 179
; if(((DI_Status[j]>>i) & 0x03) == 0x03)
ldi R24,<_DI_Status
ldi R25,>_DI_Status
mov R30,R20
clr R31
add R30,R24
adc R31,R25
ldd R16,z+0
mov R17,R22
xcall lsr8
mov R24,R16
andi R24,3
cpi R24,3
brne L92
.dbline 180
; DI_data_cur[(j<<2)+(i>>1)] = 0x5a;
mov R2,R22
clr R3
asr R3
ror R2
mov R30,R20
clr R31
lsl R30
rol R31
lsl R30
rol R31
add R30,R2
adc R31,R3
ldi R24,<_DI_data_cur
ldi R25,>_DI_data_cur
add R30,R24
adc R31,R25
ldi R24,90
std z+0,R24
xjmp L93
L92:
.dbline 181
; else if(((DI_Status[j]>>i) & 0x03) == 0x00)
ldi R24,<_DI_Status
ldi R25,>_DI_Status
mov R30,R20
clr R31
add R30,R24
adc R31,R25
ldd R16,z+0
mov R17,R22
xcall lsr8
mov R24,R16
andi R24,3
brne L94
.dbline 182
; DI_data_cur[(j<<2)+(i>>1)] = 0;
mov R2,R22
clr R3
asr R3
ror R2
mov R30,R20
clr R31
lsl R30
rol R31
lsl R30
rol R31
add R30,R2
adc R31,R3
ldi R24,<_DI_data_cur
ldi R25,>_DI_data_cur
add R30,R24
adc R31,R25
clr R2
std z+0,R2
xjmp L95
L94:
.dbline 183
; else if(((DI_Status[j]>>i) & 0x03) == 0x02)
ldi R24,<_DI_Status
ldi R25,>_DI_Status
mov R30,R20
clr R31
add R30,R24
adc R31,R25
ldd R16,z+0
mov R17,R22
xcall lsr8
mov R24,R16
andi R24,3
cpi R24,2
brne L96
.dbline 184
; DI_data_cur[(j<<2)+(i>>1)] = 0xa5;
mov R2,R22
clr R3
asr R3
ror R2
mov R30,R20
clr R31
lsl R30
rol R31
lsl R30
rol R31
add R30,R2
adc R31,R3
ldi R24,<_DI_data_cur
ldi R25,>_DI_data_cur
add R30,R24
adc R31,R25
ldi R24,165
std z+0,R24
L96:
L95:
L93:
.dbline 185
L89:
.dbline 177
subi R22,254 ; addi 2
L91:
.dbline 177
cpi R22,8
brsh X0
xjmp L88
X0:
.dbline 186
L85:
.dbline 175
inc R20
L87:
.dbline 175
cpi R20,3
brsh X1
xjmp L84
X1:
.dbline -2
L83:
xcall pop_gset2
.dbline 0 ; func end
ret
.dbsym r j 20 c
.dbsym r i 22 c
.dbend
.dbfunc e timer0_init _timer0_init fV
.even
_timer0_init::
.dbline -1
.dbline 193
; }
; }
;
; }
;
;
;
; void timer0_init(void)
; {
.dbline 194
; TCCR0A = 0x00; //stop
clr R2
out 0x24,R2
.dbline 195
; ASSR = 0x00; //set async mode
sts 182,R2
.dbline 196
; TCNT0 = 0x83; //set count
ldi R24,131
out 0x26,R24
.dbline 197
; OCR0 = 0x7D;
ldi R24,125
out 0x27,R24
.dbline 198
; TCCR0A = 0x05; //start timer
ldi R24,5
out 0x24,R24
.dbline -2
L98:
.dbline 0 ; func end
ret
.dbend
.dbfunc e init_devices _init_devices fV
.even
_init_devices::
.dbline -1
.dbline 202
; }
;
; void init_devices(void)
; {
.dbline 203
; port_init();
xcall _port_init
.dbline 204
; timer0_init();
xcall _timer0_init
.dbline 205
; TIMSK0 = 0x01;
ldi R24,1
sts 110,R24
.dbline -2
L99:
.dbline 0 ; func end
ret
.dbend
.dbfunc e watchdog_init _watchdog_init fV
.even
_watchdog_init::
.dbline -1
.dbline 209
; }
;
; void watchdog_init(void)
; {
.dbline 210
; WDR(); //this prevents a timout on enabling
wdr
.dbline 211
; WDTCR = 0x0e; //WATCHDOG ENABLED - dont forget to issue WDRs
ldi R24,14
sts 96,R24
.dbline -2
L100:
.dbline 0 ; func end
ret
.dbend
.area bss(ram, con, rel)
.dbfile D:\报警系统设计资料\报警系统软件\测量模块基于CAN的系统网程序\开关量CAN网\intmcu.c
_DI_data_pre::
.blkb 12
.dbsym e DI_data_pre _DI_data_pre A[12:12]c
_DI_data::
.blkb 12
.dbsym e DI_data _DI_data A[12:12]c
_DI_data_cur::
.blkb 12
.dbsym e DI_data_cur _DI_data_cur A[12:12]c
_PINF_temp::
.blkb 1
.dbsym e PINF_temp _PINF_temp c
_PINE_temp::
.blkb 1
.dbsym e PINE_temp _PINE_temp c
_PINB_temp::
.blkb 1
.dbsym e PINB_temp _PINB_temp c
_PINA_temp::
.blkb 1
.dbsym e PINA_temp _PINA_temp c
_DI_Status::
.blkb 3
.dbsym e DI_Status _DI_Status A[3:3]c
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -