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

📄 at45db~1.s

📁 该程序是医院用的CPCR记录仪的终端控制程序
💻 S
📖 第 1 页 / 共 2 页
字号:
	.module at45db161.c
	.area text(rom, con, rel)
	.dbfile D:\gkdoor\oldboardsoftware\at45db161.c
	.dbfunc e read_byte _read_byte fc
;           data -> R16
;              i -> R18
	.even
_read_byte::
	.dbline -1
	.dbline 6
; #include <d:\gkdoor\oldboardsoftware\main.h>
; #include <d:\gkdoor\oldboardsoftware\at45db161.h>
; #include <iom128v.h>
; #include <macros.h>
; unsigned char read_byte(void)
; {
	.dbline 7
;  	unsigned char i,data=0;
	clr R16
	.dbline 8
; 	SET_45IO();
	cbi 0x11,5
	.dbline 9
;     for (i=0;i<8;i++)
	clr R18
	xjmp L5
L2:
	.dbline 10
;     {
	.dbline 11
; 	    SET_45SCK();
	cbi 0x11,6
	.dbline 12
; 		data<<=1;
	lsl R16
	.dbline 13
;         if((PIND&0x20)==0x20)   // sda bit input data.
	in R24,0x10
	andi R24,32
	cpi R24,32
	brne L6
	.dbline 14
; 		data|=1;
	ori R16,1
L6:
	.dbline 15
	sbi 0x11,6
	.dbline 16
L3:
	.dbline 9
	inc R18
L5:
	.dbline 9
	cpi R18,8
	brlo L2
	.dbline 17
; 		CLEAR_45SCK();
;     }
;     return data; 
	.dbline -2
L1:
	.dbline 0 ; func end
	ret
	.dbsym r data 16 c
	.dbsym r i 18 c
	.dbend
	.dbfunc e write_byte _write_byte fV
;              i -> R20
;          data1 -> R22
	.even
_write_byte::
	xcall push_gset2
	mov R22,R16
	.dbline -1
	.dbline 20
; }
; void write_byte(unsigned char data1)
; {
	.dbline 22
;  	unsigned char i;
; 	for(i=0;i<8;i++)
	clr R20
	xjmp L12
L9:
	.dbline 23
; 	{
	.dbline 24
;      if (data1&0x80)	 
	sbrs R22,7
	rjmp L13
	.dbline 25
;      SET_45IO();    	  
	cbi 0x11,5
	xjmp L14
L13:
	.dbline 27
;      else 
;      CLEAR_45IO();
	sbi 0x11,5
L14:
	.dbline 28
	xcall _CLOCK1
	.dbline 29
	lsl R22
	.dbline 30
L10:
	.dbline 22
	inc R20
L12:
	.dbline 22
	cpi R20,8
	brlo L9
	.dbline -2
	.dbline 31
; 	 CLOCK1();
; 	 data1<<=1;
;      }
; }
L8:
	xcall pop_gset2
	.dbline 0 ; func end
	ret
	.dbsym r i 20 c
	.dbsym r data1 22 c
	.dbend
	.dbfunc e CLOCK1 _CLOCK1 fV
	.even
_CLOCK1::
	.dbline -1
	.dbline 33
; void CLOCK1(void)
; { 
	.dbline 34
;      SET_45SCK();
	cbi 0x11,6
	.dbline 35
;      DELAY();
	xcall _DELAY
	.dbline 36
;      CLEAR_45SCK();
	sbi 0x11,6
	.dbline -2
	.dbline 37
; }
L15:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e DELAY _DELAY fV
;              i -> R16
	.even
_DELAY::
	.dbline -1
	.dbline 39
; void DELAY(void)
; {
	.dbline 41
	clr R16
	xjmp L20
L17:
	.dbline 41
L18:
	.dbline 41
	inc R16
L20:
	.dbline 41
;      unsigned char i;
;      for (i=0;i<2;i++);
	cpi R16,2
	brlo L17
	.dbline -2
	.dbline 42
; }
L16:
	.dbline 0 ; func end
	ret
	.dbsym r i 16 c
	.dbend
	.dbfunc e read_status _read_status fc
;          temp2 -> R20
	.even
_read_status::
	xcall push_gset1
	.dbline -1
	.dbline 44
; unsigned char read_status(void)
; {
	.dbline 46
;  	 unsigned char temp2;
; 	 CLEAR_45CS();
	sbi 0x11,4
	.dbline 47
; 	 CLEAR_45SCK();
	sbi 0x11,6
	.dbline 48
; 	 SET_45IO();
	cbi 0x11,5
	.dbline 49
; 	 write_byte(0x57);
	ldi R16,87
	xcall _write_byte
	.dbline 50
; 	 CLOCK1();
	xcall _CLOCK1
	.dbline 51
; 	 NOP();
	nop
	.dbline 52
; 	 temp2=read_byte();
	xcall _read_byte
	mov R20,R16
	.dbline 53
; 	 SET_45CS();
	cbi 0x11,4
	.dbline 54
; 	 return temp2;
	.dbline -2
L21:
	xcall pop_gset1
	.dbline 0 ; func end
	ret
	.dbsym r temp2 20 c
	.dbend
	.dbfunc e write_buffer1 _write_buffer1 fV
;              i -> R20,R21
;             pt -> R22,R23
;         bitnum -> R10,R11
	.even
_write_buffer1::
	xcall push_gset3
	movw R22,R18
	movw R10,R16
	.dbline -1
	.dbline 57
; }
; void write_buffer1(unsigned int bitnum,unsigned char *pt)
; {
	.dbline 59
;  	 unsigned int i;
; 	 CLEAR_45CS();
	sbi 0x11,4
	.dbline 60
; 	 CLEAR_45SCK();
	sbi 0x11,6
	.dbline 61
; 	 SET_45IO();
	cbi 0x11,5
	.dbline 62
; 	 write_byte(0x84);
	ldi R16,132
	xcall _write_byte
	.dbline 63
; 	 write_byte(0x00);
	clr R16
	xcall _write_byte
	.dbline 64
; 	 i=bitnum>>8;
	movw R20,R10
	mov R20,R21
	clr R21
	.dbline 65
; 	 write_byte((unsigned char)i);
	mov R16,R20
	xcall _write_byte
	.dbline 66
; 	 write_byte((unsigned char)bitnum);
	mov R16,R10
	xcall _write_byte
	.dbline 67
; 	 for(i=0;i<528;i++)
	clr R20
	clr R21
	xjmp L26
L23:
	.dbline 68
	movw R30,R22
	ld R16,Z+
	movw R22,R30
	xcall _write_byte
L24:
	.dbline 67
	subi R20,255  ; offset = 1
	sbci R21,255
L26:
	.dbline 67
	cpi R20,16
	ldi R30,2
	cpc R21,R30
	brlo L23
	.dbline 69
; 	 write_byte(*pt++);
; 	 DELAY();
	xcall _DELAY
	.dbline 70
; 	 SET_45CS();
	cbi 0x11,4
	.dbline -2
	.dbline 71
; }
L22:
	xcall pop_gset3
	.dbline 0 ; func end
	ret
	.dbsym r i 20 i
	.dbsym r pt 22 pc
	.dbsym r bitnum 10 i
	.dbend
	.dbfunc e write_mainmemory _write_mainmemory fV
;              i -> R20,R21
;             pt -> R22,R23
;        pagenum -> R10,R11
	.even
_write_mainmemory::
	xcall push_gset3
	movw R22,R18
	movw R10,R16
	.dbline -1
	.dbline 73
; void write_mainmemory(unsigned int pagenum,unsigned char *pt)
; {
	.dbline 75
;  	 unsigned int i;
; 	 CLEAR_45CS();
	sbi 0x11,4
	.dbline 76
; 	 SET_45IO();
	cbi 0x11,5
	.dbline 77
; 	 CLEAR_45SCK();
	sbi 0x11,6
	.dbline 78
; 	 write_byte(0x82);
	ldi R16,130
	xcall _write_byte
	.dbline 79
; 	 i=pagenum>>6;
	ldi R18,6
	ldi R19,0
	movw R16,R10
	xcall lsr16
	.dbline 80
; 	 write_byte((unsigned char)i);
	xcall _write_byte
	.dbline 81
; 	 i=pagenum<<2;
	movw R20,R10
	lsl R20
	rol R21
	lsl R20
	rol R21
	.dbline 82
; 	 write_byte((unsigned char)i);
	mov R16,R20
	xcall _write_byte
	.dbline 83
; 	 write_byte(0x00);
	clr R16
	xcall _write_byte
	.dbline 84
; 	 for(i=0;i<528;i++)
	clr R20
	clr R21
	xjmp L31
L28:
	.dbline 85
	movw R30,R22
	ld R16,Z+
	movw R22,R30
	xcall _write_byte
L29:
	.dbline 84
	subi R20,255  ; offset = 1
	sbci R21,255
L31:
	.dbline 84
	cpi R20,16
	ldi R30,2
	cpc R21,R30
	brlo L28
	.dbline 86
; 	 write_byte(*pt++);
; 	 NOP();
	nop
	.dbline 87
; 	 SET_45IO();
	cbi 0x11,5
	.dbline 88
; 	 CLEAR_45SCK();
	sbi 0x11,6
	.dbline 89
; 	 SET_45CS();
	cbi 0x11,4
	.dbline 90
	clr R20
	clr R21
	xjmp L35
L32:
	.dbline 90
L33:
	.dbline 90
	subi R20,255  ; offset = 1
	sbci R21,255
L35:
	.dbline 90
; 	 for(i=0;i<50000;i++);
	cpi R20,80
	ldi R30,195
	cpc R21,R30
	brlo L32
	.dbline -2
	.dbline 91
; }
L27:
	xcall pop_gset3
	.dbline 0 ; func end
	ret
	.dbsym r i 20 i
	.dbsym r pt 22 pc
	.dbsym r pagenum 10 i
	.dbend
	.dbfunc e write_buffer2 _write_buffer2 fV
;              i -> R20,R21
;             pt -> R22,R23
;         bitnum -> R10,R11
	.even
_write_buffer2::
	xcall push_gset3
	movw R22,R18
	movw R10,R16
	.dbline -1
	.dbline 93
; void write_buffer2(unsigned int bitnum,unsigned char *pt)
; {
	.dbline 95
;  	 unsigned int i;
; 	 CLEAR_45CS();
	sbi 0x11,4
	.dbline 96
; 	 DELAY();
	xcall _DELAY
	.dbline 97
; 	 write_byte(0x87);
	ldi R16,135
	xcall _write_byte
	.dbline 98
; 	 write_byte(0x00);
	clr R16
	xcall _write_byte
	.dbline 99
; 	 i=bitnum>>8;
	movw R20,R10
	mov R20,R21
	clr R21
	.dbline 100
; 	 write_byte((unsigned char)i);
	mov R16,R20
	xcall _write_byte
	.dbline 101
; 	 write_byte((unsigned char)bitnum);
	mov R16,R10
	xcall _write_byte
	.dbline 102
; 	 for(i=0;i<528;i++)
	clr R20
	clr R21
	xjmp L40
L37:
	.dbline 103
	movw R30,R22
	ld R16,Z+
	movw R22,R30
	xcall _write_byte
L38:
	.dbline 102
	subi R20,255  ; offset = 1
	sbci R21,255
L40:
	.dbline 102
	cpi R20,16
	ldi R30,2
	cpc R21,R30
	brlo L37
	.dbline 104
; 	 write_byte(*pt++);
; 	 SET_45CS();
	cbi 0x11,4
	.dbline -2
	.dbline 105
; }
L36:
	xcall pop_gset3
	.dbline 0 ; func end
	ret
	.dbsym r i 20 i
	.dbsym r pt 22 pc
	.dbsym r bitnum 10 i
	.dbend
	.dbfunc e write_buffer1mainmemory _write_buffer1mainmemory fV
;              i -> R20,R21
;           flag -> R20
;        pagenum -> R22,R23
	.even
_write_buffer1mainmemory::
	xcall push_gset2
	movw R22,R16
	.dbline -1
	.dbline 107
; void write_buffer1mainmemory(unsigned int pagenum)
; {
	xjmp L43
L42:
	.dbline 112
;  	 unsigned int i;
;  	 unsigned char flag;
; //	 write_buffer1(chip_cs,0,yyj02);
; 	 while(1)
; 	 {
	.dbline 113
; 	 flag=read_status();
	xcall _read_status
	mov R20,R16
	.dbline 114
; 	 if((flag&0x80)==0x80)
	mov R24,R20
	andi R24,128
	cpi R24,128
	brne L45
	.dbline 115
; 	 break;
	xjmp L44
L45:
	.dbline 116
L43:
	.dbline 111

⌨️ 快捷键说明

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