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

📄 clock.s

📁 单片机开发资料光盘-双龙-686M.zip
💻 S
📖 第 1 页 / 共 2 页
字号:
	.module clock.c
	.area vector(rom, abs)
	.org 12
	rjmp _timer1_ovf
	.org 14
	rjmp _timer0_ovf
	.area data(ram, con, rel)
_flag::
	.blkb 1
	.area idata
	.byte 0
	.area data(ram, con, rel)
	.dbfile D:\sl279\8515\clock.c
	.dbsym s flag _flag c
_dflag::
	.blkb 1
	.area idata
	.byte 0
	.area data(ram, con, rel)
	.dbfile D:\sl279\8515\clock.c
	.dbsym s dflag _dflag c
	.area text(rom, con, rel)
	.dbfile D:\sl279\8515\clock.c
	.dbfunc s receive_byte _receive_byte fI
;              i -> R20
;           temp -> R22
	.even
_receive_byte::
	rcall push_gset2
	.dbline -1
	.dbline 26
; /************************************************************/
; /*               广州天河双龙电子有限公司                   */
; /*               http://www.sl.com.cn                       */
; /*               电脑时钟演示程序(ICCAVR版本)             */
; /*                程序作者:詹卫前                          */
; /*接线方式:CS=PORTC.4 CLK=PORTC.3 DATA=PORTC.2 KEY=PORTC.1 */
; /*       处理器:AT90S8515       晶振频率:8MHZ             */
; /*       SL279 晶振频率:12MHZ    使用SLAVR库                */
; /************************************************************/
; #include<io8515.h>
; #include<slavr.h>
; #pragma interrupt_handler timer1_ovf:7
; #pragma interrupt_handler timer0_ovf:8
; #define setcs     PORTC|=0x10;
; unsigned char flag=0;//时间刷新标志
; unsigned char dflag=0;//计数方向标志
; /*      定义结构体time        */
; struct time               
; {
;  signed char second;
;  signed char minute;
;  signed char hour;
; } time;
; /*         字节接收函数          */     
; unsigned char receive_byte(void)
;   {
	.dbline 27
;    unsigned char i,temp=0;
	clr R22
	.dbline 28
;    DDRC&=0xfb;              
	in R24,0x14
	andi R24,251
	out 0x14,R24
	.dbline 29
;    delay_us(90);
	ldi R16,90
	ldi R17,0
	rcall _delay_us
	.dbline 30
;    for(i=0;i<8;i++)
	clr R20
	rjmp L5
L2:
	.dbline 31
;        {
	.dbline 32
;         temp=temp<<1;  
	lsl R22
	.dbline 33
;         PORTC|=0x08;//clk=1      
	sbi 0x15,3
	.dbline 34
;         delay_us(10);
	ldi R16,10
	ldi R17,0
	rcall _delay_us
	.dbline 35
;         if((PINC&0x04)!=0) 
	sbis 0x13,2
	rjmp L6
	.dbline 36
;            temp|=0x01;   
	ori R22,1
L6:
	.dbline 37
	in R24,0x15
	andi R24,247
	out 0x15,R24
	.dbline 38
	ldi R16,10
	ldi R17,0
	rcall _delay_us
	.dbline 39
L3:
	.dbline 30
	inc R20
L5:
	.dbline 30
	cpi R20,8
	brlo L2
	.dbline 40
;         PORTC&=0xf7;//clk=0      
;         delay_us(10);
;        }
;    DDRC|=0x04;  
	sbi 0x14,2
	.dbline 41
;    return temp;
	mov R16,R22
	clr R17
	.dbline -2
L1:
	rcall pop_gset2
	.dbline 0 ; func end
	ret
	.dbsym r i 20 c
	.dbsym r temp 22 c
	.dbfunc s send_byte _send_byte fI
;              i -> R20
;           para -> R22
	.even
_send_byte::
	rcall push_gset2
	mov R22,R16
	.dbline -1
	.dbline 45
;    }  
; /*         字节发送函数            */
; void send_byte(unsigned char para)
;      {
	.dbline 47
;       unsigned char i;
;       PORTC&=0xef;//cs=0      
	in R24,0x15
	andi R24,239
	out 0x15,R24
	.dbline 48
;       delay_us(90);
	ldi R16,90
	ldi R17,0
	rcall _delay_us
	.dbline 49
;       for(i=0;i<8;i++)
	clr R20
	rjmp L12
L9:
	.dbline 50
;          {
	.dbline 51
;           if((para&0x80)==0x80)
	mov R24,R22
	andi R24,128
	cpi R24,128
	brne L13
	.dbline 52
;               PORTC|=0x04;//data=1   
	sbi 0x15,2
	rjmp L14
L13:
	.dbline 54
;           else
;               PORTC&=0xfb;//data=0   
	in R24,0x15
	andi R24,251
	out 0x15,R24
L14:
	.dbline 55
	sbi 0x15,3
	.dbline 56
	ldi R16,10
	ldi R17,0
	rcall _delay_us
	.dbline 57
	in R24,0x15
	andi R24,247
	out 0x15,R24
	.dbline 58
	ldi R16,10
	ldi R17,0
	rcall _delay_us
	.dbline 59
	lsl R22
	.dbline 60
L10:
	.dbline 49
	inc R20
L12:
	.dbline 49
	cpi R20,8
	brlo L9
	.dbline -2
	.dbline 61
;           PORTC|=0x08;//clk=1       
;           delay_us(10);
;           PORTC&=0xf7;//clk=0       
;           delay_us(10);
;           para=para<<1;                
;          }  	 
;      }
L8:
	rcall pop_gset2
	.dbline 0 ; func end
	ret
	.dbsym r i 20 c
	.dbsym r para 22 c
	.dbfunc s write279 _write279 fI
;           cmd2 -> R20
;           cmd1 -> R22
	.even
_write279::
	rcall push_gset2
	mov R20,R18
	mov R22,R16
	.dbline -1
	.dbline 64
; /*               写sl279双字节命令                 */          
; void write279(unsigned char cmd1, unsigned char cmd2)
; {
	.dbline 65
; 	send_byte (cmd1);
	mov R16,R22
	rcall _send_byte
	.dbline 66
; 	send_byte (cmd2);                              
	mov R16,R20
	rcall _send_byte
	.dbline 67
; 	PORTC|=0x10;
	sbi 0x15,4
	.dbline -2
	.dbline 68
; }
L15:
	rcall pop_gset2
	.dbline 0 ; func end
	ret
	.dbsym r cmd2 20 c
	.dbsym r cmd1 22 c
	.dbfunc s initdis _initdis fI
	.area func_lit(rom, con, rel)
L59:
	.word `L56
	.word `L53
	.word `L61
	.word `L48
	.word `L43
	.word `L61
	.word `L31
	.word `L26
	.area text(rom, con, rel)
	.dbfile D:\sl279\8515\clock.c
;              i -> R10
;            key -> R20
	.even
_initdis::
	rcall push_gset5
	.dbline -1
	.dbline 71
; /*在启动时设置时间,按shift键后进入计时状态*/
; void initdis()                  
; {
	.dbline 72
;  unsigned char i=7;
	ldi R24,7
	mov R10,R24
	.dbline 73
;  unsigned char key=0;
	clr R20
	.dbline 74
;  write279(0xc8,0);
	clr R18
	ldi R16,200
	rcall _write279
	.dbline 75
;  write279(0xc9,0);
	clr R18
	ldi R16,201
	rcall _write279
	.dbline 76
;  write279(0x92,1);
	ldi R18,1
	ldi R16,146
	rcall _write279
	.dbline 77
;  write279(0xcb,0);
	clr R18
	ldi R16,203
	rcall _write279
	.dbline 78
;  write279(0xcc,0);
	clr R18
	ldi R16,204
	rcall _write279
	.dbline 79
;  write279(0x95,1);
	ldi R18,1
	ldi R16,149
	rcall _write279
	.dbline 80
;  write279(0xce,0);
	clr R18
	ldi R16,206
	rcall _write279
	.dbline 81
;  write279(0xcf,0);
	clr R18
	ldi R16,207
	rcall _write279
	.dbline 82
;  write279(0x88,0x7f);
	ldi R18,127
	ldi R16,136
	rcall _write279
	.dbline 84
;  do
;    {    
L20:
	.dbline 86
L21:
	.dbline 85
; 	while((PINC&0x02)!=0)
	sbic 0x13,1
	rjmp L20
	.dbline 87
; 	       ;
;     send_byte(0x15);
	ldi R16,21
	rcall _send_byte
	.dbline 88
; 	key=receive_byte();
	rcall _receive_byte
	mov R2,R16
	mov R3,R17
	mov R20,R2
	.dbline 89
; 	setcs;
	sbi 0x15,4
	.dbline 89
	.dbline 90
; 	switch (i)
	mov R22,R10
	clr R23
	cpi R22,0
	ldi R30,0
	cpc R23,R30
	brge X1
	rjmp L61
X1:
	ldi R24,7
	ldi R25,0
	cp R24,R22
	cpc R25,R23
	brge X2
	rjmp L61
X2:
	ldi R24,<L59
	ldi R25,>L59
	mov R16,R22
	mov R17,R23
	lsl R16
	rol R17
	add R16,R24
	adc R17,R25
	rcall lpm16
	mov R30,R16
	mov R31,R17
	ijmp
X0:
	.dbline 91
; 	 {
L26:
	.dbline 92
; 	  case 7:{
	.dbline 93
; 	          if(key<3)
	cpi R20,3
	brlo X3
	rjmp L61
X3:
	.dbline 94
; 			    {
	.dbline 95
; 				 write279(0xc8+i,key);
	mov R18,R20
	mov R16,R10
	subi R16,56	; addi 200
	rcall _write279
	.dbline 96
; 				 i--;
	dec R10
	.dbline 97
; 				 write279(0x88,0xbf);
	ldi R18,191
	ldi R16,136
	rcall _write279
	.dbline 98
; 				 time.hour=time.hour%10+key*10;
	ldi R16,10
	mov R17,R20
	rcall mpy8s
	mov R2,R16
	ldi R17,10
	lds R16,_time+2
	rcall mod8s
	mov R3,R16
	add R3,R2
	sts _time+2,R3
	.dbline 99
; 				}			  
	.dbline 100
; 			  break;
	rjmp L61
L31:
	.dbline 102
; 	         }
; 	  case 6:{
	.dbline 103
; 	          if(key<10)
	cpi R20,10
	brlo X4
	rjmp L61
X4:
	.dbline 104
; 			    {
	.dbline 105
; 				 if((time.hour<20)|(key<4))
	lds R24,_time+2
	cpi R24,20
	brge L37
	ldi R24,1
	ldi R25,0
	mov R14,R24
	mov R15,R25
	rjmp L38
L37:
	clr R14
	clr R15
L38:
	cpi R20,4
	brsh L39
	ldi R24,1
	ldi R25,0
	mov R12,R24
	mov R13,R25
	rjmp L40
L39:
	clr R12
	clr R13
L40:
	mov R2,R14
	mov R3,R15
	or R2,R12
	or R3,R13
	tst R2
	brne X5
	tst R3
	brne X6
	rjmp L61
X6:
X5:
	.dbline 106
; 				   {
	.dbline 107
; 				    write279(0xc8+i,key);
	mov R18,R20
	mov R16,R10
	subi R16,56	; addi 200
	rcall _write279
	.dbline 108
; 				    i--;
	dec R10
	.dbline 109
; 				    i--;
	dec R10
	.dbline 110
; 				    write279(0x88,0xef);
	ldi R18,239
	ldi R16,136
	rcall _write279
	.dbline 111
; 					time.hour=(time.hour/10)*10+key;
	ldi R17,10
	lds R16,_time+2
	rcall div8s
	mov R17,R16
	ldi R16,10
	rcall mpy8s
	mov R2,R16
	add R2,R20
	sts _time+2,R2
	.dbline 112
; 					}	
	.dbline 113
; 				}			  
	.dbline 114
; 			  break;
	rjmp L61
L43:
	.dbline 116
; 	         }
;       case 4:{
	.dbline 117
; 	          if(key<6)
	cpi R20,6
	brlo X7
	rjmp L61
X7:
	.dbline 118
; 			    {
	.dbline 119
; 				 write279(0xc8+i,key);
	mov R18,R20
	mov R16,R10
	subi R16,56	; addi 200
	rcall _write279
	.dbline 120
; 				 i--;
	dec R10
	.dbline 121
; 			     write279(0x88,0xf7);
	ldi R18,247
	ldi R16,136
	rcall _write279
	.dbline 122
; 				 time.minute=time.minute%10+key*10;
	ldi R16,10
	mov R17,R20
	rcall mpy8s
	mov R2,R16
	ldi R17,10
	lds R16,_time+1
	rcall mod8s
	mov R3,R16
	add R3,R2
	sts _time+1,R3
	.dbline 123
; 				 }			  
	.dbline 124
; 			  break;	        	          
	rjmp L61
L48:
	.dbline 126
; 	          }
; 	  case 3:{
	.dbline 127
; 	          if(key<10)
	cpi R20,10
	brlo X8
	rjmp L61
X8:
	.dbline 128
; 			     {
	.dbline 129
; 				  write279(0xc8+i,key);
	mov R18,R20
	mov R16,R10
	subi R16,56	; addi 200
	rcall _write279
	.dbline 130
; 				  i--;
	dec R10
	.dbline 131
; 			      i--;
	dec R10
	.dbline 132
; 				  write279(0x88,0xfd);
	ldi R18,253
	ldi R16,136
	rcall _write279
	.dbline 133
; 				  time.minute=(time.minute/10)*10+key;
	ldi R17,10
	lds R16,_time+1
	rcall div8s
	mov R17,R16
	ldi R16,10
	rcall mpy8s
	mov R2,R16
	add R2,R20
	sts _time+1,R2
	.dbline 134
; 				  }			  
	.dbline 135
; 			  break;	        	          
	rjmp L61
L53:
	.dbline 137
; 	         }		
;       case 1:{
	.dbline 138
; 	          if(key<6)
	cpi R20,6
	brsh L61
	.dbline 139
; 			      {
	.dbline 140
; 				  write279(0xc8+i,key);
	mov R18,R20
	mov R16,R10
	subi R16,56	; addi 200
	rcall _write279
	.dbline 141
; 				  i--;
	dec R10
	.dbline 142
; 			      write279(0x88,0xfe);
	ldi R18,254
	ldi R16,136
	rcall _write279
	.dbline 143
; 				  time.second=time.second%10+key*10;
	ldi R16,10
	mov R17,R20
	rcall mpy8s
	mov R2,R16
	ldi R17,10
	lds R16,_time
	rcall mod8s
	mov R3,R16
	add R3,R2
	sts _time,R3
	.dbline 144
; 				  }			  
	.dbline 145
; 			  break;	        	          
	rjmp L61
L56:
	.dbline 147
; 	          }
; 	  case 0:{
	.dbline 148
; 	          if(key<10)
	cpi R20,10
	brsh L61
	.dbline 149
; 			      {
	.dbline 150
; 				   write279(0xc8+i,key);
	mov R18,R20
	mov R16,R10

⌨️ 快捷键说明

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