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

📄 24c01.s

📁 该程序是医院用的CPCR记录仪的终端控制程序
💻 S
字号:
	.module _24c01.c
	.area text(rom, con, rel)
	.dbfile F:\yyjapp\yymk\software\24c01.c
	.dbfunc e mDelay _mDelay fV
;             ll -> R20,R21
;              i -> R22,R23
;              j -> R16
	.even
_mDelay::
	xcall push_gset2
	.dbline -1
	.dbline 7
; #include <f:\yyjapp\yymk\software\main.h>
; #include <f:\yyjapp\yymk\software\24c01.h>
; #include <iom128v.h>
; #include <macros.h>	/* hardware write protect*/
; 
; void mDelay(unsigned char j)
; { 
	.dbline 9
; 	unsigned int i,ll;
; 	for(ll=0;ll<j;ll++)
	clr R20
	clr R21
	xjmp L5
L2:
	.dbline 10
; 		{ 
	.dbline 11
; 			for(i=0;i<125;i--)
	clr R22
	clr R23
	xjmp L9
L6:
	.dbline 12
	.dbline 12
	.dbline 12
L7:
	.dbline 11
	subi R22,1
	sbci R23,0
L9:
	.dbline 11
	cpi R22,125
	ldi R30,0
	cpc R23,R30
	brlo L6
	.dbline 13
L3:
	.dbline 9
	subi R20,255  ; offset = 1
	sbci R21,255
L5:
	.dbline 9
	mov R2,R16
	clr R3
	cp R20,R2
	cpc R21,R3
	brlo L2
	.dbline -2
L1:
	xcall pop_gset2
	.dbline 0 ; func end
	ret
	.dbsym r ll 20 i
	.dbsym r i 22 i
	.dbsym r j 16 c
	.dbend
	.dbfunc e Start _Start fV
;              i -> R16
	.even
_Start::
	.dbline -1
	.dbline 17
; 			{;}
; 		}
; }
; 
; void Start(void)  
; {
	.dbline 19
; 	unsigned char i;
; 	SET_SDA();
	cbi 0x11,1
	.dbline 21
	clr R16
	xjmp L14
L11:
	.dbline 21
L12:
	.dbline 21
	inc R16
L14:
	.dbline 21
; //	SET_SCL();
; 	for(i=0;i<10;i++);
	cpi R16,10
	brlo L11
	.dbline 22
; 	CLEAR_SDA();
	sbi 0x11,1
	.dbline 23
	clr R16
	xjmp L18
L15:
	.dbline 23
L16:
	.dbline 23
	inc R16
L18:
	.dbline 23
; 	for(i=0;i<10;i++);
	cpi R16,10
	brlo L15
	.dbline -2
L10:
	.dbline 0 ; func end
	ret
	.dbsym r i 16 c
	.dbend
	.dbfunc e Stop _Stop fV
;              i -> R16
	.even
_Stop::
	.dbline -1
	.dbline 27
; }
; 
; void Stop(void)  
; {
	.dbline 29
; 	unsigned char i;
; 	CLEAR_SDA();
	sbi 0x11,1
	.dbline 31
	clr R16
	xjmp L23
L20:
	.dbline 31
L21:
	.dbline 31
	inc R16
L23:
	.dbline 31
; //	SET_SCL();
; 	for(i=0;i<10;i++);
	cpi R16,10
	brlo L20
	.dbline 32
; 	SET_SDA();
	cbi 0x11,1
	.dbline 33
	clr R16
	xjmp L27
L24:
	.dbline 33
L25:
	.dbline 33
	inc R16
L27:
	.dbline 33
; 	for(i=0;i<10;i++);
	cpi R16,10
	brlo L24
	.dbline -2
L19:
	.dbline 0 ; func end
	ret
	.dbsym r i 16 c
	.dbend
	.dbfunc e Ack _Ack fV
;              i -> R16
	.even
_Ack::
	.dbline -1
	.dbline 37
; }
; 
; void Ack(void) 								/*answer bit*/
; {
	.dbline 39
; 	unsigned char i;
; 	CLEAR_SDA();
	sbi 0x11,1
	.dbline 40
	clr R16
	xjmp L32
L29:
	.dbline 40
L30:
	.dbline 40
	inc R16
L32:
	.dbline 40
; 	for(i=0;i<10;i++);
	cpi R16,10
	brlo L29
	.dbline -2
L28:
	.dbline 0 ; func end
	ret
	.dbsym r i 16 c
	.dbend
	.dbfunc e NoAck _NoAck fV
;              i -> R16
	.even
_NoAck::
	.dbline -1
	.dbline 46
; //	SET_SCL();
; //	for(i=0;i<10;i++);
; //	CLEAR_SCL();
; }
; void NoAck(void) 							/*backfard answer bit*/
; {
	.dbline 48
; 	unsigned char i;
; 	SET_SDA();
	cbi 0x11,1
	.dbline 49
	clr R16
	xjmp L37
L34:
	.dbline 49
L35:
	.dbline 49
	inc R16
L37:
	.dbline 49
; 	for(i=0;i<10;i++);
	cpi R16,10
	brlo L34
	.dbline -2
L33:
	.dbline 0 ; func end
	ret
	.dbsym r i 16 c
	.dbend
	.dbfunc e Send _Send fV
;              j -> R20
;              i -> R22
;           Data -> R16
	.even
_Send::
	xcall push_gset2
	.dbline -1
	.dbline 56
; //	SET_SCL();
; //	for(i=0;i<10;i++);
; //	CLEAR_SCL();
; }
; 
; void Send(unsigned char Data) 					/*send data sub ,data for send of data*/
; {
	.dbline 59
; 	unsigned char j,i; 					/*bit counter control*/
; //	unsigned char temp; 							/*middle var control*/
; 	for(j=0;j<8;j++)
	clr R20
	xjmp L42
L39:
	.dbline 60
; 	{
	.dbline 62
	clr R22
	xjmp L46
L43:
	.dbline 62
L44:
	.dbline 62
	inc R22
L46:
	.dbline 62
; //	 		CLEAR_SCL();
; 			for(i=0;i<10;i++);
	cpi R22,10
	brlo L43
	.dbline 63
; 			if((Data&0x80)==0x80)
	mov R24,R16
	andi R24,128
	cpi R24,128
	brne L47
	.dbline 64
; 				SET_SDA();
	cbi 0x11,1
	xjmp L48
L47:
	.dbline 66
; 			else
; 				CLEAR_SDA();
	sbi 0x11,1
L48:
	.dbline 68
	lsl R16
	.dbline 69
L40:
	.dbline 59
	inc R20
L42:
	.dbline 59
	cpi R20,8
	brlo L39
	.dbline -2
L38:
	xcall pop_gset2
	.dbline 0 ; func end
	ret
	.dbsym r j 20 c
	.dbsym r i 22 c
	.dbsym r Data 16 c
	.dbend
	.dbfunc e Read _Read fc
;              j -> R16
;           temp -> R18
;              i -> R20
	.even
_Read::
	xcall push_gset1
	.dbline -1
	.dbline 74
; //			SET_SCL();
; 			Data=Data<<1;
; 	}
; //	CLEAR_SCL();
; }
; 
; unsigned char Read(void) 							/* read a byte of data ,and return this data*/
; {
	.dbline 77
; 	unsigned char temp,i;
; 	unsigned char j;
; 	SET_SDA();
	cbi 0x11,1
	.dbline 78
; 	for(j=0;j<8;j++)
	clr R16
	xjmp L53
L50:
	.dbline 79
; 	{
	.dbline 80
; 	 	temp<<=1;
	lsl R18
	.dbline 82
	clr R20
	xjmp L57
L54:
	.dbline 82
L55:
	.dbline 82
	inc R20
L57:
	.dbline 82
; //		CLEAR_SCL();
; 		for(i=0;i<10;i++);
	cpi R20,10
	brlo L54
	.dbline 84
	clr R20
	xjmp L61
L58:
	.dbline 84
L59:
	.dbline 84
	inc R20
L61:
	.dbline 84
; //		SET_SCL();
; 		for(i=0;i<10;i++);
	cpi R20,10
	brlo L58
	.dbline 85
; 		if((PIND&0x02)==0x02)								/* if Sda=1;*/
	in R24,0x10
	andi R24,2
	cpi R24,2
	brne L62
	.dbline 86
; 			temp=temp|0x01; 
	ori R18,1
L62:
	.dbline 87
L51:
	.dbline 78
	inc R16
L53:
	.dbline 78
	cpi R16,8
	brlo L50
	.dbline 88
; 	}
; 	return temp;
	mov R16,R18
	.dbline -2
L49:
	xcall pop_gset1
	.dbline 0 ; func end
	ret
	.dbsym r j 16 c
	.dbsym r temp 18 c
	.dbsym r i 20 c
	.dbend
	.dbfunc e WrToROM _WrToROM fV
;              i -> R20
;            Num -> R22
;        Address -> y+6
;           Data -> R10,R11
	.even
_WrToROM::
	st -y,r19
	st -y,r18
	xcall push_gset3
	movw R10,R16
	ldd R22,y+8
	.dbline -1
	.dbline 91
; }
; void WrToROM(unsigned char *Data,unsigned int Address,unsigned char Num)
; {
	.dbline 93
; 	 		unsigned char i;
; 			Start(); 							/* send start signed*/
	xcall _Start
	.dbline 94
; 			Send(0xa0); 						/* send SLA+W*/
	ldi R16,160
	xcall _Send
	.dbline 95
; 			Ack();
	xcall _Ack
	.dbline 96
; 			Send(*((unsigned char *)&Address+1)); 					/* send address*/
	ldd R16,y+7
	xcall _Send
	.dbline 97
; 			Ack();
	xcall _Ack
	.dbline 98
; 			Send(*((unsigned char *)&Address)); 
	movw R30,R28
	ldd R16,z+6
	xcall _Send
	.dbline 99
; 			Ack();
	xcall _Ack
	.dbline 100
; 	 		for(i=0;i<Num;i++)
	clr R20
	xjmp L69
L66:
	.dbline 101
	.dbline 102
	mov R30,R20
	clr R31
	add R30,R10
	adc R31,R11
	ldd R16,z+0
	xcall _Send
	.dbline 103
	xcall _Ack
	.dbline 104
L67:
	.dbline 100
	inc R20
L69:
	.dbline 100
	cp R20,R22
	brlo L66
	.dbline 105
; 	 		{
; 			 	Send(*(Data+i));
; 				Ack();
; 			}
; 		 	Stop();
	xcall _Stop
	.dbline 106
; 			mDelay(10);
	ldi R16,10
	xcall _mDelay
	.dbline -2
L64:
	xcall pop_gset3
	adiw R28,2
	.dbline 0 ; func end
	ret
	.dbsym r i 20 c
	.dbsym r Num 22 c
	.dbsym l Address 6 i
	.dbsym r Data 10 pc
	.dbend
	.dbfunc e RdFromROM _RdFromROM fV
;              i -> R20
;            Num -> R22
;        Address -> y+6
;           Data -> R10,R11
	.even
_RdFromROM::
	st -y,r19
	st -y,r18
	xcall push_gset3
	movw R10,R16
	ldd R22,y+8
	.dbline -1
	.dbline 110
; 		
; }
; void RdFromROM(unsigned char *Data,unsigned int Address,unsigned char Num)
; {
	.dbline 114
; 	unsigned char i;
; //	unsigned char *PData;
; //	PData=Data;
; 	for(i=0;i<Num;i++)
	clr R20
	xjmp L74
L71:
	.dbline 115
	.dbline 116
	xcall _Start
	.dbline 117
	ldi R16,160
	xcall _Send
	.dbline 118
	xcall _Ack
	.dbline 119
	ldd R16,y+7
	xcall _Send
	.dbline 120
	xcall _Ack
	.dbline 121
	movw R30,R28
	ldd R16,z+6
	xcall _Send
	.dbline 122
	xcall _Ack
	.dbline 123
	xcall _Start
	.dbline 124
	ldi R16,161
	xcall _Send
	.dbline 125
	xcall _Ack
	.dbline 126
	xcall _Read
	mov R30,R20
	clr R31
	add R30,R10
	adc R31,R11
	std z+0,R16
	.dbline 128
	xcall _NoAck
	.dbline 129
	xcall _Stop
	.dbline 130
	ldd R24,y+6
	ldd R25,y+7
	adiw R24,1
	std y+7,R25
	std y+6,R24
	.dbline 131
L72:
	.dbline 114
	inc R20
L74:
	.dbline 114
	cp R20,R22
	brlo L71
	.dbline -2
L70:
	xcall pop_gset3
	adiw R28,2
	.dbline 0 ; func end
	ret
	.dbsym r i 20 c
	.dbsym r Num 22 c
	.dbsym l Address 6 i
	.dbsym r Data 10 pc
	.dbend
	.dbfunc e write_byte01 _write_byte01 fV
;           data -> y+2
;        Address -> y+0
	.even
_write_byte01::
	xcall push_arg4
	.dbline -1
	.dbline 135
; 		{
; 			Start();
; 			Send(0xa0);
; 			Ack();
; 			Send(*((unsigned char *)&Address+1));
; 			Ack();
; 			Send(*((unsigned char *)&Address)); 
; 			Ack();
; 			Start();
; 			Send(0xa1);
; 			Ack();
; 			*(Data+i)=Read();
; //			CLEAR_SCL();
; 			NoAck();
; 			Stop();
; 			Address++;
; 		}
; }
; 
; void write_byte01(unsigned int Address,unsigned char data)
; {
	.dbline 136
; 			Start(); 							/* send start signed*/
	xcall _Start
	.dbline 137
; 			Send(0xa0); 						/* send SLA+W*/
	ldi R16,160
	xcall _Send
	.dbline 138
; 			Ack();
	xcall _Ack
	.dbline 139
; 			Send(*((unsigned char *)&Address+1)); 					/* send address*/
	ldd R16,y+1
	xcall _Send
	.dbline 140
; 			Ack();
	xcall _Ack
	.dbline 141
; 			Send(*((unsigned char *)&Address)); 
	movw R30,R28
	ldd R16,z+0
	xcall _Send
	.dbline 142
; 			Ack();
	xcall _Ack
	.dbline 143
; 	 		Send(data);
	ldd R16,y+2
	xcall _Send
	.dbline 144
; 			Ack();
	xcall _Ack
	.dbline 145
; 			Stop();
	xcall _Stop
	.dbline 146
; 			mDelay(30);
	ldi R16,30
	xcall _mDelay
	.dbline -2
L76:
	adiw R28,4
	.dbline 0 ; func end
	ret
	.dbsym l data 2 c
	.dbsym l Address 0 i
	.dbend
	.dbfunc e read_byte01 _read_byte01 fc
;           temp -> R20
;        Address -> y+2
	.even
_read_byte01::
	st -y,r17
	st -y,r16
	xcall push_gset1
	.dbline -1
	.dbline 150
; 		
; }
; unsigned char read_byte01(unsigned int Address)
; {
	.dbline 152
; 	unsigned char temp;
; 	Start();
	xcall _Start
	.dbline 153
; 	Send(0xa0);
	ldi R16,160
	xcall _Send
	.dbline 154
; 	Ack();
	xcall _Ack
	.dbline 155
; 	Send(*((unsigned char *)&Address+1));
	ldd R16,y+3
	xcall _Send
	.dbline 156
; 	Ack();
	xcall _Ack
	.dbline 157
; 	Send(*((unsigned char *)&Address)); 
	movw R30,R28
	ldd R16,z+2
	xcall _Send
	.dbline 158
; 	Ack();
	xcall _Ack
	.dbline 159
; 	Start();
	xcall _Start
	.dbline 160
; 	Send(0xa1);
	ldi R16,161
	xcall _Send
	.dbline 161
; 	Ack();
	xcall _Ack
	.dbline 162
; 	temp=Read();
	xcall _Read
	mov R20,R16
	.dbline 164
; //	CLEAR_SCL();
; 	NoAck();
	xcall _NoAck
	.dbline 165
; 	Stop();
	xcall _Stop
	.dbline 166
; 	return temp;
	mov R16,R20
	.dbline -2
L78:
	xcall pop_gset1
	adiw R28,2
	.dbline 0 ; func end
	ret
	.dbsym r temp 20 c
	.dbsym l Address 2 i
	.dbend

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -