📄 cs5522.s
字号:
.module Cs5522.c
.area text(rom, con, rel)
.dbfile C:\icc\project\cs5532\Cs5522.c
.dbfunc s Se_Cs_W _Se_Cs_W fI
; Cs_i -> R20
; Cs_Tem -> R22
; Cs_Word -> R10
.even
_Se_Cs_W::
rcall push_gset3
mov R10,R16
.dbline -1
.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;
.dbline 19
; unsigned char Cs_i=8;
ldi R20,8
rjmp L3
L2:
.dbline 21
; while(Cs_i)
; {
.dbline 22
; Cs_Tem=Cs_Word;
mov R22,R10
.dbline 23
; Cs_Tem=Cs_Tem>>(Cs_i-1);
mov R17,R20
subi R17,1
mov R16,R22
rcall lsr8
mov R22,R16
.dbline 24
; Cs_Tem&=0b00000001;
andi R22,1
.dbline 25
; if(Cs_Tem)
tst R22
breq L5
.dbline 26
; {PORTB=PORTB|sdi;}
.dbline 26
sbi 0x18,3
.dbline 26
rjmp L6
L5:
.dbline 28
; else
; {PORTB=PORTB&~sdi;}
.dbline 28
cbi 0x18,3
.dbline 28
L6:
.dbline 29
sbi 0x15,0
.dbline 30
cbi 0x15,0
.dbline 31
dec R20
.dbline 32
L3:
.dbline 20
tst R20
brne L2
.dbline -2
.dbline 33
; PORTC=PORTC|sclk;//clock=1.
; PORTC=PORTC&(~sclk);//clock=0
; Cs_i--;
; }
; }
L1:
rcall pop_gset3
.dbline 0 ; func end
ret
.dbsym r Cs_i 20 c
.dbsym r Cs_Tem 22 c
.dbsym r Cs_Word 10 c
.dbfunc s ReadW _ReadW fI
; Read_Temp02 -> R20
; Read_i -> R22
; Read_Temp01 -> R10
.even
_ReadW::
rcall push_gset3
.dbline -1
.dbline 38
;
; //***********************************
; //读一个字节。
; unsigned char ReadW()
; {
.dbline 40
; unsigned char Read_Temp01,Read_Temp02,Read_i;
; Read_i=8;
ldi R22,8
.dbline 41
; Read_Temp01=0;
clr R10
.dbline 42
; Read_Temp02=0;
clr R20
rjmp L9
L8:
.dbline 44
.dbline 45
in R10,0x16
.dbline 46
sbi 0x15,0
.dbline 47
cbi 0x15,0
.dbline 48
mov R24,R10
andi R24,16
mov R10,R24
.dbline 49
swap R24
andi R24,#0x0F
mov R10,R24
.dbline 50
mov R17,R22
subi R17,1
mov R16,R10
rcall lsl8
mov R10,R16
.dbline 51
add R20,R10
.dbline 52
dec R22
.dbline 53
L9:
.dbline 43
; while(Read_i)
tst R22
brne L8
.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);
mov R16,R20
clr R17
.dbline -2
L7:
rcall pop_gset3
.dbline 0 ; func end
ret
.dbsym r Read_Temp02 20 c
.dbsym r Read_i 22 c
.dbsym r Read_Temp01 10 c
.dbfunc s Sen_Rec _Sen_Rec fI
; comaw -> R20
.even
_Sen_Rec::
rcall push_gset1
mov R20,R16
.dbline -1
.dbline 61
;
;
; }
; //***********************************
; //写1字节读3字节。
; void Sen_Rec(unsigned char comaw)
; {
.dbline 62
; DDRC=DDRC|cs;
sbi 0x14,1
.dbline 63
; DDRC=DDRC|sclk;
sbi 0x14,0
.dbline 64
; DDRB=DDRB|sdi;
sbi 0x17,3
.dbline 65
; DDRB=DDRB&~sdo;
cbi 0x17,4
.dbline 66
; PORTB|=sdo;//选择为输入
sbi 0x18,4
.dbline 67
; PORTC=PORTC&~cs; //片选
cbi 0x15,1
.dbline 68
; Se_Cs_W(comaw);
mov R16,R20
rcall _Se_Cs_W
.dbline 69
; data[2]=ReadW();
rcall _ReadW
mov R2,R16
mov R3,R17
sts _data+2,R2
.dbline 70
; data[1]=ReadW();
rcall _ReadW
mov R2,R16
mov R3,R17
sts _data+1,R2
.dbline 71
; data[0]=ReadW();
rcall _ReadW
mov R2,R16
mov R3,R17
sts _data,R2
.dbline 72
; PORTC=PORTC|cs;
sbi 0x15,1
.dbline -2
.dbline 73
; }
L11:
rcall pop_gset1
.dbline 0 ; func end
ret
.dbsym r comaw 20 c
.dbfunc s F_Word _F_Word fI
; write4 -> y+6
; write3 -> y+4
; write2 -> R20
; write1 -> R22
.even
_F_Word::
rcall push_gset2
mov R20,R18
mov R22,R16
.dbline -1
.dbline 77
; //************************************
; //直接写4字节。
; void F_Word(unch write1,unch write2,unch write3,unch write4)
; { DDRC=DDRC|cs;
.dbline 77
sbi 0x14,1
.dbline 78
; DDRC=DDRC|sclk;
sbi 0x14,0
.dbline 79
; DDRB=DDRB|sdi;
sbi 0x17,3
.dbline 80
; PORTC=PORTC&~cs; //片选
cbi 0x15,1
.dbline 81
; PORTB|=sdi;
sbi 0x18,3
.dbline 82
; Se_Cs_W(write1);
mov R16,R22
rcall _Se_Cs_W
.dbline 83
; Se_Cs_W(write2);
mov R16,R20
rcall _Se_Cs_W
.dbline 84
; Se_Cs_W(write3);
ldd R16,y+4
rcall _Se_Cs_W
.dbline 85
; Se_Cs_W(write4);
ldd R16,y+6
rcall _Se_Cs_W
.dbline 86
; PORTC=PORTC|cs;
sbi 0x15,1
.dbline -2
.dbline 88
;
; }
L14:
rcall pop_gset2
.dbline 0 ; func end
ret
.dbsym l write4 6 c
.dbsym l write3 4 c
.dbsym r write2 20 c
.dbsym r write1 22 c
.dbfunc s ADC _ADC fI
; ADCtemp -> R20
.even
_ADC::
rcall push_gset1
mov R20,R16
.dbline -1
.dbline 91
; //***********************************
; void ADC(unsigned char ADCtemp)
; {
.dbline 93
;
; DDRC=DDRC|cs;
sbi 0x14,1
.dbline 94
; DDRC=DDRC|sclk;
sbi 0x14,0
.dbline 95
; DDRB=DDRB|sdi;
sbi 0x17,3
.dbline 96
; DDRB=DDRB&~sdo;
cbi 0x17,4
.dbline 97
; PORTB|=sdo;//选择为输入
sbi 0x18,4
.dbline 98
; PORTC=PORTC&~cs; //片选
cbi 0x15,1
.dbline 99
; Se_Cs_W(ADCtemp);
mov R16,R20
rcall _Se_Cs_W
.dbline 100
; PORTC=PORTC|cs;
sbi 0x15,1
.dbline -2
.dbline 102
;
; }
L15:
rcall pop_gset1
.dbline 0 ; func end
ret
.dbsym r ADCtemp 20 c
.dbfunc s ReceiveData _ReceiveData fI
; ReceiveTemp -> R20
.even
_ReceiveData::
rcall push_gset1
.dbline -1
.dbline 106
; //**********************************
; //接收CS5522的数据:
; void ReceiveData(void)
; {
.dbline 108
; unsigned char ReceiveTemp;
; DDRB=DDRB&~sdo;
cbi 0x17,4
.dbline 109
; PORTB|=sdo;//选择为输入
sbi 0x18,4
.dbline 110
; DDRC=DDRC|cs;
sbi 0x14,1
.dbline 111
; PORTC=PORTC&~cs; //片选
cbi 0x15,1
.dbline 112
; DDRC=DDRC|sclk;
sbi 0x14,0
.dbline 113
; PORTC=PORTC|sclk;
sbi 0x15,0
L17:
.dbline 115
; do
; {
.dbline 116
; ReceiveTemp=PINB;
in R20,0x16
.dbline 117
; ReceiveTemp=ReceiveTemp&sdo;
andi R20,16
.dbline 118
; }
L18:
.dbline 119
; while(ReceiveTemp);
tst R20
brne L17
.dbline 120
; data[2]=ReadW();
rcall _ReadW
mov R2,R16
mov R3,R17
sts _data+2,R2
.dbline 121
; data[2]=ReadW();
rcall _ReadW
mov R2,R16
mov R3,R17
sts _data+2,R2
.dbline 122
; data[1]=ReadW();
rcall _ReadW
mov R2,R16
mov R3,R17
sts _data+1,R2
.dbline 123
; data[0]=ReadW();
rcall _ReadW
mov R2,R16
mov R3,R17
sts _data,R2
.dbline 124
; PORTC=PORTC|cs;
sbi 0x15,1
.dbline -2
.dbline 125
; }
L16:
rcall pop_gset1
.dbline 0 ; func end
ret
.dbsym r ReceiveTemp 20 c
.dbfunc s initserial _initserial fI
; Init_Tem -> R20
.even
_initserial::
rcall push_gset1
.dbline -1
.dbline 129
; //***********************************
; //起动串口。
; void initserial(void)
; {
.dbline 130
; unsigned char Init_Tem=15;
ldi R20,15
.dbline 131
; DDRC=DDRC|cs;
sbi 0x14,1
.dbline 132
; DDRC=DDRC|sclk;
sbi 0x14,0
.dbline 133
; PORTC=PORTC&~cs;
cbi 0x15,1
.dbline 134
; DDRB=DDRB|sdi;
sbi 0x17,3
rjmp L25
L24:
.dbline 136
.dbline 137
ldi R16,255
rcall _Se_Cs_W
.dbline 138
dec R20
.dbline 139
L25:
.dbline 135
; while(Init_Tem)
tst R20
brne L24
.dbline 140
; {
; Se_Cs_W(0xff);
; Init_Tem--;
; }
; Se_Cs_W(0xfe);
ldi R16,254
rcall _Se_Cs_W
.dbline 141
; PORTC=PORTC|cs;
sbi 0x15,1
.dbline -2
.dbline 142
; }
L23:
rcall pop_gset1
.dbline 0 ; func end
ret
.dbsym r Init_Tem 20 c
.dbfunc s InitCs _InitCs fI
; InitTemp -> R20
.even
_InitCs::
rcall push_gset1
sbiw R28,3
.dbline -1
.dbline 146
; //***********************************
; //配置CS5522
; void InitCs(void)
; {
.dbline 149
;
; unsigned char InitTemp;
; initserial(); //起动串口。
rcall _initserial
.dbline 153
; //===================设置配置寄存器=======================
; //配置RS位寄存器写一
; // distemp();
; F_Word(0x03,0x00,0x00,0x80); //直接写4字节
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -