📄 thermometer-c51.lis
字号:
.module Thermometer-C51.c
.area data(ram, con, rel)
0000 _Table::
0000 .blkb 2
.area idata
0000 3F06 .byte 63,6
.area data(ram, con, rel)
0002 .blkb 2
.area idata
0002 5B4F .byte 91,'O
.area data(ram, con, rel)
0004 .blkb 2
.area idata
0004 666D .byte 'f,'m
.area data(ram, con, rel)
0006 .blkb 2
.area idata
0006 7D07 .byte 125,7
.area data(ram, con, rel)
0008 .blkb 2
.area idata
0008 7F6F .byte 127,'o
.area data(ram, con, rel)
000A .dbfile J:\AVRpractice\BOOK\SPI\Thermometer-C51.c
000A .dbsym e Table _Table A[10:10]c
.area text(rom, con, rel)
0000 .dbfile J:\AVRpractice\BOOK\SPI\Thermometer-C51.c
0000 .dbfunc e DelayMs _DelayMs fV
0000 ; j -> R20,R21
0000 ; i -> R16,R17
.even
0000 _DelayMs::
0000 00D0 rcall push_gset1
0002 .dbline -1
0002 .dbline 12
0002 ; #include <IO8535V.h>
0002 ; #include <MACROS.H>
0002 ; #define uchar unsigned char
0002 ; #define uint unsigned int
0002 ; uchar Table[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
0002 ; //SPI INTERFACE
0002 ; //sbit CE=PD^4; 置1:|0x10 ,置0:&0xef
0002 ; //sbit SDI=PD^5; 置1:|0x20 ,置0:&0xdf
0002 ; //sbit SDO=PD^6; 置1:|0x40 ,置0:&0xbf
0002 ; //sbit SCLK=PD^7; 置1:|0x80 ,置0:&0x7f
0002 ; void DelayMs(uint i)
0002 ; {uint j;
0002 .dbline 13
0002 ; for(;i!=0;i--)
0002 0AC0 rjmp L5
0004 L2:
0004 .dbline 14
0004 .dbline 14
0004 40ED ldi R20,2000
0006 57E0 ldi R21,7
0008 02C0 rjmp L9
000A L6:
000A .dbline 14
000A .dbline 14
000A .dbline 14
000A L7:
000A .dbline 14
000A 4150 subi R20,1
000C 5040 sbci R21,0
000E L9:
000E .dbline 14
000E 4030 cpi R20,0
0010 4507 cpc R20,R21
0012 D9F7 brne L6
0014 X0:
0014 .dbline 14
0014 L3:
0014 .dbline 13
0014 0150 subi R16,1
0016 1040 sbci R17,0
0018 L5:
0018 .dbline 13
0018 0030 cpi R16,0
001A 0107 cpc R16,R17
001C 99F7 brne L2
001E X1:
001E .dbline -2
001E .dbline 15
001E ; {for(j=2000;j!=0;j--) {;}}
001E ; }
001E L1:
001E 00D0 rcall pop_gset1
0020 .dbline 0 ; func end
0020 0895 ret
0022 .dbsym r j 20 i
0022 .dbsym r i 16 i
0022 .dbend
0022 .dbfunc e DelayNOP _DelayNOP fV
0022 ; i -> R16
.even
0022 _DelayNOP::
0022 .dbline -1
0022 .dbline 18
0022 ;
0022 ; void DelayNOP(uchar i)
0022 ; {for(;i!=0;i--)
0022 .dbline 18
0022 02C0 rjmp L14
0024 L11:
0024 .dbline 19
0024 .dbline 19
0024 0000 nop
0026 .dbline 19
0026 L12:
0026 .dbline 18
0026 0A95 dec R16
0028 L14:
0028 .dbline 18
0028 0023 tst R16
002A E1F7 brne L11
002C .dbline -2
002C .dbline 20
002C ; { NOP();}
002C ; }
002C L10:
002C .dbline 0 ; func end
002C 0895 ret
002E .dbsym r i 16 c
002E .dbend
002E .dbfunc e Display _Display fV
002E ; sel -> R20
002E ; i -> R22
002E ; p -> R10,R11
.even
002E _Display::
002E 00D0 rcall push_gset3
0030 A02E mov R10,R16
0032 B12E mov R11,R17
0034 .dbline -1
0034 .dbline 23
0034 ;
0034 ; void Display(uchar *p)
0034 ; {uchar i,sel=0x01;
0034 .dbline 23
0034 41E0 ldi R20,1
0036 .dbline 24
0036 ; for(i=0;i<4;i++)
0036 6627 clr R22
0038 17C0 rjmp L19
003A L16:
003A .dbline 25
003A .dbline 25
003A 4BBB out 0x1b,R20
003C .dbline 26
003C E62F mov R30,R22
003E FF27 clr R31
0040 EA0D add R30,R10
0042 FB1D adc R31,R11
0044 E081 ldd R30,z+0
0046 FF27 clr R31
0048 80E0 ldi R24,<_Table
004A 90E0 ldi R25,>_Table
004C E80F add R30,R24
004E F91F adc R31,R25
0050 2080 ldd R2,z+0
0052 3324 clr R3
0054 8FEF ldi R24,255
0056 90E0 ldi R25,0
0058 8219 sub R24,R2
005A 9309 sbc R25,R3
005C 85BB out 0x15,R24
005E .dbline 27
005E 02E0 ldi R16,2
0060 10E0 ldi R17,0
0062 CEDF rcall _DelayMs
0064 .dbline 28
0064 440F lsl R20
0066 .dbline 29
0066 L17:
0066 .dbline 24
0066 6395 inc R22
0068 L19:
0068 .dbline 24
0068 6430 cpi R22,4
006A 38F3 brlo L16
006C .dbline -2
006C .dbline 30
006C ; {PORTA=sel;
006C ; PORTC=0xff-Table[p[i]];
006C ; DelayMs(2);
006C ; sel=sel<<1;
006C ; }
006C ; }
006C L15:
006C 00D0 rcall pop_gset3
006E .dbline 0 ; func end
006E 0895 ret
0070 .dbsym r sel 20 c
0070 .dbsym r i 22 c
0070 .dbsym r p 10 pc
0070 .dbend
0070 .dbfunc e Set_CE _Set_CE fV
0070 ; i -> R16
.even
0070 _Set_CE::
0070 .dbline -1
0070 .dbline 33
0070 ;
0070 ; void Set_CE(uchar i)
0070 ; {if(i==1) PORTD=PORTD|0x10;
0070 .dbline 33
0070 0130 cpi R16,1
0072 09F4 brne L21
0074 .dbline 33
0074 949A sbi 0x12,4
0076 L21:
0076 .dbline 34
0076 0023 tst R16
0078 19F4 brne L23
007A .dbline 34
007A 82B3 in R24,0x12
007C 8F7E andi R24,239
007E 82BB out 0x12,R24
0080 L23:
0080 .dbline -2
0080 .dbline 34
0080 ; if(i==0) PORTD=PORTD&0xef;}
0080 L20:
0080 .dbline 0 ; func end
0080 0895 ret
0082 .dbsym r i 16 c
0082 .dbend
0082 .dbfunc e Set_SDI _Set_SDI fV
0082 ; i -> R16
.even
0082 _Set_SDI::
0082 .dbline -1
0082 .dbline 37
0082 ;
0082 ; void Set_SDI(uchar i)
0082 ; {if(i==1) PORTD=PORTD|0x20;
0082 .dbline 37
0082 0130 cpi R16,1
0084 09F4 brne L26
0086 .dbline 37
0086 959A sbi 0x12,5
0088 L26:
0088 .dbline 38
0088 0023 tst R16
008A 19F4 brne L28
008C .dbline 38
008C 82B3 in R24,0x12
008E 8F7D andi R24,223
0090 82BB out 0x12,R24
0092 L28:
0092 .dbline -2
0092 .dbline 38
0092 ; if(i==0) PORTD=PORTD&0xdf;}
0092 L25:
0092 .dbline 0 ; func end
0092 0895 ret
0094 .dbsym r i 16 c
0094 .dbend
0094 .dbfunc e Set_SCLK _Set_SCLK fV
0094 ; i -> R16
.even
0094 _Set_SCLK::
0094 .dbline -1
0094 .dbline 41
0094 ;
0094 ; void Set_SCLK(uchar i)
0094 ; {if(i==1) PORTD=PORTD|0x80;
0094 .dbline 41
0094 0130 cpi R16,1
0096 09F4 brne L31
0098 .dbline 41
0098 979A sbi 0x12,7
009A L31:
009A .dbline 42
009A 0023 tst R16
009C 19F4 brne L33
009E .dbline 42
009E 82B3 in R24,0x12
00A0 8F77 andi R24,127
00A2 82BB out 0x12,R24
00A4 L33:
00A4 .dbline -2
00A4 .dbline 42
00A4 ; if(i==0) PORTD=PORTD&0x7f;}
00A4 L30:
00A4 .dbline 0 ; func end
00A4 0895 ret
00A6 .dbsym r i 16 c
00A6 .dbend
00A6 .dbfunc e SPI_Init _SPI_Init fV
.even
00A6 _SPI_Init::
00A6 .dbline -1
00A6 .dbline 45
00A6 ;
00A6 ; void SPI_Init(void)
00A6 ; {Set_CE(0);//CE=0;//Disable Chip_Select
00A6 .dbline 45
00A6 0027 clr R16
00A8 E3DF rcall _Set_CE
00AA .dbline 46
00AA ; Set_SCLK(1);//SCLK=1;//Clock Polarity(CPOL)=1
00AA 01E0 ldi R16,1
00AC .dbline -2
00AC .dbline 47
00AC ; }
00AC L35:
00AC .dbline 0 ; func end
00AC F3CF rjmp _Set_SCLK
00AE .dbend
00AE .dbfunc e SPI_Process _SPI_Process fV
00AE ; i -> R22
00AE ; p2 -> R20,R21
00AE ; p1 -> R22,R23
.even
00AE _SPI_Process::
00AE 00D0 rcall push_gset2
00B0 422F mov R20,R18
00B2 532F mov R21,R19
00B4 602F mov R22,R16
00B6 712F mov R23,R17
00B8 .dbline -1
00B8 .dbline 50
00B8 ;
00B8 ; void SPI_Process(uchar *p1,uchar *p2)
00B8 ; {uchar i;
00B8 .dbline 51
00B8 ; p2[0]=p1[0]/100;
00B8 14E6 ldi R17,100
00BA E62F mov R30,R22
00BC F72F mov R31,R23
00BE 0081 ldd R16,z+0
00C0 00D0 rcall div8u
00C2 E42F mov R30,R20
00C4 F52F mov R31,R21
00C6 0083 std z+0,R16
00C8 .dbline 52
00C8 ; i=p1[0]%100;
00C8 14E6 ldi R17,100
00CA E62F mov R30,R22
00CC F72F mov R31,R23
00CE 0081 ldd R16,z+0
00D0 00D0 rcall mod8u
00D2 602F mov R22,R16
00D4 .dbline 53
00D4 ; p2[1]=i/10;
00D4 1AE0 ldi R17,10
00D6 00D0 rcall div8u
00D8 E42F mov R30,R20
00DA F52F mov R31,R21
00DC 0183 std z+1,R16
00DE .dbline 54
00DE ; p2[2]=i-p2[1]*10;
00DE E42F mov R30,R20
00E0 F52F mov R31,R21
00E2 1181 ldd R17,z+1
00E4 0AE0 ldi R16,10
00E6 00D0 rcall mpy8s
00E8 262E mov R2,R22
00EA 201A sub R2,R16
00EC E42F mov R30,R20
00EE F52F mov R31,R21
00F0 2282 std z+2,R2
00F2 .dbline 55
00F2 ; p2[3]=0;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -