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

📄 thermometer_icc.s

📁 AVRkaifashili.rar
💻 S
字号:
	.module Thermometer_ICC.c
	.area data(ram, con, rel)
_Table::
	.blkb 2
	.area idata
	.byte 63,6
	.area data(ram, con, rel)
	.blkb 2
	.area idata
	.byte 91,'O
	.area data(ram, con, rel)
	.blkb 2
	.area idata
	.byte 'f,'m
	.area data(ram, con, rel)
	.blkb 2
	.area idata
	.byte 125,7
	.area data(ram, con, rel)
	.blkb 2
	.area idata
	.byte 127,'o
	.area data(ram, con, rel)
	.dbfile J:\AVRpractice\BOOK\SPI\Thermometer_ICC.c
	.dbsym e Table _Table A[10:10]c
	.area text(rom, con, rel)
	.dbfile J:\AVRpractice\BOOK\SPI\Thermometer_ICC.c
	.dbfunc e DelayMs _DelayMs fV
;              j -> R20,R21
;              i -> R16,R17
	.even
_DelayMs::
	rcall push_gset1
	.dbline -1
	.dbline 12
; #include <IO8535V.h>
; #include <MACROS.H>
; #define uchar unsigned char
; #define uint  unsigned int
; uchar Table[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
; //SPI INTERFACE
; //sbit CE=PB^4;   置1:|0x10 ,置0:&0xef
; //sbit SDI=PB^5;  置1:|0x20 ,置0:&0xdf 
; //sbit SDO=PB^6;  置1:|0x40 ,置0:&0xbf
; //sbit SCLK=PB^7; 置1:|0x80 ,置0:&0x7f
; void DelayMs(uint i)
; {uint j;
	.dbline 13
;  for(;i!=0;i--)
	rjmp L5
L2:
	.dbline 14
	.dbline 14
	ldi R20,2000
	ldi R21,7
	rjmp L9
L6:
	.dbline 14
	.dbline 14
	.dbline 14
L7:
	.dbline 14
	subi R20,1
	sbci R21,0
L9:
	.dbline 14
	cpi R20,0
	cpc R20,R21
	brne L6
X0:
	.dbline 14
L3:
	.dbline 13
	subi R16,1
	sbci R17,0
L5:
	.dbline 13
	cpi R16,0
	cpc R16,R17
	brne L2
X1:
	.dbline -2
	.dbline 15
;    {for(j=2000;j!=0;j--) {;}}
; }
L1:
	rcall pop_gset1
	.dbline 0 ; func end
	ret
	.dbsym r j 20 i
	.dbsym r i 16 i
	.dbend
	.dbfunc e DelayNOP _DelayNOP fV
;              i -> R16
	.even
_DelayNOP::
	.dbline -1
	.dbline 18
; 
; void DelayNOP(uchar i)
; {for(;i!=0;i--)  
	.dbline 18
	rjmp L14
L11:
	.dbline 19
	.dbline 19
	nop
	.dbline 19
L12:
	.dbline 18
	dec R16
L14:
	.dbline 18
	tst R16
	brne L11
	.dbline -2
	.dbline 20
;     { NOP();}
; } 
L10:
	.dbline 0 ; func end
	ret
	.dbsym r i 16 c
	.dbend
	.dbfunc e Display _Display fV
;            sel -> R20
;              i -> R22
;              p -> R10,R11
	.even
_Display::
	rcall push_gset3
	mov R10,R16
	mov R11,R17
	.dbline -1
	.dbline 23
; 
; void Display(uchar *p)
; {uchar i,sel=0x01;
	.dbline 23
	ldi R20,1
	.dbline 24
;  for(i=0;i<4;i++)
	clr R22
	rjmp L19
L16:
	.dbline 25
	.dbline 25
	out 0x1b,R20
	.dbline 26
	mov R30,R22
	clr R31
	add R30,R10
	adc R31,R11
	ldd R30,z+0
	clr R31
	ldi R24,<_Table
	ldi R25,>_Table
	add R30,R24
	adc R31,R25
	ldd R2,z+0
	clr R3
	ldi R24,255
	ldi R25,0
	sub R24,R2
	sbc R25,R3
	out 0x15,R24
	.dbline 27
	ldi R16,2
	ldi R17,0
	rcall _DelayMs
	.dbline 28
	lsl R20
	.dbline 29
L17:
	.dbline 24
	inc R22
L19:
	.dbline 24
	cpi R22,4
	brlo L16
	.dbline -2
	.dbline 30
;   {PORTA=sel;
;    PORTC=0xff-Table[p[i]];
;    DelayMs(2);
;    sel=sel<<1;
;   }
; }
L15:
	rcall pop_gset3
	.dbline 0 ; func end
	ret
	.dbsym r sel 20 c
	.dbsym r i 22 c
	.dbsym r p 10 pc
	.dbend
	.dbfunc e Set_CE _Set_CE fV
;              i -> R16
	.even
_Set_CE::
	.dbline -1
	.dbline 33
; 
; void Set_CE(uchar i)
; {if(i==1) PORTB=PORTB|0x10;
	.dbline 33
	cpi R16,1
	brne L21
	.dbline 33
	sbi 0x18,4
L21:
	.dbline 34
	tst R16
	brne L23
	.dbline 34
	in R24,0x18
	andi R24,239
	out 0x18,R24
L23:
	.dbline -2
	.dbline 34
;  if(i==0) PORTB=PORTB&0xef;}
L20:
	.dbline 0 ; func end
	ret
	.dbsym r i 16 c
	.dbend
	.dbfunc e Set_SDI _Set_SDI fV
;              i -> R16
	.even
_Set_SDI::
	.dbline -1
	.dbline 37
;  
; void Set_SDI(uchar i)
; {if(i==1) PORTB=PORTB|0x20;
	.dbline 37
	cpi R16,1
	brne L26
	.dbline 37
	sbi 0x18,5
L26:
	.dbline 38
	tst R16
	brne L28
	.dbline 38
	in R24,0x18
	andi R24,223
	out 0x18,R24
L28:
	.dbline -2
	.dbline 38
;  if(i==0) PORTB=PORTB&0xdf;}
L25:
	.dbline 0 ; func end
	ret
	.dbsym r i 16 c
	.dbend
	.dbfunc e Set_SCLK _Set_SCLK fV
;              i -> R16
	.even
_Set_SCLK::
	.dbline -1
	.dbline 41
;  
; void Set_SCLK(uchar i)
; {if(i==1) PORTB=PORTB|0x80;
	.dbline 41
	cpi R16,1
	brne L31
	.dbline 41
	sbi 0x18,7
L31:
	.dbline 42
	tst R16
	brne L33
	.dbline 42
	in R24,0x18
	andi R24,127
	out 0x18,R24
L33:
	.dbline -2
	.dbline 42
;  if(i==0) PORTB=PORTB&0x7f;}
L30:
	.dbline 0 ; func end
	ret
	.dbsym r i 16 c
	.dbend
	.dbfunc e SPI_Init _SPI_Init fV
	.even
_SPI_Init::
	.dbline -1
	.dbline 45
; 
; void SPI_Init(void)
; {Set_CE(0);//CE=0;//Disable Chip_Select
	.dbline 45
	clr R16
	rcall _Set_CE
	.dbline 46
;  Set_SCLK(1);//SCLK=1;//Clock Polarity(CPOL)=1
	ldi R16,1
	.dbline -2
	.dbline 47
; }
L35:
	.dbline 0 ; func end
	rjmp _Set_SCLK
	.dbend
	.dbfunc e SPI_Process _SPI_Process fV
;              i -> R22
;             p2 -> R20,R21
;             p1 -> R22,R23
	.even
_SPI_Process::
	rcall push_gset2
	mov R20,R18
	mov R21,R19
	mov R22,R16
	mov R23,R17
	.dbline -1
	.dbline 50
; 
; void SPI_Process(uchar *p1,uchar *p2)
; {uchar i;
	.dbline 51
;  p2[0]=p1[0]/100;
	ldi R17,100
	mov R30,R22
	mov R31,R23
	ldd R16,z+0
	rcall div8u
	mov R30,R20
	mov R31,R21
	std z+0,R16
	.dbline 52
;  i=p1[0]%100;
	ldi R17,100
	mov R30,R22
	mov R31,R23
	ldd R16,z+0
	rcall mod8u
	mov R22,R16
	.dbline 53
;  p2[1]=i/10;
	ldi R17,10
	rcall div8u
	mov R30,R20
	mov R31,R21
	std z+1,R16
	.dbline 54
;  p2[2]=i-p2[1]*10;
	mov R30,R20
	mov R31,R21
	ldd R17,z+1
	ldi R16,10
	rcall mpy8s
	mov R2,R22
	sub R2,R16
	mov R30,R20
	mov R31,R21
	std z+2,R2
	.dbline 55
;  p2[3]=0;
	clr R2
	mov R30,R20
	mov R31,R21
	std z+3,R2
	.dbline -2
	.dbline 56
; }
L36:
	rcall pop_gset2
	.dbline 0 ; func end
	ret
	.dbsym r i 22 c
	.dbsym r p2 20 pc
	.dbsym r p1 22 pc
	.dbend
	.dbfunc e SPI_Write1Byte _SPI_Write1Byte fV
;              i -> R20
;           Data -> R22
;        Address -> R10
	.even
_SPI_Write1Byte::
	rcall push_gset3
	mov R22,R18
	mov R10,R16
	.dbline -1
	.dbline 59
; 
; void SPI_Write1Byte(uchar Address,uchar Data)
; {uchar i;
	.dbline 60
;  Set_SDI(0);//SDI=0;
	clr R16
	rcall _Set_SDI
	.dbline 61
;  Set_SCLK(1);//SCLK=1;//CPOL=1
	ldi R16,1
	rcall _Set_SCLK
	.dbline 62
;  Set_CE(1);//CE=1;//Enable Chip_Select
	ldi R16,1
	rcall _Set_CE
	.dbline 63
;  for(i=0;i<8;i++)             //送地址;
	clr R20
	rjmp L41
L38:
	.dbline 64
;    {Set_SCLK(0);//SCLK=0;//时钟恢复
	.dbline 64
	clr R16
	rcall _Set_SCLK
	.dbline 65
;     if(Address&0x80) Set_SDI(1);//SDI=1;//MSB first
	sbrs R10,7
	rjmp L42
	.dbline 65
	ldi R16,1
	rcall _Set_SDI
	rjmp L43
L42:
	.dbline 66
; 	else       Set_SDI(0);//SDI=0;
	clr R16
	rcall _Set_SDI
L43:
	.dbline 67
	lsl R10
	.dbline 68
	ldi R16,1
	rcall _Set_SCLK
	.dbline 69
	ldi R16,30
	rcall _DelayNOP
	.dbline 69
L39:
	.dbline 63
	inc R20
L41:
	.dbline 63
	cpi R20,8
	brlo L38
	.dbline 70
; 	Address=Address<<1;//左移
;     Set_SCLK(1);//SCLK=1;//上升沿完成,锁存
;     DelayNOP(30);}
;  for(i=0;i<8;i++)             //送地址;
	clr R20
	rjmp L47
L44:
	.dbline 71
;    {Set_SCLK(0);//SCLK=0;//时钟恢复
	.dbline 71
	clr R16
	rcall _Set_SCLK
	.dbline 72
;     if(Data&0x80) Set_SDI(1);//SDI=1;//MSB first
	sbrs R22,7
	rjmp L48
	.dbline 72
	ldi R16,1
	rcall _Set_SDI
	rjmp L49
L48:
	.dbline 73
; 	else       Set_SDI(0);//SDI=0;
	clr R16
	rcall _Set_SDI
L49:
	.dbline 74
	lsl R22
	.dbline 75
	ldi R16,1
	rcall _Set_SCLK
	.dbline 76
	ldi R16,30
	rcall _DelayNOP
	.dbline 76
L45:
	.dbline 70
	inc R20
L47:
	.dbline 70
	cpi R20,8
	brlo L44
	.dbline 77
; 	Data=Data<<1;//左移
;     Set_SCLK(1);//SCLK=1;//上升沿完成,锁存
;     DelayNOP(30);}
;   Set_CE(0);//CE=0;
	clr R16
	rcall _Set_CE
	.dbline -2
	.dbline 78
; } 
L37:
	rcall pop_gset3
	.dbline 0 ; func end
	ret
	.dbsym r i 20 c
	.dbsym r Data 22 c
	.dbsym r Address 10 c
	.dbend
	.dbfunc e SPI_Read1Byte _SPI_Read1Byte fc
;           temp -> R20
;              i -> R22
;        Address -> R10
	.even
_SPI_Read1Byte::
	rcall push_gset3
	mov R10,R16
	.dbline -1
	.dbline 81
; 
; uchar SPI_Read1Byte(uchar Address)
; {uchar i,temp;
	.dbline 83
;  //SDO=1;
;  Set_SCLK(1);//SCLK=1;//CPOL=1
	ldi R16,1
	rcall _Set_SCLK
	.dbline 84
;  Set_CE(1);//CE=1;//Enable Chip_Select
	ldi R16,1
	rcall _Set_CE
	.dbline 85
;  for(i=0;i<8;i++)             //送地址;
	clr R22
	rjmp L54
L51:
	.dbline 86
;    {Set_SCLK(0);//SCLK=0;//时钟恢复
	.dbline 86
	clr R16
	rcall _Set_SCLK
	.dbline 87
;     if(Address&0x80) Set_SDI(1);//SDI=1;//MSB first
	sbrs R10,7
	rjmp L55
	.dbline 87
	ldi R16,1
	rcall _Set_SDI
	rjmp L56
L55:
	.dbline 88
; 	else       Set_SDI(0);//SDI=0;
	clr R16
	rcall _Set_SDI
L56:
	.dbline 89
	lsl R10
	.dbline 90
	ldi R16,1
	rcall _Set_SCLK
	.dbline 91
	ldi R16,30
	rcall _DelayNOP
	.dbline 91
L52:
	.dbline 85
	inc R22
L54:
	.dbline 85
	cpi R22,8
	brlo L51
	.dbline 92
; 	Address=Address<<1;//左移
;     Set_SCLK(1);//SCLK=1;//上升沿完成,锁存
;     DelayNOP(30);}
;  for(i=0;i<8;i++)
	clr R22
	rjmp L60
L57:
	.dbline 93
;    {Set_SCLK(0);//SCLK=0;//提供一个下降沿接收一位数据
	.dbline 93
	clr R16
	rcall _Set_SCLK
	.dbline 94
;     temp=temp<<1;
	lsl R20
	.dbline 95
;     DelayNOP(30);
	ldi R16,30
	rcall _DelayNOP
	.dbline 96
; 	if(PINB&0x40) temp=temp|0x01;
	sbis 0x16,6
	rjmp L61
	.dbline 96
	ori R20,1
L61:
	.dbline 98
	ldi R16,1
	rcall _Set_SCLK
	.dbline 99
	ldi R16,30
	rcall _DelayNOP
	.dbline 99
L58:
	.dbline 92
	inc R22
L60:
	.dbline 92
	cpi R22,8
	brlo L57
	.dbline 100
; 	//if(SDO) temp=temp|0x01;//采样
; 	Set_SCLK(1);//SCLK=1;//时钟恢复
;     DelayNOP(30);}
;  Set_CE(0);//CE=0;//Disbale Chip_Select
	clr R16
	rcall _Set_CE
	.dbline 101
;  return(temp);
	mov R16,R20
	.dbline -2
L50:
	rcall pop_gset3
	.dbline 0 ; func end
	ret
	.dbsym r temp 20 c
	.dbsym r i 22 c
	.dbsym r Address 10 c
	.dbend
	.dbfunc e main _main fV
;              i -> <dead>
;           Temp -> y+2
;      Read_Temp -> y+0
	.even
_main::
	sbiw R28,6
	.dbline -1
	.dbline 105
; }
; 
; void main(void)
; {uchar Read_Temp[2];
	.dbline 108
;  uchar Temp[4];
;  uchar i;
;  DDRA=0xff;
	ldi R24,255
	out 0x1a,R24
	.dbline 109
;  DDRC=0xff;
	out 0x14,R24
	.dbline 110
;  DDRB=0xbf;
	ldi R24,191
	out 0x17,R24
	.dbline 111
;  PORTA=0xff;
	ldi R24,255
	out 0x1b,R24
	.dbline 112
;  PORTC=0x00;
	clr R2
	out 0x15,R2
	.dbline 113
;  DelayMs(2500);
	ldi R16,2500
	ldi R17,9
	rcall _DelayMs
	.dbline 114
;  PORTC=0xff;
	ldi R24,255
	out 0x15,R24
	.dbline 115
;  SPI_Init();
	rcall _SPI_Init
	.dbline 116
;  SPI_Write1Byte(0x80,0xf0);//1 1 1 1SHOT R2 R1 R0 SD,8bit sampling
	ldi R18,240
	ldi R16,128
	rcall _SPI_Write1Byte
	rjmp L65
L64:
	.dbline 119
	.dbline 119
	ldi R16,1
	rcall _SPI_Read1Byte
	std y+1,R16
	.dbline 120
	ldi R16,2
	rcall _SPI_Read1Byte
	std y+0,R16
	.dbline 121
	mov R18,R28
	mov R19,R29
	subi R18,254  ; offset = 2
	sbci R19,255
	mov R16,R28
	mov R17,R29
	rcall _SPI_Process
	.dbline 123
	mov R16,R28
	mov R17,R29
	subi R16,254  ; offset = 2
	sbci R17,255
	rcall _Display
	.dbline 124
L65:
	.dbline 118
	rjmp L64
X2:
	.dbline -2
	.dbline 125
;                    //1 1 1 1     0  0  0  0//SD=0 indicate continuous convertion   
;  while(1)
;   {Read_Temp[1]=SPI_Read1Byte(0x01);//Low Byte
;    Read_Temp[0]=SPI_Read1Byte(0x02);//Hign Byte
;    SPI_Process(Read_Temp,Temp);
;    //DelayMs(250);
;    Display(Temp);
;   }
; }
L63:
	adiw R28,6
	.dbline 0 ; func end
	ret
	.dbsym l i 1 c
	.dbsym l Temp 2 A[4:4]c
	.dbsym l Read_Temp 0 A[2:2]c
	.dbend

⌨️ 快捷键说明

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