📄 display.lis
字号:
.module Display.c
.area text(rom, con, rel)
0000 .dbfile F:\IccAvr_Pro\Display.c
0000 .dbfunc e display _display fV
0000 ; DispContent -> R20,R21
0000 ; i -> R22
0000 ; gate -> R10
0000 ; content -> R12,R13
.even
0000 _display::
0000 0E940000 xcall push_gset5
0004 A22E mov R10,R18
0006 6801 movw R12,R16
0008 .dbline -1
0008 .dbline 7
0008 ; #include <iom16v.h>
0008 ; #include <macros.h>
0008 ;
0008 ; #include "Display.h"
0008 ;
0008 ; void display(unsigned int content,unsigned char gate)
0008 ; {
0008 .dbline 8
0008 ; unsigned int DispContent=0;
0008 4427 clr R20
000A 5527 clr R21
000C .dbline 10
000C ; unsigned char i;
000C ; for(i=0;i<4;i++) //gain the BCD code of the number
000C 6627 clr R22
000E 1CC0 xjmp L5
0010 L2:
0010 .dbline 11
0010 .dbline 12
0010 1A01 movw R2,R20
0012 3694 lsr R3
0014 2794 ror R2
0016 3694 lsr R3
0018 2794 ror R2
001A 3694 lsr R3
001C 2794 ror R2
001E 3694 lsr R3
0020 2794 ror R2
0022 A101 movw R20,R2
0024 .dbline 13
0024 2AE0 ldi R18,10
0026 30E0 ldi R19,0
0028 8601 movw R16,R12
002A 0E940000 xcall mod16u
002E 2CE0 ldi R18,12
0030 30E0 ldi R19,0
0032 0E940000 xcall lsl16
0036 402B or R20,R16
0038 512B or R21,R17
003A .dbline 14
003A 2AE0 ldi R18,10
003C 30E0 ldi R19,0
003E 8601 movw R16,R12
0040 0E940000 xcall div16u
0044 6801 movw R12,R16
0046 .dbline 15
0046 L3:
0046 .dbline 10
0046 6395 inc R22
0048 L5:
0048 .dbline 10
0048 6430 cpi R22,4
004A 10F3 brlo L2
004C .dbline 17
004C ; {
004C ; DispContent>>=4;
004C ; DispContent|=(content%10)<<12;
004C ; content=content/10;
004C ; }
004C ;
004C ; switch(gate)
004C EA2C mov R14,R10
004E FF24 clr R15
0050 EE20 tst R14
0052 11F4 brne X0
0054 FF20 tst R15
0056 71F0 breq L9
0058 X0:
0058 C701 movw R24,R14
005A 8130 cpi R24,1
005C E0E0 ldi R30,0
005E 9E07 cpc R25,R30
0060 59F0 breq L10
0062 8230 cpi R24,2
0064 E0E0 ldi R30,0
0066 9E07 cpc R25,R30
0068 49F0 breq L11
006A 8330 cpi R24,3
006C E0E0 ldi R30,0
006E 9E07 cpc R25,R30
0070 39F0 breq L12
0072 08C0 xjmp L6
0074 X1:
0074 .dbline 18
0074 ; {
0074 L9:
0074 .dbline 19
0074 ; case 0: PORTB&=~BIT(Gate0);break; //Open the gate
0074 C498 cbi 0x18,4
0076 .dbline 19
0076 09C0 xjmp L7
0078 L10:
0078 .dbline 20
0078 ; case 1: PORTB&=~BIT(Gate1);break;
0078 C598 cbi 0x18,5
007A .dbline 20
007A 07C0 xjmp L7
007C L11:
007C .dbline 21
007C ; case 2: PORTB&=~BIT(Gate2);break;
007C C698 cbi 0x18,6
007E .dbline 21
007E 05C0 xjmp L7
0080 L12:
0080 .dbline 22
0080 ; case 3: PORTB&=~BIT(Gate3);break;
0080 C798 cbi 0x18,7
0082 .dbline 22
0082 03C0 xjmp L7
0084 L6:
0084 .dbline 23
0084 ; default: PORTB|=0xF0;break;
0084 88B3 in R24,0x18
0086 806F ori R24,240
0088 88BB out 0x18,R24
008A .dbline 23
008A L7:
008A .dbline 25
008A ; }
008A ; for (i=0;i<=15;i++) //Send the number by serial
008A 6627 clr R22
008C 11C0 xjmp L16
008E L13:
008E .dbline 26
008E ; {
008E .dbline 27
008E ; PORTC|=BIT(DispClk);
008E AE9A sbi 0x15,6
0090 .dbline 28
0090 ; NOP();
0090 0000 nop
0092 .dbline 29
0092 ; NOP();
0092 0000 nop
0094 .dbline 30
0094 ; if(DispContent&0x01)
0094 40FF sbrs R20,0
0096 02C0 rjmp L17
0098 .dbline 31
0098 ; PORTC|=BIT(DispData);
0098 AF9A sbi 0x15,7
009A 01C0 xjmp L18
009C L17:
009C .dbline 33
009C ; else
009C ; PORTC&=~BIT(DispData);
009C AF98 cbi 0x15,7
009E L18:
009E .dbline 34
009E 0000 nop
00A0 .dbline 35
00A0 0000 nop
00A2 .dbline 36
00A2 0000 nop
00A4 .dbline 37
00A4 0000 nop
00A6 .dbline 38
00A6 8894 clc
00A8 .dbline 39
00A8 5695 lsr R21
00AA 4795 ror R20
00AC .dbline 40
00AC AE98 cbi 0x15,6
00AE .dbline 41
00AE L14:
00AE .dbline 25
00AE 6395 inc R22
00B0 L16:
00B0 .dbline 25
00B0 8FE0 ldi R24,15
00B2 8617 cp R24,R22
00B4 60F7 brsh L13
00B6 .dbline 42
00B6 ; NOP();
00B6 ; NOP();
00B6 ; NOP();
00B6 ; NOP();
00B6 ; asm("clc");
00B6 ; DispContent>>=1;
00B6 ; PORTC&=~BIT(DispClk);
00B6 ; }
00B6 ; PORTB|=0xF0;
00B6 88B3 in R24,0x18
00B8 806F ori R24,240
00BA 88BB out 0x18,R24
00BC .dbline -2
00BC .dbline 43
00BC ; }
00BC L1:
00BC 0E940000 xcall pop_gset5
00C0 .dbline 0 ; func end
00C0 0895 ret
00C2 .dbsym r DispContent 20 i
00C2 .dbsym r i 22 c
00C2 .dbsym r gate 10 c
00C2 .dbsym r content 12 i
00C2 .dbend
00C2 .dbfunc e disp_init _disp_init fV
.even
00C2 _disp_init::
00C2 .dbline -1
00C2 .dbline 46
00C2 ;
00C2 ; void disp_init(void) //Set all control signal high
00C2 ; {
00C2 .dbline 47
00C2 ; DDRB|=0xFF;
00C2 87B3 in R24,0x17
00C4 8F6F ori R24,255
00C6 87BB out 0x17,R24
00C8 .dbline 48
00C8 ; PORTB|=0xF0;
00C8 88B3 in R24,0x18
00CA 806F ori R24,240
00CC 88BB out 0x18,R24
00CE .dbline 49
00CE ; PORTC|=BIT(DispData)|BIT(DispClk);
00CE 85B3 in R24,0x15
00D0 806C ori R24,192
00D2 85BB out 0x15,R24
00D4 .dbline 50
00D4 ; DDRC|=BIT(DispData)|BIT(DispClk);
00D4 84B3 in R24,0x14
00D6 806C ori R24,192
00D8 84BB out 0x14,R24
00DA .dbline -2
00DA .dbline 51
00DA ; }
00DA L19:
00DA .dbline 0 ; func end
00DA 0895 ret
00DC .dbend
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -