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

📄 pcf8563_test.s

📁 pcf8563开发
💻 S
📖 第 1 页 / 共 3 页
字号:
	.dbline 0 ; func end
	ld R21,y+
	ld R20,y+
	ret
	.dbsym r dat 20 pc
	.dbend
	.dbfunc e start_timer _start_timer fc
	.even
_start_timer::
	.dbline -1
	.dbline 92
; }
; 
; /**********************************
; *          启动时钟函数			  *
; **********************************/
; unsigned char start_timer(void)
; {
	.dbline 93
;   start();		 	 	          //启动总线
	ldi R24,164
	out 0x36,R24
	.dbline 94
;   waitack();						  //等待启动完成
L92:
	.dbline 94
L93:
	.dbline 94
	in R2,0x36
	sbrs R2,7
	rjmp L92
X21:
	.dbline 94
	.dbline 94
	.dbline 95
;   if(chkack()!=START)return I2C_ERR;		  //检查是否启动成功
	in R24,0x1
	andi R24,248
	cpi R24,8
	breq L95
X22:
	.dbline 95
	clr R16
	xjmp L91
L95:
	.dbline 96
;   write_tim(PCF8563_SLA_W);				  //发送写地址
	ldi R16,162
	xcall _write_tim
	.dbline 97
;   write_tim(0x00);				  //写数据首地址
	clr R16
	xcall _write_tim
	.dbline 98
;   write_tim(0x00);				  //写控制/状态寄存器1,暂停计时
	clr R16
	xcall _write_tim
	.dbline 99
;   stop();
	ldi R24,148
	out 0x36,R24
	.dbline 100
;   return I2C_CRR;
	ldi R16,1
	.dbline -2
L91:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e timer_lcd _timer_lcd fV
	.even
_timer_lcd::
	.dbline -1
	.dbline 107
; }
; 
; /**********************************
; *   将时钟数据转换后在LCD上显示	  *
; **********************************/ 
; void timer_lcd(void)
; {
	.dbline 108
;  LCD_set_xy(4,0);			 	 	 //写指令:第1行第4列地址
	clr R18
	ldi R16,4
	xcall _LCD_set_xy
	.dbline 110
; 
;  LCD_write_char(0,(timer[7]>>4)+0x30);
	lds R18,_timer+7
	clr R19
	asr R19
	ror R18
	asr R19
	ror R18
	asr R19
	ror R18
	asr R19
	ror R18
	subi R18,208  ; offset = 48
	sbci R19,255
	clr R16
	clr R17
	xcall _LCD_write_char
	.dbline 111
;  LCD_write_char(0,(timer[7]&0x0f)+0x30);
	lds R18,_timer+7
	clr R19
	andi R18,15
	andi R19,0
	subi R18,208  ; offset = 48
	sbci R19,255
	clr R16
	clr R17
	xcall _LCD_write_char
	.dbline 112
;  LCD_write_char(0,(timer[6]>>4)+0x30);		 //显示年
	lds R18,_timer+6
	clr R19
	asr R19
	ror R18
	asr R19
	ror R18
	asr R19
	ror R18
	asr R19
	ror R18
	subi R18,208  ; offset = 48
	sbci R19,255
	clr R16
	clr R17
	xcall _LCD_write_char
	.dbline 113
;  LCD_write_char(0,(timer[6]&0x0f)+0x30);
	lds R18,_timer+6
	clr R19
	andi R18,15
	andi R19,0
	subi R18,208  ; offset = 48
	sbci R19,255
	clr R16
	clr R17
	xcall _LCD_write_char
	.dbline 114
;  LCD_write_char(0,'/');
	ldi R18,47
	ldi R19,0
	clr R16
	clr R17
	xcall _LCD_write_char
	.dbline 115
;  LCD_write_char(0,(timer[5]>>4)+0x30);		 //显示月
	lds R18,_timer+5
	clr R19
	asr R19
	ror R18
	asr R19
	ror R18
	asr R19
	ror R18
	asr R19
	ror R18
	subi R18,208  ; offset = 48
	sbci R19,255
	clr R16
	clr R17
	xcall _LCD_write_char
	.dbline 116
;  LCD_write_char(0,(timer[5]&0x0f)+0x30);
	lds R18,_timer+5
	clr R19
	andi R18,15
	andi R19,0
	subi R18,208  ; offset = 48
	sbci R19,255
	clr R16
	clr R17
	xcall _LCD_write_char
	.dbline 117
;  LCD_write_char(0,'/');
	ldi R18,47
	ldi R19,0
	clr R16
	clr R17
	xcall _LCD_write_char
	.dbline 118
;  LCD_write_char(0,(timer[3]>>4)+0x30);		 //显示日
	lds R18,_timer+3
	clr R19
	asr R19
	ror R18
	asr R19
	ror R18
	asr R19
	ror R18
	asr R19
	ror R18
	subi R18,208  ; offset = 48
	sbci R19,255
	clr R16
	clr R17
	xcall _LCD_write_char
	.dbline 119
;  LCD_write_char(0,(timer[3]&0x0f)+0x30);
	lds R18,_timer+3
	clr R19
	andi R18,15
	andi R19,0
	subi R18,208  ; offset = 48
	sbci R19,255
	clr R16
	clr R17
	xcall _LCD_write_char
	.dbline 121
; 
;  LCD_set_xy(2,1);			 		 //写指令:第2行地址
	ldi R18,1
	ldi R16,2
	xcall _LCD_set_xy
	.dbline 123
;    
;  LCD_write_char(0,(timer[2]>>4)+0x30);		 //时
	lds R18,_timer+2
	clr R19
	asr R19
	ror R18
	asr R19
	ror R18
	asr R19
	ror R18
	asr R19
	ror R18
	subi R18,208  ; offset = 48
	sbci R19,255
	clr R16
	clr R17
	xcall _LCD_write_char
	.dbline 124
;  LCD_write_char(0,(timer[2]&0x0f)+0x30);
	lds R18,_timer+2
	clr R19
	andi R18,15
	andi R19,0
	subi R18,208  ; offset = 48
	sbci R19,255
	clr R16
	clr R17
	xcall _LCD_write_char
	.dbline 125
;  LCD_write_char(0,':');
	ldi R18,58
	ldi R19,0
	clr R16
	clr R17
	xcall _LCD_write_char
	.dbline 126
;  LCD_write_char(0,(timer[1]>>4)+0x30);		 //分
	lds R18,_timer+1
	clr R19
	asr R19
	ror R18
	asr R19
	ror R18
	asr R19
	ror R18
	asr R19
	ror R18
	subi R18,208  ; offset = 48
	sbci R19,255
	clr R16
	clr R17
	xcall _LCD_write_char
	.dbline 127
;  LCD_write_char(0,(timer[1]&0x0f)+0x30);
	lds R18,_timer+1
	clr R19
	andi R18,15
	andi R19,0
	subi R18,208  ; offset = 48
	sbci R19,255
	clr R16
	clr R17
	xcall _LCD_write_char
	.dbline 128
;  LCD_write_char(0,':');   
	ldi R18,58
	ldi R19,0
	clr R16
	clr R17
	xcall _LCD_write_char
	.dbline 129
;  LCD_write_char(0,(timer[0]>>4)+0x30);		 //秒
	lds R18,_timer
	clr R19
	asr R19
	ror R18
	asr R19
	ror R18
	asr R19
	ror R18
	asr R19
	ror R18
	subi R18,208  ; offset = 48
	sbci R19,255
	clr R16
	clr R17
	xcall _LCD_write_char
	.dbline 130
;  LCD_write_char(0,(timer[0]&0x0f)+0x30);
	lds R18,_timer
	clr R19
	andi R18,15
	andi R19,0
	subi R18,208  ; offset = 48
	sbci R19,255
	clr R16
	clr R17
	xcall _LCD_write_char
	.dbline 131
;  LCD_write_char(0,' ');
	ldi R18,32
	ldi R19,0
	clr R16
	clr R17
	xcall _LCD_write_char
	.dbline 132
;  LCD_write_char(0,'W');	LCD_write_char(0,'e');	//星期的前导字
	ldi R18,87
	ldi R19,0
	clr R16
	clr R17
	xcall _LCD_write_char
	.dbline 132
	ldi R18,101
	ldi R19,0
	clr R16
	clr R17
	xcall _LCD_write_char
	.dbline 133
;  LCD_write_char(0,'e');  LCD_write_char(0,'k');
	ldi R18,101
	ldi R19,0
	clr R16
	clr R17
	xcall _LCD_write_char
	.dbline 133
	ldi R18,107
	ldi R19,0
	clr R16
	clr R17
	xcall _LCD_write_char
	.dbline 134
;  LCD_write_char(0,(timer[4]&0x0f)+0x30);	 //星期数据
	lds R18,_timer+4
	clr R19
	andi R18,15
	andi R19,0
	subi R18,208  ; offset = 48
	sbci R19,255
	clr R16
	clr R17
	xcall _LCD_write_char
	.dbline -2
L97:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e timer1_init _timer1_init fV
	.even
_timer1_init::
	.dbline -1
	.dbline 139
; }
; 
; //定时器1:每秒从8563中读取4次数据,更新显示
; void timer1_init(void)	       //定时器1初始化:250毫秒定时,预分频256
; {
	.dbline 140
;  TCCR1B=0x00; 		   	   //停止定时器
	clr R2
	out 0x2e,R2
	.dbline 141
;  TCNT1H=0x8F;			   //初值高字节
	ldi R24,143
	out 0x2d,R24
	.dbline 142
;  TCNT1L=0x81;			   //定时初值低字节
	ldi R24,129
	out 0x2c,R24
	.dbline 143
;  TCCR1A=0x00;
	out 0x2f,R2
	.dbline 144
;  TCCR1B=0x03; 	 	   	   //启动定时器
	ldi R24,3
	out 0x2e,R24
	.dbline -2
L111:
	.dbline 0 ; func end
	ret
	.dbend
	.area vector(rom, abs)
	.org 32
	jmp _timer1_ovf_isr
	.area text(rom, con, rel)
	.dbfile D:\mega16_32实验板资料\ICCAVR源程序\twi\pcf8563\pcf8563.h
	.dbfunc e timer1_ovf_isr _timer1_ovf_isr fV
	.even
_timer1_ovf_isr::
	st -y,R0
	st -y,R1
	st -y,R2
	st -y,R3
	st -y,R4
	st -y,R5
	st -y,R6
	st -y,R7
	st -y,R8
	st -y,R9
	st -y,R16
	st -y,R17
	st -y,R18
	st -y,R19
	st -y,R24
	st -y,R25
	st -y,R26
	st -y,R27
	st -y,R30
	st -y,R31
	in R0,0x3f
	st -y,R0
	.dbline -1
	.dbline 149
; }
; 
; #pragma interrupt_handler timer1_ovf_isr:9
; void timer1_ovf_isr(void) 	   //定时器1中断入口:250MS中断一次
; {
	.dbline 150
;  TCNT1H = 0x8F;			   //重装初值
	ldi R24,143
	out 0x2d,R24
	.dbline 151
;  TCNT1L = 0x81;   
	ldi R24,129
	out 0x2c,R24
	.dbline 152
;  read_timer();	   	   	   //读出当前时钟
	xcall _read_timer
	.dbline 153
;  timer_lcd();		   	   //显示数据转换
	xcall _timer_lcd
	.dbline -2
L112:
	.dbline 0 ; func end
	ld R0,y+
	out 0x3f,R0
	ld R31,y+
	ld R30,y+
	ld R27,y+
	ld R26,y+
	ld R25,y+
	ld R24,y+
	ld R19,y+
	ld R18,y+
	ld R17,y+
	ld R16,y+
	ld R9,y+
	ld R8,y+
	ld R7,y+
	ld R6,y+
	ld R5,y+
	ld R4,y+
	ld R3,y+
	ld R2,y+
	ld R1,y+
	ld R0,y+
	reti
	.dbend
	.dbfile D:\mega16_32实验板资料\ICCAVR源程序\twi\pcf8563\pcf8563_test.c
	.dbfunc e port_init _port_init fV
	.even
_port_init::
	.dbline -1
	.dbline 18
; //ICC-AVR application builder : 2008-11-10 11:10:06
; // Target : M16
; // Crystal: 8.0000Mhz
; 
; #include <iom16v.h>
; #include <macros.h>
; 
; 
; #include "delay.h"
; #include "twi.h"
; #include "lcd1602.h"
; #include "pcf8563.h"
; 
; /**********************************
; *          端口设置函数			  *
; **********************************/
; void port_init(void)
; {
	.dbline 19
;  DDRC=0x00;
	clr R2
	out 0x14,R2
	.dbline 20
;  PORTC=0xFF;
	ldi R24,255
	out 0x15,R24
	.dbline -2
L113:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e main _main fV
	.even
_main::
	.dbline -1
	.dbline 25
; }
; 
; 
; void main(void)
; {
	.dbline 26
;  port_init();
	xcall _port_init
	.dbline 27
;  LCD_init();
	xcall _LCD_init
	.dbline 28
;  delay_ms(50);
	ldi R16,50
	ldi R17,0
	xcall _delay_ms
	.dbline 29
;  Twi_Init();
	xcall _Twi_Init
	.dbline 30
;  delay_ms(100);
	ldi R16,100
	ldi R17,0
	xcall _delay_ms
	.dbline 31
;  CLI();
	cli
	.dbline 32
;  timer1_init();					//定时器1初始化
	xcall _timer1_init
	.dbline 33
;  MCUCR = 0x00;
	clr R2
	out 0x35,R2
	.dbline 34
;  GICR  = 0x00;
	out 0x3b,R2
	.dbline 35
;  TIMSK = 0x04; 					//开放定时器1中断和比较中断
	ldi R24,4
	out 0x39,R24
	.dbline 36
;  SEI(); 						//开总中断
	sei
L115:
	.dbline 38
;  while(1)
;  {
	.dbline 39
;  }
L116:
	.dbline 37
	xjmp L115
X23:
	.dbline -2
L114:
	.dbline 0 ; func end
	ret
	.dbend
	.area bss(ram, con, rel)
	.dbfile D:\mega16_32实验板资料\ICCAVR源程序\twi\pcf8563\pcf8563_test.c
_timer::
	.blkb 8
	.dbfile D:\mega16_32实验板资料\ICCAVR源程序\twi\pcf8563\pcf8563.h
	.dbsym e timer _timer A[8:8]c
; }

⌨️ 快捷键说明

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