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

📄 addcounterdisplay.s

📁 单片机开发资料光盘-双龙-686M.zip
💻 S
字号:
	.module AddCounterDisplay.c
	.area lit
_DATA_7SEG::
	.byte 63,6
	.byte 91,'O
	.byte 'f,'m
	.byte 125,7
	.byte 127,'o
	.byte 'w,124
	.byte 57,94
	.byte 'y,'q
	.dbfile E:\grc\licc\例子10.3.8\AddCounterDisplay.c
	.dbsym s DATA_7SEG _DATA_7SEG Ac[16:16]
	.area text
	.dbfile E:\grc\licc\例子10.3.8\AddCounterDisplay.c
	.dbfunc s delay _delay fI
;              i -> R20,R21
;              t -> R16,R17
	.even
_delay::
	rcall push_gset1
	.dbline 9{
; #include <io8515.h>                   
; #define uchar unsigned char           
; #define uint unsigned int
; const uchar DATA_7SEG[ ] ={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
;                            0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};/*LED 字形表*/
; uchar led[6] ;                       
; uint count;
; void delay(uint t)                    
; {
	.dbline 11
;  uint i;
;  for (i=0;i<t;i++)
	clr R20
	clr R21
	rjmp L5
L2:
	.dbline 12
L3:
	.dbline 11
	subi R20,255  ; offset = 1
	sbci R21,255
L5:
	.dbline 11
	cp R20,R16
	cpc R21,R17
	brlo L2
	.dbline 13}
;     ;
; }
L1:
	rcall pop_gset1
	ret
	.dbsym r i 20 i
	.dbsym r t 16 i
	.dbfunc s init_disp _init_disp fI
	.even
_init_disp::
	.dbline 15{
; void init_disp(void)                  
; {
	.dbline 16
;  DDRB=0xff;
	ldi R24,255
	out 0x17,R24
	.dbline 17
;  DDRD=0x7f;
	ldi R24,127
	out 0x11,R24
	.dbline 18
;  PORTD|=0x80;
	sbi 0x12,7
	.dbline 19}
; } 
L6:
	ret
	.dbfunc s disp _disp fI
;              i -> R20
	.even
_disp::
	rcall push_gset1
	.dbline 21{
; void disp(void)                       
; {
	.dbline 23
;  uchar i;
;  for (i=0;i<6;i++)
	clr R20
	rjmp L11
L8:
	.dbline 24
	.dbline 25
	ldi R16,1
	mov R17,R20
	rcall lsl8
	mov R2,R16
	com R2
	out 0x12,R2
	.dbline 26
	ldi R24,<_led
	ldi R25,>_led
	mov R30,R20
	clr R31
	add R30,R24
	adc R31,R25
	ldd R2,z+0
	clr R3
	ldi R24,<_DATA_7SEG
	ldi R25,>_DATA_7SEG
	add R2,R24
	adc R3,R25
	mov R30,R2
	mov R31,R3
	lpm
	out 0x18,R0
	.dbline 27
	ldi R16,232
	ldi R17,3
	rcall _delay
	.dbline 28
L9:
	.dbline 23
	inc R20
L11:
	.dbline 23
	cpi R20,6
	brlo L8
	.dbline 29
;    {
;     PORTD=~(0x01<<i);
;     PORTB=DATA_7SEG[led[i]];
;     delay(1000);
;     }
;   PORTB=0x00;
	clr R2
	out 0x18,R2
	.dbline 30
;   PORTD=0xff;
	ldi R24,255
	out 0x12,R24
	.dbline 31}
; }
L7:
	rcall pop_gset1
	ret
	.dbsym r i 20 c
	.dbfunc s be_pc0 _be_pc0 fI
;              i -> R20,R21
	.even
