📄 cs5522.lis
字号:
.module Cs5522.c
.area text(rom, con, rel)
0000 .dbfile C:\icc\project\cs5532\Cs5522.c
0000 .dbfunc s Se_Cs_W _Se_Cs_W fI
; Cs_i -> R20
; Cs_Tem -> R22
; Cs_Word -> R10
.even
0000 _Se_Cs_W::
0000 00D0 rcall push_gset3
0002 A02E mov R10,R16
0004 .dbline -1
0004 .dbline 18
; #include<io8515.h>
; //**************************************************
; //PC1-CS5522_CS PC0-CS5522_SCLK PB4-CS5522_SDO
; //PB3-CS5522_SDI
; //****************************************************
; #define cs 0b00000010
; #define sclk 0b00000001
; #define sdi 0b00001000
; #define sdo 0b00010000
; //************************************
; #define unch unsigned char
; //*************************************
; unsigned char data[3]; //receive cs5522's number;
; void Cacu_Display(unsigned char temp);
; //***********************************
; //向CS5522发送一个字节
; void Se_Cs_W(unsigned char Cs_Word)
; { unsigned char Cs_Tem;
0004 .dbline 19
; unsigned char Cs_i=8;
0004 48E0 ldi R20,8
0006 0FC0 rjmp L3
0008 L2:
0008 .dbline 21
; while(Cs_i)
; {
0008 .dbline 22
; Cs_Tem=Cs_Word;
0008 6A2D mov R22,R10
000A .dbline 23
; Cs_Tem=Cs_Tem>>(Cs_i-1);
000A 142F mov R17,R20
000C 1150 subi R17,1
000E 062F mov R16,R22
0010 00D0 rcall lsr8
0012 602F mov R22,R16
0014 .dbline 24
; Cs_Tem&=0b00000001;
0014 6170 andi R22,1
0016 .dbline 25
; if(Cs_Tem)
0016 6623 tst R22
0018 11F0 breq L5
001A .dbline 26
; {PORTB=PORTB|sdi;}
001A .dbline 26
001A C39A sbi 0x18,3
001C .dbline 26
001C 01C0 rjmp L6
001E L5:
001E .dbline 28
; else
; {PORTB=PORTB&~sdi;}
001E .dbline 28
001E C398 cbi 0x18,3
0020 .dbline 28
0020 L6:
0020 .dbline 29
0020 A89A sbi 0x15,0
0022 .dbline 30
0022 A898 cbi 0x15,0
0024 .dbline 31
0024 4A95 dec R20
0026 .dbline 32
0026 L3:
0026 .dbline 20
0026 4423 tst R20
0028 79F7 brne L2
002A .dbline -2
002A .dbline 33
; PORTC=PORTC|sclk;//clock=1.
; PORTC=PORTC&(~sclk);//clock=0
; Cs_i--;
; }
; }
002A L1:
002A 00D0 rcall pop_gset3
002C .dbline 0 ; func end
002C 0895 ret
002E .dbsym r Cs_i 20 c
002E .dbsym r Cs_Tem 22 c
002E .dbsym r Cs_Word 10 c
002E .dbfunc s ReadW _ReadW fI
; Read_Temp02 -> R20
; Read_i -> R22
; Read_Temp01 -> R10
.even
002E _ReadW::
002E 00D0 rcall push_gset3
0030 .dbline -1
0030 .dbline 38
;
; //***********************************
; //读一个字节。
; unsigned char ReadW()
; {
0030 .dbline 40
; unsigned char Read_Temp01,Read_Temp02,Read_i;
; Read_i=8;
0030 68E0 ldi R22,8
0032 .dbline 41
; Read_Temp01=0;
0032 AA24 clr R10
0034 .dbline 42
; Read_Temp02=0;
0034 4427 clr R20
0036 10C0 rjmp L9
0038 L8:
0038 .dbline 44
0038 .dbline 45
0038 A6B2 in R10,0x16
003A .dbline 46
003A A89A sbi 0x15,0
003C .dbline 47
003C A898 cbi 0x15,0
003E .dbline 48
003E 8A2D mov R24,R10
0040 8071 andi R24,16
0042 A82E mov R10,R24
0044 .dbline 49
0044 8295 swap R24
0046 8F70 andi R24,#0x0F
0048 A82E mov R10,R24
004A .dbline 50
004A 162F mov R17,R22
004C 1150 subi R17,1
004E 0A2D mov R16,R10
0050 00D0 rcall lsl8
0052 A02E mov R10,R16
0054 .dbline 51
0054 4A0D add R20,R10
0056 .dbline 52
0056 6A95 dec R22
0058 .dbline 53
0058 L9:
0058 .dbline 43
; while(Read_i)
0058 6623 tst R22
005A 71F7 brne L8
005C .dbline 54
; {
; Read_Temp01=PINB;
; PORTC=PORTC|sclk;
; PORTC=PORTC&~sclk;
; Read_Temp01=Read_Temp01&sdo;
; Read_Temp01=Read_Temp01>>4;
; Read_Temp01=Read_Temp01<<(Read_i-1);
; Read_Temp02=Read_Temp02+Read_Temp01;
; Read_i--;
; }
; return(Read_Temp02);
005C 042F mov R16,R20
005E 1127 clr R17
0060 .dbline -2
0060 L7:
0060 00D0 rcall pop_gset3
0062 .dbline 0 ; func end
0062 0895 ret
0064 .dbsym r Read_Temp02 20 c
0064 .dbsym r Read_i 22 c
0064 .dbsym r Read_Temp01 10 c
0064 .dbfunc s Sen_Rec _Sen_Rec fI
; comaw -> R20
.even
0064 _Sen_Rec::
0064 00D0 rcall push_gset1
0066 402F mov R20,R16
0068 .dbline -1
0068 .dbline 61
;
;
; }
; //***********************************
; //写1字节读3字节。
; void Sen_Rec(unsigned char comaw)
; {
0068 .dbline 62
; DDRC=DDRC|cs;
0068 A19A sbi 0x14,1
006A .dbline 63
; DDRC=DDRC|sclk;
006A A09A sbi 0x14,0
006C .dbline 64
; DDRB=DDRB|sdi;
006C BB9A sbi 0x17,3
006E .dbline 65
; DDRB=DDRB&~sdo;
006E BC98 cbi 0x17,4
0070 .dbline 66
; PORTB|=sdo;//选择为输入
0070 C49A sbi 0x18,4
0072 .dbline 67
; PORTC=PORTC&~cs; //片选
0072 A998 cbi 0x15,1
0074 .dbline 68
; Se_Cs_W(comaw);
0074 042F mov R16,R20
0076 C4DF rcall _Se_Cs_W
0078 .dbline 69
; data[2]=ReadW();
0078 DADF rcall _ReadW
007A 202E mov R2,R16
007C 312E mov R3,R17
007E 20920200 sts _data+2,R2
0082 .dbline 70
; data[1]=ReadW();
0082 D5DF rcall _ReadW
0084 202E mov R2,R16
0086 312E mov R3,R17
0088 20920100 sts _data+1,R2
008C .dbline 71
; data[0]=ReadW();
008C D0DF rcall _ReadW
008E 202E mov R2,R16
0090 312E mov R3,R17
0092 20920000 sts _data,R2
0096 .dbline 72
; PORTC=PORTC|cs;
0096 A99A sbi 0x15,1
0098 .dbline -2
0098 .dbline 73
; }
0098 L11:
0098 00D0 rcall pop_gset1
009A .dbline 0 ; func end
009A 0895 ret
009C .dbsym r comaw 20 c
009C .dbfunc s F_Word _F_Word fI
; write4 -> y+6
; write3 -> y+4
; write2 -> R20
; write1 -> R22
.even
009C _F_Word::
009C 00D0 rcall push_gset2
009E 422F mov R20,R18
00A0 602F mov R22,R16
00A2 .dbline -1
00A2 .dbline 77
; //************************************
; //直接写4字节。
; void F_Word(unch write1,unch write2,unch write3,unch write4)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -