📄 cs5522.lst
字号:
00D4 E00C LDI R16,0xC
00D5 DF8F RCALL _Display
(0084) Display(12);
00D6 E00C LDI R16,0xC
00D7 DF8D RCALL _Display
(0085) Display(Cacu_num);
00D8 2F04 MOV R16,R20
00D9 DF8B RCALL _Display
(0086) Display(num[0]);
00DA 8108 LDD R16,0+Y
00DB DF89 RCALL _Display
(0087) Display(num[1]);
00DC 8109 LDD R16,1+Y
00DD DF87 RCALL _Display
(0088) Display(num[2]);
00DE 810A LDD R16,2+Y
00DF DF85 RCALL _Display
(0089) Display(num[3]);
00E0 810B LDD R16,3+Y
00E1 DF83 RCALL _Display
(0090) Display(12);
00E2 E00C LDI R16,0xC
00E3 DF81 RCALL _Display
(0091) Display(12);
00E4 E00C LDI R16,0xC
00E5 DF7F RCALL _Display
(0092) Display(12);
00E6 E00C LDI R16,0xC
00E7 DF7D RCALL _Display
(0093) Display(12);
00E8 E00C LDI R16,0xC
00E9 DF7B RCALL _Display
(0094)
(0095) }
00EA 9624 ADIW R28,4
00EB D1E1 RCALL pop_gset2
00EC 9508 RET
_Se_Cs_W:
Cs_i --> R20
Cs_Tem --> R22
Cs_Word --> R10
00ED D1DC RCALL push_gset3
00EE 2EA0 MOV R10,R16
FILE: C:\icc\project\cs5532\Cs5522.c
(0000) #include<io8515.h>
(0001) //**************************************************
(0002) //PC1-CS5522_CS PC0-CS5522_SCLK PB4-CS5522_SDO
(0003) //PB3-CS5522_SDI
(0004) //****************************************************
(0005) #define cs 0b00000010
(0006) #define sclk 0b00000001
(0007) #define sdi 0b00001000
(0008) #define sdo 0b00010000
(0009) //************************************
(0010) #define unch unsigned char
(0011) //*************************************
(0012) unsigned char data[3]; //receive cs5522's number;
(0013) void Cacu_Display(unsigned char temp);
(0014) //***********************************
(0015) //向CS5522发送一个字节
(0016) void Se_Cs_W(unsigned char Cs_Word)
(0017) { unsigned char Cs_Tem;
(0018) unsigned char Cs_i=8;
00EF E048 LDI R20,0x8
00F0 C00F RJMP 0x0100
(0019) while(Cs_i)
(0020) {
(0021) Cs_Tem=Cs_Word;
00F1 2D6A MOV R22,R10
(0022) Cs_Tem=Cs_Tem>>(Cs_i-1);
00F2 2F14 MOV R17,R20
00F3 5011 SUBI R17,1
00F4 2F06 MOV R16,R22
00F5 D1FA RCALL lsr8
00F6 2F60 MOV R22,R16
(0023) Cs_Tem&=0b00000001;
00F7 7061 ANDI R22,1
(0024) if(Cs_Tem)
00F8 2366 TST R22
00F9 F011 BEQ 0x00FC
(0025) {PORTB=PORTB|sdi;}
00FA 9AC3 SBI P18,3
00FB C001 RJMP 0x00FD
(0026) else
(0027) {PORTB=PORTB&~sdi;}
00FC 98C3 CBI P18,3
(0028) PORTC=PORTC|sclk;//clock=1.
00FD 9AA8 SBI P15,0
(0029) PORTC=PORTC&(~sclk);//clock=0
00FE 98A8 CBI P15,0
(0030) Cs_i--;
00FF 954A DEC R20
(0031) }
0100 2344 TST R20
0101 F779 BNE 0x00F1
(0032) }
0102 D1CC RCALL pop_gset3
0103 9508 RET
_ReadW:
Read_Temp02 --> R20
Read_i --> R22
Read_Temp01 --> R10
0104 D1C5 RCALL push_gset3
(0033)
(0034) //***********************************
(0035) //读一个字节。
(0036) unsigned char ReadW()
(0037) {
(0038) unsigned char Read_Temp01,Read_Temp02,Read_i;
(0039) Read_i=8;
0105 E068 LDI R22,0x8
(0040) Read_Temp01=0;
0106 24AA CLR R10
(0041) Read_Temp02=0;
0107 2744 CLR R20
0108 C010 RJMP 0x0119
(0042) while(Read_i)
(0043) {
(0044) Read_Temp01=PINB;
0109 B2A6 IN R10,P16
(0045) PORTC=PORTC|sclk;
010A 9AA8 SBI P15,0
(0046) PORTC=PORTC&~sclk;
010B 98A8 CBI P15,0
(0047) Read_Temp01=Read_Temp01&sdo;
010C 2D8A MOV R24,R10
010D 7180 ANDI R24,0x10
010E 2EA8 MOV R10,R24
(0048) Read_Temp01=Read_Temp01>>4;
010F 9582 SWAP R24
0110 708F ANDI R24,0xF
0111 2EA8 MOV R10,R24
(0049) Read_Temp01=Read_Temp01<<(Read_i-1);
0112 2F16 MOV R17,R22
0113 5011 SUBI R17,1
0114 2D0A MOV R16,R10
0115 D1D4 RCALL lsl8
0116 2EA0 MOV R10,R16
(0050) Read_Temp02=Read_Temp02+Read_Temp01;
0117 0D4A ADD R20,R10
(0051) Read_i--;
0118 956A DEC R22
(0052) }
0119 2366 TST R22
011A F771 BNE 0x0109
(0053) return(Read_Temp02);
011B 2F04 MOV R16,R20
011C 2711 CLR R17
011D D1B1 RCALL pop_gset3
011E 9508 RET
_Sen_Rec:
comaw --> R20
011F D190 RCALL push_gset1
0120 2F40 MOV R20,R16
(0054)
(0055)
(0056) }
(0057) //***********************************
(0058) //写1字节读3字节。
(0059) void Sen_Rec(unsigned char comaw)
(0060) {
(0061) DDRC=DDRC|cs;
0121 9AA1 SBI P14,1
(0062) DDRC=DDRC|sclk;
0122 9AA0 SBI P14,0
(0063) DDRB=DDRB|sdi;
0123 9ABB SBI P17,3
(0064) DDRB=DDRB&~sdo;
0124 98BC CBI P17,4
(0065) PORTB|=sdo;//选择为输入
0125 9AC4 SBI P18,4
(0066) PORTC=PORTC&~cs; //片选
0126 98A9 CBI P15,1
(0067) Se_Cs_W(comaw);
0127 2F04 MOV R16,R20
0128 DFC4 RCALL _Se_Cs_W
(0068) data[2]=ReadW();
0129 DFDA RCALL _ReadW
012A 2E20 MOV R2,R16
012B 2E31 MOV R3,R17
012C 92200066 STS R2,_data+2
(0069) data[1]=ReadW();
012E DFD5 RCALL _ReadW
012F 2E20 MOV R2,R16
0130 2E31 MOV R3,R17
0131 92200065 STS R2,_data+1
(0070) data[0]=ReadW();
0133 DFD0 RCALL _ReadW
0134 2E20 MOV R2,R16
0135 2E31 MOV R3,R17
0136 92200064 STS R2,_data
(0071) PORTC=PORTC|cs;
0138 9AA9 SBI P15,1
(0072) }
0139 D179 RCALL pop_gset1
013A 9508 RET
_F_Word:
write4 --> Y+6
write3 --> Y+4
write2 --> R20
write1 --> R22
013B D18B RCALL push_gset2
013C 2F42 MOV R20,R18
013D 2F60 MOV R22,R16
(0073) //************************************
(0074) //直接写4字节。
(0075) void F_Word(unch write1,unch write2,unch write3,unch write4)
(0076) { DDRC=DDRC|cs;
013E 9AA1 SBI P14,1
(0077) DDRC=DDRC|sclk;
013F 9AA0 SBI P14,0
(0078) DDRB=DDRB|sdi;
0140 9ABB SBI P17,3
(0079) PORTC=PORTC&~cs; //片选
0141 98A9 CBI P15,1
(0080) PORTB|=sdi;
0142 9AC3 SBI P18,3
(0081) Se_Cs_W(write1);
0143 2F06 MOV R16,R22
0144 DFA8 RCALL _Se_Cs_W
(0082) Se_Cs_W(write2);
0145 2F04 MOV R16,R20
0146 DFA6 RCALL _Se_Cs_W
(0083) Se_Cs_W(write3);
0147 810C LDD R16,4+Y
0148 DFA4 RCALL _Se_Cs_W
(0084) Se_Cs_W(write4);
0149 810E LDD R16,6+Y
014A DFA2 RCALL _Se_Cs_W
(0085) PORTC=PORTC|cs;
014B 9AA9 SBI P15,1
(0086)
(0087) }
014C D180 RCALL pop_gset2
014D 9508 RET
_ADC:
ADCtemp --> R20
014E D161 RCALL push_gset1
014F 2F40 MOV R20,R16
(0088) //***********************************
(0089) void ADC(unsigned char ADCtemp)
(0090) {
(0091)
(0092) DDRC=DDRC|cs;
0150 9AA1 SBI P14,1
(0093) DDRC=DDRC|sclk;
0151 9AA0 SBI P14,0
(0094) DDRB=DDRB|sdi;
0152 9ABB SBI P17,3
(0095) DDRB=DDRB&~sdo;
0153 98BC CBI P17,4
(0096) PORTB|=sdo;//选择为输入
0154 9AC4 SBI P18,4
(0097) PORTC=PORTC&~cs; //片选
0155 98A9 CBI P15,1
(0098) Se_Cs_W(ADCtemp);
0156 2F04 MOV R16,R20
0157 DF95 RCALL _Se_Cs_W
(0099) PORTC=PORTC|cs;
0158 9AA9 SBI P15,1
(0100)
(0101) }
0159 D159 RCALL pop_gset1
015A 9508 RET
_ReceiveData:
ReceiveTemp --> R20
015B D154 RCALL push_gset1
(0102) //**********************************
(0103) //接收CS5522的数据:
(0104) void ReceiveData(void)
(0105) {
(0106) unsigned char ReceiveTemp;
(0107) DDRB=DDRB&~sdo;
015C 98BC CBI P17,4
(0108) PORTB|=sdo;//选择为输入
015D 9AC4 SBI P18,4
(0109) DDRC=DDRC|cs;
015E 9AA1 SBI P14,1
(0110) PORTC=PORTC&~cs; //片选
015F 98A9 CBI P15,1
(0111) DDRC=DDRC|sclk;
0160 9AA0 SBI P14,0
(0112) PORTC=PORTC|sclk;
0161 9AA8 SBI P15,0
(0113) do
(0114) {
(0115) ReceiveTemp=PINB;
0162 B346 IN R20,P16
(0116) ReceiveTemp=ReceiveTemp&sdo;
0163 7140 ANDI R20,0x10
(0117) }
(0118) while(ReceiveTemp);
0164 2344 TST R20
0165 F7E1 BNE 0x0162
(0119) data[2]=ReadW();
0166 DF9D RCALL _ReadW
0167 2E20 MOV R2,R16
0168 2E31 MOV R3,R17
0169 92200066 STS R2,_data+2
(0120) data[2]=ReadW();
016B DF98 RCALL _ReadW
016C 2E20 MOV R2,R16
016D 2E31 MOV R3,R17
016E 92200066 STS R2,_data+2
(0121) data[1]=ReadW();
0170 DF93 RCALL _ReadW
0171 2E20 MOV R2,R16
0172 2E31 MOV R3,R17
0173 92200065 STS R2,_data+1
(0122) data[0]=ReadW();
0175 DF8E RCALL _ReadW
0176 2E20 MOV R2,R16
0177 2E31 MOV R3,R17
0178 92200064 STS R2,_data
(0123) PORTC=PORTC|cs;
017A 9AA9 SBI P15,1
(0124) }
017B D137 RCALL pop_gset1
017C 9508 RET
_initserial:
Init_Tem --> R20
017D D132 RCALL push_gset1
(0125) //***********************************
(0126) //起动串口。
(0127) void initserial(void)
(0128) {
(0129) unsigned char Init_Tem=15;
017E E04F LDI R20,0xF
(0130) DDRC=DDRC|cs;
017F 9AA1 SBI P14,1
(0131) DDRC=DDRC|sclk;
0180 9AA0 SBI P14,0
(0132) PORTC=PORTC&~cs;
0181 98A9 CBI P15,1
(0133) DDRB=DDRB|sdi;
0182 9ABB SBI P17,3
0183 C003 RJMP 0x0187
(0134) while(Init_Tem)
(0135) {
(0136) Se_Cs_W(0xff);
0184 EF0F LDI R16,0xFF
0185 DF67 RCALL _Se_Cs_W
(0137) Init_Tem--;
0186 954A DEC R20
(0138) }
0187 2344 TST R20
0188 F7D9 BNE 0x0184
(0139) Se_Cs_W(0xfe);
0189 EF0E LDI R16,0xFE
018A DF62 RCALL _Se_Cs_W
(0140) PORTC=PORTC|cs;
018B 9AA9 SBI P15,1
(0141) }
018C D126 RCALL pop_gset1
018D 9508 RET
_InitCs:
InitTemp --> R20
018E D121 RCALL push_gset1
018F 9723 SBIW R28,3
(0142) //***********************************
(0143) //配置CS5522
(0144) void InitCs(void)
(0145) {
(0146)
(0147) unsigned char InitTemp;
(0148) initserial(); //起动串口。
0190 DFEC RCALL _initserial
(0149) //===================设置配置寄存器=======================
(0150) //配置RS位寄存器写一
(0151) // distemp();
(0152) F_Word(0x03,0x00,0x00,0x80); //直接写4字节
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -