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

📄 clock.s

📁 AVR单片机用C语言编写的包括时钟
💻 S
字号:
	.module clock.c
	.area text(rom, con, rel)
	.dbfile C:\icc\examples.avr\zgs\clock.c
	.dbfunc e writeclock _writeclock fc
;         wordad -> R20
;          sla_w -> R22
;              j -> R20
;       clock_wb -> R16,R17
	.even
_writeclock::
	xcall push_gset2
	.dbline -1
	.dbline 18
; #include "iom64v.h"
; #define uchar unsigned char
; #define START 0x08
; #define MT_SLA_ACK 0x18
; #define MT_DATA_ACK 0x28
; #define MR_SLA_ACK 0x40
; #define MR_DATA_ACK 0x50
; 
; #define TINT 0x80
; #define TEA  0x40
; #define TSTA 0x20
; #define TSTO 0x10
; #define TWC  0x08
; #define TEN  0x04
; #define TIE  0x01
; 
; uchar writeclock(uchar *clock_wb )
; {
	.dbline 21
;   uchar  sla_w,wordad,j;
;   
;  sla_w=0xa0;
	ldi R22,160
	.dbline 22
;  wordad=0x00;
	clr R20
	.dbline 23
;  TWCR = (TWCR)|(TINT)|(TSTA)|(TEN);
	lds R24,116
	ori R24,164
	sts 116,R24
L2:
	.dbline 24
L3:
	.dbline 24
;  while (!(TWCR &(TINT)));
	lds R2,116
	sbrs R2,7
	rjmp L2
	.dbline 26
;  
;  if ((TWSR & 0xF8) != START)
	lds R24,113
	andi R24,248
	cpi R24,8
	breq L5
	.dbline 27
;  return 0;
	clr R16
	xjmp L1
L5:
	.dbline 29
;  
; TWDR = sla_w;
	sts 115,R22
	.dbline 30
; TWCR = (TWCR)|(TINT)|(TEN);
	lds R24,116
	ori R24,132
	sts 116,R24
L7:
	.dbline 31
L8:
	.dbline 31
; while (!(TWCR & (TINT)));
	lds R2,116
	sbrs R2,7
	rjmp L7
	.dbline 33
; 
; if ((TWSR & 0xF8) != MT_SLA_ACK)
	lds R24,113
	andi R24,248
	cpi R24,24
	breq L10
	.dbline 34
;  return 0;
	clr R16
	xjmp L1
L10:
	.dbline 36
;  
; TWDR = wordad;
	sts 115,R20
	.dbline 37
; TWCR = (TWCR)|(TINT)|(TEN);
	lds R24,116
	ori R24,132
	sts 116,R24
L12:
	.dbline 38
L13:
	.dbline 38
; while (!(TWCR & (TINT)));
	lds R2,116
	sbrs R2,7
	rjmp L12
	.dbline 40
; 
; if ((TWSR & 0xF8) != MT_DATA_ACK)
	lds R24,113
	andi R24,248
	cpi R24,40
	breq L15
	.dbline 41
;  return 0;
	clr R16
	xjmp L1
L15:
	.dbline 42
; for(j=0;j<8;j++)
	clr R20
	xjmp L20
L17:
	.dbline 43
; {
	.dbline 44
;  TWDR = clock_wb[j];
	mov R30,R20
	clr R31
	add R30,R16
	adc R31,R17
	ldd R2,z+0
	sts 115,R2
	.dbline 45
;  TWCR = (TWCR)|(TINT)|(TEN);
	lds R24,116
	ori R24,132
	sts 116,R24
L21:
	.dbline 46
L22:
	.dbline 46
;  while (!(TWCR & (TINT)));
	lds R2,116
	sbrs R2,7
	rjmp L21
	.dbline 48
; 
;  if ((TWSR & 0xF8) != MT_DATA_ACK)
	lds R24,113
	andi R24,248
	cpi R24,40
	breq L24
	.dbline 49
;  return 0;
	clr R16
	xjmp L1
L24:
	.dbline 50
L18:
	.dbline 42
	inc R20
L20:
	.dbline 42
	cpi R20,8
	brlo L17
	.dbline 52
; } 
; 
;  TWCR = (TWCR)|(TINT)|(TEN)|(TSTO); 
	lds R24,116
	ori R24,148
	sts 116,R24
	.dbline 54
; 
;  return 1;
	ldi R16,1
	.dbline -2
L1:
	xcall pop_gset2
	.dbline 0 ; func end
	ret
	.dbsym r wordad 20 c
	.dbsym r sla_w 22 c
	.dbsym r j 20 c
	.dbsym r clock_wb 16 pc
	.dbend
	.dbfunc e readclock _readclock fc
;          sla_r -> R20
;         wordad -> R20
;          sla_w -> R22
;              j -> R20
;       clock_rb -> R16,R17
	.even
_readclock::
	xcall push_gset2
	.dbline -1
	.dbline 58
; }
; 
; uchar readclock(uchar *clock_rb )
; {
	.dbline 62
;   uchar  sla_r,j;
;   uchar  sla_w,wordad;
;   
;   sla_w=0xa0;
	ldi R22,160
	.dbline 63
;   wordad=0x00;
	clr R20
	.dbline 65
;   
;   TWCR = (TWCR)|(TINT)|(TSTA)|(TEN);
	lds R24,116
	ori R24,164
	sts 116,R24
L27:
	.dbline 66
L28:
	.dbline 66
;   while (!(TWCR & (TINT)));
	lds R2,116
	sbrs R2,7
	rjmp L27
	.dbline 68
;  
;   if ((TWSR & 0xF8) != START)
	lds R24,113
	andi R24,248
	cpi R24,8
	breq L30
	.dbline 69
;   return 0;
	clr R16
	xjmp L26
L30:
	.dbline 71
;  
;  TWDR = sla_w;
	sts 115,R22
	.dbline 72
;  TWCR = (TWCR)|(TINT)|(TEN);
	lds R24,116
	ori R24,132
	sts 116,R24
L32:
	.dbline 73
L33:
	.dbline 73
;  while (!(TWCR & (TINT)));
	lds R2,116
	sbrs R2,7
	rjmp L32
	.dbline 75
; 
;  if ((TWSR & 0xF8) != MT_SLA_ACK)
	lds R24,113
	andi R24,248
	cpi R24,24
	breq L35
	.dbline 76
;  return 0;
	clr R16
	xjmp L26
L35:
	.dbline 79
;  
;  
;  TWDR = wordad;
	sts 115,R20
	.dbline 80
;  TWCR = (TWCR)|(TINT)|(TEN);
	lds R24,116
	ori R24,132
	sts 116,R24
L37:
	.dbline 81
L38:
	.dbline 81
;  while (!(TWCR & (TINT)));
	lds R2,116
	sbrs R2,7
	rjmp L37
	.dbline 83
; 
;  if ((TWSR & 0xF8) != MT_DATA_ACK)
	lds R24,113
	andi R24,248
	cpi R24,40
	breq L40
	.dbline 84
;  return 0;
	clr R16
	xjmp L26
L40:
	.dbline 86
;  
;  TWCR = (TWCR)|(TINT)|(TSTA)|(TEN);
	lds R24,116
	ori R24,164
	sts 116,R24
L42:
	.dbline 87
L43:
	.dbline 87
;   while (!(TWCR & (TINT)));
	lds R2,116
	sbrs R2,7
	rjmp L42
	.dbline 89
;  
;   if ((TWSR & 0xF8) != START)
	lds R24,113
	andi R24,248
	cpi R24,8
	breq L45
	.dbline 90
;   return 0;
	clr R16
	xjmp L26
L45:
	.dbline 92
;   
;   sla_r=0xa1;
	ldi R20,161
	.dbline 93
;  TWCR = (TWCR)|(TINT)|(TEN);
	lds R24,116
	ori R24,132
	sts 116,R24
L47:
	.dbline 94
L48:
	.dbline 94
;  while (!(TWCR & (TINT)));
	lds R2,116
	sbrs R2,7
	rjmp L47
	.dbline 96
; 
;  if ((TWSR & 0xF8) != MR_SLA_ACK)
	lds R24,113
	andi R24,248
	cpi R24,64
	breq L50
	.dbline 97
;  return 0;
	clr R16
	xjmp L26
L50:
	.dbline 99
;   
;  for(j=0;j<8;j++)
	clr R20
	xjmp L55
L52:
	.dbline 100
;  {
	.dbline 101
;   TWCR = (TWCR)|(TINT)|(TEN)|(TEA);       
	lds R24,116
	ori R24,196
	sts 116,R24
L56:
	.dbline 102
L57:
	.dbline 102
;   while (!(TWCR & (TINT)));
	lds R2,116
	sbrs R2,7
	rjmp L56
	.dbline 103
;   if ((TWSR & 0xF8) != MR_DATA_ACK)
	lds R24,113
	andi R24,248
	cpi R24,80
	breq L59
	.dbline 104
;   return 0;
	clr R16
	xjmp L26
L59:
	.dbline 106
	mov R30,R20
	clr R31
	add R30,R16
	adc R31,R17
	ldd R2,z+0
	sts 115,R2
	.dbline 108
L53:
	.dbline 99
	inc R20
L55:
	.dbline 99
	cpi R20,8
	brlo L52
	.dbline 110
;   
;   TWDR = clock_rb[j];
;   
;  } 
;   
;  TWCR = (TWCR)|(TINT)|(TEN)|(TSTO);                                                                                                                                                            
	lds R24,116
	ori R24,148
	sts 116,R24
	.dbline 111
;  return 1;
	ldi R16,1
	.dbline -2
L26:
	xcall pop_gset2
	.dbline 0 ; func end
	ret
	.dbsym r sla_r 20 c
	.dbsym r wordad 20 c
	.dbsym r sla_w 22 c
	.dbsym r j 20 c
	.dbsym r clock_rb 16 pc
	.dbend

⌨️ 快捷键说明

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