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

📄 max531.lis

📁 前段时间做的一个东西,用的24位高精度AD转换芯片CS5532和12DA转换器max531的AVR驱动.芯片用的是ATMEGA8515,开发环境ICCAVR.CS5532的内部寄存器太多,设置有些复杂
💻 LIS
字号:
                         .module max531.c
                         .area text(rom, con, rel)
 0000                   .dbfile C:\icc\project\cs5532\max531.c
 0000                   .dbfunc s DAtrans _DAtrans fI
                       ;          max_i -> R20
                       ;       max_temp -> R22
                       ;        DA_data -> R10
                         .even
 0000                 _DAtrans::
 0000 00D0              rcall push_gset3
 0002 A02E              mov R10,R16
 0004                   .dbline -1
 0004                   .dbline 13
                       ; #include<io8515.h> 
                       ; //*************************************
                       ; //PD3-MAX_CS   PD4-MAX_SCLK   PD5-MAX_DIN
                       ; //*************************************
                       ; #define  MAX_CS     0b00001000
                       ; #define  MAX_SCLK   0b00010000
                       ; #define  MAX_DIN    0b00100000
                       ; #define  MAX_DDR    DDRD
                       ; #define  MAX_ALL    0b00111000
                       ; #define  MAX_POART  PORTD
                       ; //*************************************
                       ; void DAtrans(unsigned char DA_data)
                       ;         { 
 0004                   .dbline 16
                       ;         
                       ;            unsigned char max_temp,max_i;           
                       ;            max_i=8;
 0004 48E0              ldi R20,8
 0006 10C0              rjmp L3
 0008                 L2:
 0008                   .dbline 18
                       ;            while(max_i)
                       ;                { 
 0008                   .dbline 19
                       ;                   max_temp=DA_data;
 0008 6A2D              mov R22,R10
 000A                   .dbline 20
                       ;                   max_temp=max_temp>>(max_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 21
                       ;                   max_temp=max_temp&0b00000001;
 0014 6170              andi R22,1
 0016                   .dbline 22
                       ;                   MAX_POART=MAX_POART&~MAX_SCLK;
 0016 9498              cbi 0x12,4
 0018                   .dbline 23
                       ;                   if(max_temp)
 0018 6623              tst R22
 001A 19F0              breq L5
 001C                   .dbline 24
                       ;                       {
 001C                   .dbline 25
                       ;                         MAX_POART=MAX_POART|MAX_DIN;
 001C 959A              sbi 0x12,5
 001E                   .dbline 26
                       ;                         MAX_POART=MAX_POART|MAX_SCLK;
 001E 949A              sbi 0x12,4
 0020                   .dbline 27
                       ;                       }
 0020 02C0              rjmp L6
 0022                 L5:
 0022                   .dbline 29
                       ;                   else
                       ;                       {
 0022                   .dbline 30
                       ;                         MAX_POART=MAX_POART&~MAX_DIN;
 0022 9598              cbi 0x12,5
 0024                   .dbline 31
                       ;                         MAX_POART=MAX_POART|MAX_SCLK;
 0024 949A              sbi 0x12,4
 0026                   .dbline 33
                       ;                       
                       ;                       }       
 0026                 L6:
 0026                   .dbline 35
 0026 4A95              dec R20
 0028                   .dbline 36
 0028                 L3:
 0028                   .dbline 17
 0028 4423              tst R20
 002A 71F7              brne L2
 002C                   .dbline -2
 002C                   .dbline 38
                       ;                   
                       ;                  max_i--;
                       ;                  }
                       ;             
                       ;             }
 002C                 L1:
 002C 00D0              rcall pop_gset3
 002E                   .dbline 0 ; func end
 002E 0895              ret
 0030                   .dbsym r max_i 20 c
 0030                   .dbsym r max_temp 22 c
 0030                   .dbsym r DA_data 10 c
 0030                   .dbfunc s DAconvter _DAconvter fI
                       ;         DA_low -> R20
                       ;       DA_hight -> R22
                         .even
 0030                 _DAconvter::
 0030 00D0              rcall push_gset2
 0032 422F              mov R20,R18
 0034 602F              mov R22,R16
 0036                   .dbline -1
 0036                   .dbline 41
                       ; //******************************************************
                       ; void DAconvter(unsigned char DA_hight,unsigned char DA_low)
                       ;             {
 0036                   .dbline 42
                       ;               DDRD=DDRD|MAX_ALL;
 0036 81B3              in R24,0x11
 0038 8863              ori R24,56
 003A 81BB              out 0x11,R24
 003C                   .dbline 43
                       ;               MAX_POART=MAX_POART&~MAX_CS;//cs=0
 003C 9398              cbi 0x12,3
 003E                   .dbline 44
                       ;               DAtrans(DA_hight);
 003E 062F              mov R16,R22
 0040 DFDF              rcall _DAtrans
 0042                   .dbline 45
                       ;               DAtrans(DA_low);
 0042 042F              mov R16,R20
 0044 DDDF              rcall _DAtrans
 0046                   .dbline 46
                       ;               MAX_POART=MAX_POART|MAX_CS;//cs=1
 0046 939A              sbi 0x12,3
 0048                   .dbline -2
 0048                   .dbline 47
                       ;             }           
 0048                 L7:
 0048 00D0              rcall pop_gset2
 004A                   .dbline 0 ; func end
 004A 0895              ret
 004C                   .dbsym r DA_low 20 c
 004C                   .dbsym r DA_hight 22 c

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -