⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 intmcu.s

📁 工业开关量检测模块的原代码,带断线检测功能
💻 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 + -