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

📄 display.lis

📁 前段时间做的一个东西,用的24位高精度AD转换芯片CS5532和12DA转换器max531的AVR驱动.芯片用的是ATMEGA8515,开发环境ICCAVR.CS5532的内部寄存器太多,设置有些复杂
💻 LIS
字号:
                         .module Display.c
                         .area lit(rom, con, rel)
 0000                 _DisTab::
 0000 3F06              .byte 63,6
 0002 5B4F              .byte 91,'O
 0004 666D              .byte 'f,'m
 0006 7D07              .byte 125,7
 0008 7F6F              .byte 127,'o
 000A 7940              .byte 'y,64
 000C 00                .byte 0
 000D                   .dbfile C:\icc\project\cs5532\Display.c
 000D                   .dbsym s DisTab _DisTab A[13:13]c
                         .area text(rom, con, rel)
 0000                   .dbfile C:\icc\project\cs5532\Display.c
 0000                   .dbfunc s Display _Display fI
                       ;           Disi -> R20
                       ;         DisTem -> R22
                       ;         DisNum -> R10
                         .even
 0000                 _Display::
 0000 00D0              rcall push_gset3
 0002 A02E              mov R10,R16
 0004                   .dbline -1
 0004                   .dbline 29
                       ; #include<io8515.h> 
                       ; //***************************************************
                       ; //显示子程序,用于显示一个数字,小数点在最高位。
                       ; //传递一个0-9的数字  
                       ; //DisPort——显示的端口。DisPortD——端口方向。
                       ; //DisTab[10]——显示码(const unsigned char)
                       ; //74ls4093三个输入口 str,dada,clock  
                       ; //and3=str+data+clock. 
                       ; //**************************************************
                       ; //P0  data
                       ; //P1  clock
                       ; //P2   TRO
                       ; //STR-PB0   CLOCK-PB1   DATA-PB2
                       ; #define  DisPort   PORTB
                       ; #define  DisDdr    DDRB
                       ; #define  str       0b00000100
                       ; #define  data      0b00000001
                       ; #define  clock     0b00000010
                       ; #define  and3      0b00000111
                       ; 
                       ; //===============================================================
                       ; unsigned char num[4];
                       ; //最后三条为"E""-""全灭"
                       ; const unsigned char DisTab[13]={ 0x3f,0x6,0x5b,0x4f,0x66,
                       ;                                   0x6d,0x7d,0x7,0x7f,0x6f,0x79,0x40,0x00};
                       ;                                    
                       ; //=============================================================== 
                       ; void Display(unsigned char DisNum)
                       ; {  unsigned char DisTem;
 0004                   .dbline 30
                       ;    unsigned char Disi=8;
 0004 48E0              ldi R20,8
 0006                   .dbline 31
                       ;    DisTem= DisNum;
 0006 6A2D              mov R22,R10
 0008                   .dbline 32
                       ;    DisTem=DisTem&0b01111111;
 0008 6F77              andi R22,127
 000A                   .dbline 33
                       ;    DisTem=DisTab[DisTem];
 000A 80E0              ldi R24,<_DisTab
 000C 90E0              ldi R25,>_DisTab
 000E 262E              mov R2,R22
 0010 3324              clr R3
 0012 280E              add R2,R24
 0014 391E              adc R3,R25
 0016 E22D              mov R30,R2
 0018 F32D              mov R31,R3
 001A C895              lpm
 001C 602D              mov R22,R0
 001E                   .dbline 34
                       ;    DisNum=DisNum&0b10000000;
 001E 8A2D              mov R24,R10
 0020 8078              andi R24,128
 0022 A82E              mov R10,R24
 0024                   .dbline 35
                       ;    DisNum=DisNum|DisTem;
 0024 A62A              or R10,R22
 0026                   .dbline 36
                       ;    DisNum=~DisNum;
 0026 A094              com R10
 0028                   .dbline 37
                       ;    DisDdr=and3;
 0028 87E0              ldi R24,7
 002A 87BB              out 0x17,R24
 002C                   .dbline 38
                       ;    DisPort=DisPort|str;//set str=1      
 002C C29A              sbi 0x18,2
 002E 10C0              rjmp L3
 0030                 L2:
 0030                   .dbline 40
                       ;     while(Disi)
                       ;        {DisTem=DisNum;
 0030                   .dbline 40
 0030 6A2D              mov R22,R10
 0032                   .dbline 41
                       ;         DisPort=DisPort&~clock;//clock=0
 0032 C198              cbi 0x18,1
 0034                   .dbline 42
                       ;         DisTem=DisTem>>(Disi-1);
 0034 142F              mov R17,R20
 0036 1150              subi R17,1
 0038 062F              mov R16,R22
 003A 00D0              rcall lsr8
 003C 602F              mov R22,R16
 003E                   .dbline 43
                       ;         DisTem=DisTem&0b00000001;
 003E 6170              andi R22,1
 0040                   .dbline 44
                       ;         if(DisTem==1)
 0040 6130              cpi R22,1
 0042 19F4              brne L5
 0044                   .dbline 45
                       ;               {DisPort=DisPort|data;
 0044                   .dbline 45
 0044 C09A              sbi 0x18,0
 0046                   .dbline 46
                       ;                DisPort=DisPort|clock;}
 0046 C19A              sbi 0x18,1
 0048                   .dbline 46
 0048 02C0              rjmp L6
 004A                 L5:
 004A                   .dbline 48
                       ;         else
                       ;               {DisPort=DisPort&~data;
 004A                   .dbline 48
 004A C098              cbi 0x18,0
 004C                   .dbline 49
                       ;                DisPort=DisPort|clock;}            
 004C C19A              sbi 0x18,1
 004E                   .dbline 49
 004E                 L6:
 004E                   .dbline 50
 004E 4A95              dec R20
 0050                   .dbline 51
 0050                 L3:
 0050                   .dbline 39
 0050 4423              tst R20
 0052 71F7              brne L2
 0054                   .dbline -2
 0054                   .dbline 52
                       ;         Disi--;
                       ;         }   
                       ; }   
 0054                 L1:
 0054 00D0              rcall pop_gset3
 0056                   .dbline 0 ; func end
 0056 0895              ret
 0058                   .dbsym r Disi 20 c
 0058                   .dbsym r DisTem 22 c
 0058                   .dbsym r DisNum 10 c
                         .area lit(rom, con, rel)
 000D                 L8:
 000D 0000              .byte 0,0
 000F 0000              .byte 0,0
                         .area text(rom, con, rel)
 0058                   .dbfile C:\icc\project\cs5532\Display.c
 0058                   .dbfunc s Cacu_Display _Cacu_Display fI
                       ;            num -> y+0
                       ;       Cacu_num -> R20,R21
                       ;        tempCaL -> R22
                       ;        tempCaH -> R20
                         .even
 0058                 _Cacu_Display::
 0058 00D0              rcall push_gset2
 005A 622F              mov R22,R18
 005C 402F              mov R20,R16
 005E 2497              sbiw R28,4
 0060                   .dbline -1
 0060                   .dbline 57
                       ; //=============================================================
                       ; //***************************************************************
                       ; //计算显示一个不带小数点的数
                       ; void Cacu_Display(unsigned char tempCaH,unsigned char tempCaL)
                       ; {  
 0060                   .dbline 60
                       ;    
                       ;    unsigned int Cacu_num;
                       ;    unsigned char num[4]={0,0,0,0};
 0060 80E0              ldi R24,<L8
 0062 90E0              ldi R25,>L8
 0064 EC2F              mov R30,R28
 0066 FD2F              mov R31,R29
 0068 04E0              ldi R16,4
 006A 10E0              ldi R17,0
 006C FA93              st -y,R31
 006E EA93              st -y,R30
 0070 9A93              st -y,R25
 0072 8A93              st -y,R24
 0074 00D0              rcall asgncblk
 0076                   .dbline 61
                       ;    Cacu_num=tempCaH*256+tempCaL;      
 0076 262E              mov R2,R22
 0078 3324              clr R3
 007A 442E              mov R4,R20
 007C 5524              clr R5
 007E 542C              mov R5,R4
 0080 4424              clr R4
 0082 420C              add R4,R2
 0084 531C              adc R5,R3
 0086 442D              mov R20,R4
 0088 552D              mov R21,R5
 008A 05C0              rjmp L10
 008C                 L9:
 008C                   .dbline 63
 008C                   .dbline 64
 008C 4051              subi R20,16
 008E 5742              sbci R21,39
 0090                   .dbline 65
 0090 8B81              ldd R24,y+3
 0092 8F5F              subi R24,255    ; addi 1
 0094 8B83              std y+3,R24
 0096                   .dbline 66
 0096                 L10:
 0096                   .dbline 62
                       ;    while(Cacu_num>=10000)
 0096 4031              cpi R20,16
 0098 E7E2              ldi R30,39
 009A 5E07              cpc R21,R30
 009C B8F7              brsh L9
 009E 05C0              rjmp L15
 00A0                 L14:
 00A0                   .dbline 68
 00A0                   .dbline 69
 00A0 485E              subi R20,232
 00A2 5340              sbci R21,3
 00A4                   .dbline 70
 00A4 8A81              ldd R24,y+2
 00A6 8F5F              subi R24,255    ; addi 1
 00A8 8A83              std y+2,R24
 00AA                   .dbline 71
 00AA                 L15:
 00AA                   .dbline 67
                       ;              {
                       ;                Cacu_num=Cacu_num-10000;                              
                       ;                num[3]=num[3]+1;
                       ;              }
                       ;    while(Cacu_num>=1000)
 00AA 483E              cpi R20,232
 00AC E3E0              ldi R30,3
 00AE 5E07              cpc R21,R30
 00B0 B8F7              brsh L14
 00B2 05C0              rjmp L20
 00B4                 L19:
 00B4                   .dbline 73
 00B4                   .dbline 74
 00B4 4456              subi R20,100
 00B6 5040              sbci R21,0
 00B8                   .dbline 75
 00B8 8981              ldd R24,y+1
 00BA 8F5F              subi R24,255    ; addi 1
 00BC 8983              std y+1,R24
 00BE                   .dbline 76
 00BE                 L20:
 00BE                   .dbline 72
                       ;              {
                       ;               Cacu_num=Cacu_num-1000;
                       ;               num[2]=num[2]+1;
                       ;              }
                       ;    while(Cacu_num>=100)
 00BE 4436              cpi R20,100
 00C0 E0E0              ldi R30,0
 00C2 5E07              cpc R21,R30
 00C4 B8F7              brsh L19
 00C6 05C0              rjmp L25
 00C8                 L24:
 00C8                   .dbline 78
 00C8                   .dbline 79
 00C8 4A50              subi R20,10
 00CA 5040              sbci R21,0
 00CC                   .dbline 80
 00CC 8881              ldd R24,y+0
 00CE 8F5F              subi R24,255    ; addi 1
 00D0 8883              std y+0,R24
 00D2                   .dbline 81
 00D2                 L25:
 00D2                   .dbline 77
                       ;              {
                       ;                Cacu_num=Cacu_num-100;
                       ;                num[1]=num[1]+1;
                       ;              } 
                       ;    while(Cacu_num>=10)
 00D2 4A30              cpi R20,10
 00D4 E0E0              ldi R30,0
 00D6 5E07              cpc R21,R30
 00D8 B8F7              brsh L24
 00DA                   .dbline 83
                       ;              {
                       ;                Cacu_num=Cacu_num-10;
                       ;                num[0]=num[0]+1;
                       ;              }  
                       ;                      
                       ;    Display(12); 
 00DA 0CE0              ldi R16,12
 00DC 91DF              rcall _Display
 00DE                   .dbline 84
                       ;    Display(12); 
 00DE 0CE0              ldi R16,12
 00E0 8FDF              rcall _Display
 00E2                   .dbline 85
                       ;    Display(12); 
 00E2 0CE0              ldi R16,12
 00E4 8DDF              rcall _Display
 00E6                   .dbline 86
                       ;    Display(Cacu_num); 
 00E6 042F              mov R16,R20
 00E8 8BDF              rcall _Display
 00EA                   .dbline 87
                       ;    Display(num[0]);
 00EA 0881              ldd R16,y+0
 00EC 89DF              rcall _Display
 00EE                   .dbline 88
                       ;    Display(num[1]);               
 00EE 0981              ldd R16,y+1
 00F0 87DF              rcall _Display
 00F2                   .dbline 89
                       ;    Display(num[2]);
 00F2 0A81              ldd R16,y+2
 00F4 85DF              rcall _Display
 00F6                   .dbline 90
                       ;    Display(num[3]);   
 00F6 0B81              ldd R16,y+3
 00F8 83DF              rcall _Display
 00FA                   .dbline 91
                       ;    Display(12); 
 00FA 0CE0              ldi R16,12
 00FC 81DF              rcall _Display
 00FE                   .dbline 92
                       ;    Display(12); 
 00FE 0CE0              ldi R16,12
 0100 7FDF              rcall _Display
 0102                   .dbline 93
                       ;    Display(12); 
 0102 0CE0              ldi R16,12
 0104 7DDF              rcall _Display
 0106                   .dbline 94
                       ;    Display(12);  
 0106 0CE0              ldi R16,12
 0108 7BDF              rcall _Display
 010A                   .dbline -2
 010A                   .dbline 96
                       ;    
                       ; }
 010A                 L7:
 010A 2496              adiw R28,4
 010C 00D0              rcall pop_gset2
 010E                   .dbline 0 ; func end
 010E 0895              ret
 0110                   .dbsym l num 0 A[4:4]c
 0110                   .dbsym r Cacu_num 20 i
 0110                   .dbsym r tempCaL 22 c
 0110                   .dbsym r tempCaH 20 c
                         .area bss(ram, con, rel)
 0000                   .dbfile C:\icc\project\cs5532\Display.c
 0000                 _num::
 0000                   .blkb 4
 0004                   .dbsym s num _num A[4:4]c

⌨️ 快捷键说明

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