_be_pc0::
	rcall push_gset1
	.dbline 33{
; void be_pc0(void)                    
; {
	.dbline 35
;  uint i;
;  DDRC|=0x01;
	sbi 0x14,0
	.dbline 36
;  for (i=0;i<350;i++)
	clr R20
	clr R21
	rjmp L16
L13:
	.dbline 37
	.dbline 38
	ldi R24,1
	in R2,0x15
	eor R2,R24
	out 0x15,R2
	.dbline 39
	ldi R16,94
	ldi R17,1
	rcall _delay
	.dbline 40
L14:
	.dbline 36
	subi R20,255  ; offset = 1
	sbci R21,255
L16:
	.dbline 36
	cpi R20,94
	ldi R30,1
	cpc R21,R30
	brlo L13
	.dbline 41}
;     {
;      PORTC^=0x01;
;      delay(350);
;     }
; }
L12:
	rcall pop_gset1
	ret
	.dbsym r i 20 i
	.dbfunc s conv _conv fI
	.even
_conv::
	.dbline 43{
; void conv(void)                      
; {
	.dbline 44
; led[5] =0;
	clr R2
	sts _led+5,R2
	.dbline 45
; led[4] =count/10000;
	ldi R18,16
	ldi R19,39
	lds R17,_count+1
	lds R16,_count
	rcall div16u
	sts _led+4,R16
	.dbline 46
; led[3] =count/1000%10;
	ldi R18,232
	ldi R19,3
	lds R17,_count+1
	lds R16,_count
	rcall div16u
	ldi R18,10
	ldi R19,0
	rcall mod16u
	sts _led+3,R16
	.dbline 47
; led[2] =count/100%10;
	ldi R18,100
	ldi R19,0
	lds R17,_count+1
	lds R16,_count
	rcall div16u
	ldi R18,10
	ldi R19,0
	rcall mod16u
	sts _led+2,R16
	.dbline 48
; led[1] =count/10%10;
	ldi R18,10
	ldi R19,0
	lds R17,_count+1
	lds R16,_count
	rcall div16u
	ldi R18,10
	ldi R19,0
	rcall mod16u
	sts _led+1,R16
	.dbline 49
; led[0] =count%10;
	ldi R18,10
	ldi R19,0
	lds R17,_count+1
	lds R16,_count
	rcall mod16u
	sts _led,R16
	.dbline 50}
; }
L17:
	ret
	.dbfunc s main _main fI
	.even
_main::
	.dbline 52{
; void main(void)                              
; {
	.dbline 53
;  init_disp();                                
	rcall _init_disp
	.dbline 54
;  count=0;                                    
	clr R2
	clr R3
	sts _count+1,R3
	sts _count,R2
	.dbline 55
;  conv();                                     
	rcall _conv
	.dbline 56
;  for(;;)
	.dbline 57
;     {
	rjmp L29
L28:
	.dbline 59
	rcall _disp
L29:
	.dbline 58
;      while((PIND&0x80)==0x80)                
	in R24,0x10
	andi R24,128
	cpi R24,128
	breq L28
	.dbline 60
;          disp();                             
;      be_pc0();                               
	rcall _be_pc0
	.dbline 61
;      count++;                                
	lds R25,_count+1
	lds R24,_count
	adiw R24,1
	sts _count+1,R25
	sts _count,R24
	.dbline 62
;      conv();                                 
	rcall _conv
	rjmp L32
L31:
	.dbline 64
	rcall _disp
L32:
	.dbline 63
;      while((PIND&0x80)==0)                   
	sbis 0x10,7
	rjmp L31
	.dbline 65
;          disp();                             
;      }
	.dbline 56
	.dbline 56
	rjmp L29
X0:
L23:
	ret
	.dbline 57}
	.area bss
	.dbfile E:\grc\licc\例子10.3.8\AddCounterDisplay.c
_count::
	.blkb 2
	.dbsym s count _count i
_led::
	.blkb 6
	.dbsym s led _led Ac[6:6]

⌨️ 快捷键说明

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