📄 cs5522.lst
字号:
__text_start:
__start:
0016 E5CF LDI R28,0x5F
0017 E0D2 LDI R29,2
0018 BFCD OUT P3D,R28
0019 BFDE OUT P3E,R29
001A 51C0 SUBI R28,0x10
001B 40D0 SBCI R29,0
001C EA0A LDI R16,0xAA
001D 8308 STD R16,0+Y
001E 2400 CLR R0
001F E6E0 LDI R30,0x60
0020 E0F0 LDI R31,0
0021 E010 LDI R17,0
0022 38E5 CPI R30,0x85
0023 07F1 CPC R31,R17
0024 F011 BEQ 0x0027
0025 9201 ST R0,Z+
0026 CFFB RJMP 0x0022
0027 8300 STD R16,0+Z
0028 E2EB LDI R30,0x2B
0029 E0F0 LDI R31,0
002A E6A0 LDI R26,0x60
002B E0B0 LDI R27,0
002C E010 LDI R17,0
002D 32EB CPI R30,0x2B
002E 07F1 CPC R31,R17
002F F021 BEQ 0x0034
0030 95C8 LPM
0031 9631 ADIW R30,1
0032 920D ST R0,X+
0033 CFF9 RJMP 0x002D
0034 D001 RCALL _main
_exit:
0035 CFFF RJMP _exit
FILE: C:\icc\project\cs5532\main01.c
(0000) #include<io8515.h>
(0001) //**************************************
(0002) //**************************************************
(0003) //PC1-CS5522_CS PC0-CS5522_SCLK PB4-CS5522_SDO
(0004) //PB3-CS5522_SDI
(0005) //****************************************************
(0006) #define cs 0b00000010
(0007) #define sclk 0b00000001
(0008) #define sdi 0b00001000
(0009) #define sdo 0b00010000
(0010) //************************************
(0011) #define unch unsigned char
(0012) //*************************************
(0013)
(0014) extern unsigned char data[3]; //receive cs5522's number;
(0015) void Cacu_Display(unsigned char tempCaH,unsigned char tempCaL);
(0016) void ADC(unsigned char ADCtemp);
(0017) void F_Word(unch write1,unch write2,unch write3,unch write4);
(0018) void ReceiveData(void);
(0019)
(0020) void prosses(void);
(0021)
(0022)
(0023) void DAconvter(unsigned char DA_hight,unsigned char DA_low);
(0024) void InitCs(void);
(0025) main()
(0026) {
(0027) unsigned char main_i,main_j,main_k;
(0028) unsigned int main_int;
(0029) //DAconvter(0b00000000,0b10101111);
(0030)
(0031) main_i=70;
_main:
main_int --> Y+1
main_i --> R20
main_j --> R22
main_k --> R10
0036 E446 LDI R20,0x46
0037 C00C RJMP 0x0044
(0032) while(main_i)
(0033) { main_j=0xff;
0038 EF6F LDI R22,0xFF
0039 C007 RJMP 0x0041
(0034) while(main_j)
(0035) {
(0036) main_k=0xff;
003A EF8F LDI R24,0xFF
003B 2EA8 MOV R10,R24
003C C001 RJMP 0x003E
(0037) while(main_k)
(0038) {
(0039) main_k--;
003D 94AA DEC R10
(0040) }
003E 20AA TST R10
003F F7E9 BNE 0x003D
(0041) main_j--;
0040 956A DEC R22
(0042) }
0041 2366 TST R22
0042 F7B9 BNE 0x003A
(0043) main_i--;
0043 954A DEC R20
(0044) }
0044 2344 TST R20
0045 F791 BNE 0x0038
(0045) DAconvter(0b00001100,0b10101111);
0046 EA2F LDI R18,0xAF
0047 E00C LDI R16,0xC
0048 D18C RCALL _DAconvter
(0046) InitCs(); //cs5522初始化
0049 D144 RCALL _InitCs
004A C018 RJMP 0x0063
(0047)
(0048)
(0049) while(1)
(0050) {
(0051)
(0052) ADC(0x80);
004B E800 LDI R16,0x80
004C D101 RCALL _ADC
(0053) ReceiveData();//接收数据
004D D10D RCALL _ReceiveData
(0054) // prosses();
(0055) Cacu_Display(data[2],data[1]);
004E 91200065 LDS R18,_data+1
0050 91000066 LDS R16,_data+2
0052 D03E RCALL _Cacu_Display
(0056) //--------------------------
(0057) main_i=10;
0053 E04A LDI R20,0xA
0054 C00C RJMP 0x0061
(0058) while(main_i)
(0059) { main_j=0xff;
0055 EF6F LDI R22,0xFF
0056 C007 RJMP 0x005E
(0060) while(main_j)
(0061) {
(0062) main_k=0xff;
0057 EF8F LDI R24,0xFF
0058 2EA8 MOV R10,R24
0059 C001 RJMP 0x005B
(0063) while(main_k)
(0064) {
(0065) main_k--;
005A 94AA DEC R10
(0066) }
005B 20AA TST R10
005C F7E9 BNE 0x005A
(0067) main_j--;
005D 956A DEC R22
(0068) }
005E 2366 TST R22
005F F7B9 BNE 0x0057
(0069) main_i--;
0060 954A DEC R20
(0070) }
0061 2344 TST R20
0062 F791 BNE 0x0055
(0071) //-------------------------
(0072) }
0063 CFE7 RJMP 0x004B
(0073)
(0074) //----------------------------------
(0075)
(0076) //___________________________________________
(0077)
(0078)
(0079) //*****************************************
(0080) } 0064 9508 RET
_Display:
Disi --> R20
DisTem --> R22
DisNum --> R10
0065 D264 RCALL push_gset3
0066 2EA0 MOV R10,R16
FILE: C:\icc\project\cs5532\Display.c
(0000) #include<io8515.h>
(0001) //***************************************************
(0002) //显示子程序,用于显示一个数字,小数点在最高位。
(0003) //传递一个0-9的数字
(0004) //DisPort——显示的端口。DisPortD——端口方向。
(0005) //DisTab[10]——显示码(const unsigned char)
(0006) //74ls4093三个输入口 str,dada,clock
(0007) //and3=str+data+clock.
(0008) //**************************************************
(0009) //P0 data
(0010) //P1 clock
(0011) //P2 TRO
(0012) //STR-PB0 CLOCK-PB1 DATA-PB2
(0013) #define DisPort PORTB
(0014) #define DisDdr DDRB
(0015) #define str 0b00000100
(0016) #define data 0b00000001
(0017) #define clock 0b00000010
(0018) #define and3 0b00000111
(0019)
(0020) //===============================================================
(0021) unsigned char num[4];
(0022) //最后三条为"E""-""全灭"
(0023) const unsigned char DisTab[13]={ 0x3f,0x6,0x5b,0x4f,0x66,
(0024) 0x6d,0x7d,0x7,0x7f,0x6f,0x79,0x40,0x00};
(0025)
(0026) //===============================================================
(0027) void Display(unsigned char DisNum)
(0028) { unsigned char DisTem;
(0029) unsigned char Disi=8;
0067 E048 LDI R20,0x8
(0030) DisTem= DisNum;
0068 2D6A MOV R22,R10
(0031) DisTem=DisTem&0b01111111;
0069 776F ANDI R22,0x7F
(0032) DisTem=DisTab[DisTem];
006A E18A LDI R24,0x1A
006B E090 LDI R25,0
006C 2E26 MOV R2,R22
006D 2433 CLR R3
006E 0E28 ADD R2,R24
006F 1E39 ADC R3,R25
0070 2DE2 MOV R30,R2
0071 2DF3 MOV R31,R3
0072 95C8 LPM
0073 2D60 MOV R22,R0
(0033) DisNum=DisNum&0b10000000;
0074 2D8A MOV R24,R10
0075 7880 ANDI R24,0x80
0076 2EA8 MOV R10,R24
(0034) DisNum=DisNum|DisTem;
0077 2AA6 OR R10,R22
(0035) DisNum=~DisNum;
0078 94A0 COM R10
(0036) DisDdr=and3;
0079 E087 LDI R24,7
007A BB87 OUT P17,R24
(0037) DisPort=DisPort|str;//set str=1
007B 9AC2 SBI P18,2
007C C010 RJMP 0x008D
(0038) while(Disi)
(0039) {DisTem=DisNum;
007D 2D6A MOV R22,R10
(0040) DisPort=DisPort&~clock;//clock=0
007E 98C1 CBI P18,1
(0041) DisTem=DisTem>>(Disi-1);
007F 2F14 MOV R17,R20
0080 5011 SUBI R17,1
0081 2F06 MOV R16,R22
0082 D26D RCALL lsr8
0083 2F60 MOV R22,R16
(0042) DisTem=DisTem&0b00000001;
0084 7061 ANDI R22,1
(0043) if(DisTem==1)
0085 3061 CPI R22,1
0086 F419 BNE 0x008A
(0044) {DisPort=DisPort|data;
0087 9AC0 SBI P18,0
(0045) DisPort=DisPort|clock;}
0088 9AC1 SBI P18,1
0089 C002 RJMP 0x008C
(0046) else
(0047) {DisPort=DisPort&~data;
008A 98C0 CBI P18,0
(0048) DisPort=DisPort|clock;}
008B 9AC1 SBI P18,1
(0049) Disi--;
008C 954A DEC R20
(0050) }
008D 2344 TST R20
008E F771 BNE 0x007D
(0051) }
008F D23F RCALL pop_gset3
0090 9508 RET
_Cacu_Display:
num --> Y+0
Cacu_num --> R20
tempCaL --> R22
tempCaH --> R20
0091 D235 RCALL push_gset2
0092 2F62 MOV R22,R18
0093 2F40 MOV R20,R16
0094 9724 SBIW R28,4
(0052) //=============================================================
(0053) //***************************************************************
(0054) //计算显示一个不带小数点的数
(0055) void Cacu_Display(unsigned char tempCaH,unsigned char tempCaL)
(0056) {
(0057)
(0058) unsigned int Cacu_num;
(0059) unsigned char num[4]={0,0,0,0};
0095 E287 LDI R24,0x27
0096 E090 LDI R25,0
0097 2FEC MOV R30,R28
0098 2FFD MOV R31,R29
0099 E004 LDI R16,4
009A E010 LDI R17,0
009B 93FA ST R31,-Y
009C 93EA ST R30,-Y
009D 939A ST R25,-Y
009E 938A ST R24,-Y
009F D231 RCALL asgncblk
(0060) Cacu_num=tempCaH*256+tempCaL;
00A0 2E26 MOV R2,R22
00A1 2433 CLR R3
00A2 2E44 MOV R4,R20
00A3 2455 CLR R5
00A4 2C54 MOV R5,R4
00A5 2444 CLR R4
00A6 0C42 ADD R4,R2
00A7 1C53 ADC R5,R3
00A8 2D44 MOV R20,R4
00A9 2D55 MOV R21,R5
00AA C005 RJMP 0x00B0
(0061) while(Cacu_num>=10000)
(0062) {
(0063) Cacu_num=Cacu_num-10000;
00AB 5140 SUBI R20,0x10
00AC 4257 SBCI R21,0x27
(0064) num[3]=num[3]+1;
00AD 818B LDD R24,3+Y
00AE 5F8F SUBI R24,0xFF
00AF 838B STD R24,3+Y
(0065) }
00B0 3140 CPI R20,0x10
00B1 E2E7 LDI R30,0x27
00B2 075E CPC R21,R30
00B3 F7B8 BCC 0x00AB
00B4 C005 RJMP 0x00BA
(0066) while(Cacu_num>=1000)
(0067) {
(0068) Cacu_num=Cacu_num-1000;
00B5 5E48 SUBI R20,0xE8
00B6 4053 SBCI R21,3
(0069) num[2]=num[2]+1;
00B7 818A LDD R24,2+Y
00B8 5F8F SUBI R24,0xFF
00B9 838A STD R24,2+Y
(0070) }
00BA 3E48 CPI R20,0xE8
00BB E0E3 LDI R30,3
00BC 075E CPC R21,R30
00BD F7B8 BCC 0x00B5
00BE C005 RJMP 0x00C4
(0071) while(Cacu_num>=100)
(0072) {
(0073) Cacu_num=Cacu_num-100;
00BF 5644 SUBI R20,0x64
00C0 4050 SBCI R21,0
(0074) num[1]=num[1]+1;
00C1 8189 LDD R24,1+Y
00C2 5F8F SUBI R24,0xFF
00C3 8389 STD R24,1+Y
(0075) }
00C4 3644 CPI R20,0x64
00C5 E0E0 LDI R30,0
00C6 075E CPC R21,R30
00C7 F7B8 BCC 0x00BF
00C8 C005 RJMP 0x00CE
(0076) while(Cacu_num>=10)
(0077) {
(0078) Cacu_num=Cacu_num-10;
00C9 504A SUBI R20,0xA
00CA 4050 SBCI R21,0
(0079) num[0]=num[0]+1;
00CB 8188 LDD R24,0+Y
00CC 5F8F SUBI R24,0xFF
00CD 8388 STD R24,0+Y
(0080) }
00CE 304A CPI R20,0xA
00CF E0E0 LDI R30,0
00D0 075E CPC R21,R30
00D1 F7B8 BCC 0x00C9
(0081)
(0082) Display(12);
00D2 E00C LDI R16,0xC
00D3 DF91 RCALL _Display
(0083) Display(12);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -