⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cs5522.lis

📁 前段时间做的一个东西,用的24位高精度AD转换芯片CS5532和12DA转换器max531的AVR驱动.芯片用的是ATMEGA8515,开发环境ICCAVR.CS5532的内部寄存器太多,设置有些复杂
💻 LIS
📖 第 1 页 / 共 2 页
字号:
                         .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 + -