📄 1602_8563.lis
字号:
.module _1602_8563.c
.area text(rom, con, rel)
0000 .dbfile D:\PCF8563\1602_time\timer_io.h
0000 .dbfunc e port_init _port_init fV
.even
0000 _port_init::
0000 .dbline -1
0000 .dbline 28
0000 ; /*************************************
0000 ; * PCF8563时钟程序 *
0000 ; * 文 件 名:1602_8563.c *
0000 ; * 建立日期:2007年07月04日 *
0000 ; * 设 计:铜河 *
0000 ; * 修改日期:2007年07月08日 *
0000 ; * 版 本:V22.02 *
0000 ; * 主控芯片:Mega16L *
0000 ; * 工作频率:7.3728MHz *
0000 ; *************************************/
0000 ; #include <iom16v.h>
0000 ; #include <macros.h>
0000 ; #include <stdio.h>
0000 ; #include <D:\PCF8563\1602_time\timer_io.h>
0000 ; #include <D:\PCF8563\1602_time\delay.h>
0000 ; #include <D:\PCF8563\1602_time\lcd1602_4h.h>
0000 ; #include <D:\PCF8563\1602_time\TWI_8563.h>
0000 ;
0000 ; //数据简化宏定义
0000 ; #define uchar unsigned char
0000 ; #define uint unsigned int
0000 ;
0000 ; //全局变量定义
0000 ; uchar timer[8]; //时钟数据
0000 ;
0000 ; /**********************************
0000 ; * 蜂鸣器发声函数 *
0000 ; * 函数功能:蜂鸣器发出声响 *
0000 .dbline 29
0000 ; * 入 口:n 声次数 *
0000 8FEF ldi R24,255
0002 8ABB out 0x1a,R24
0004 .dbline 30
0004 ; * i 声时长,i*10ms *
0004 2224 clr R2
0006 2BBA out 0x1b,R2
0008 .dbline 31
0008 ; * 返 回:无 *
0008 88E0 ldi R24,8
000A 87BB out 0x17,R24
000C .dbline 32
000C ; * 发声频率:固定1KHz 无源 *
000C 28BA out 0x18,R2
000E .dbline 33
000E ; **********************************/
000E 24BA out 0x14,R2
0010 .dbline 34
0010 ; void spk(uchar i,uchar n)
0010 8FEF ldi R24,255
0012 85BB out 0x15,R24
0014 .dbline 35
0014 ; {
0014 80EF ldi R24,240
0016 81BB out 0x11,R24
0018 .dbline 36
0018 ; uint a;
0018 8FE0 ldi R24,15
001A 82BB out 0x12,R24
001C .dbline -2
001C L1:
001C .dbline 0 ; func end
001C 0895 ret
001E .dbend
001E .dbfile D:\PCF8563\1602_time\delay.h
001E .dbfunc e delay_us _delay_us fV
001E ; i -> R16,R17
.even
001E _delay_us::
001E .dbline -1
001E .dbline 15
001E 05C0 xjmp L4
0020 L3:
0020 .dbline 17
0020 .dbline 18
0020 0150 subi R16,1
0022 1040 sbci R17,0
0024 .dbline 19
0024 0000 nop
0026 .dbline 20
0026 0000 nop
0028 .dbline 21
0028 0000 nop
002A .dbline 22
002A L4:
002A .dbline 16
002A 0030 cpi R16,0
002C 0107 cpc R16,R17
002E C1F7 brne L3
0030 X0:
0030 .dbline -2
0030 L2:
0030 .dbline 0 ; func end
0030 0895 ret
0032 .dbsym r i 16 i
0032 .dbend
0032 .dbfunc e delay_ms _delay_ms fV
0032 ; a -> R20,R21
0032 ; i -> R16,R17
.even
0032 _delay_ms::
0032 0E940000 xcall push_gset1
0036 .dbline -1
0036 .dbline 32
0036 .dbline 34
0036 0AC0 xjmp L10
0038 L7:
0038 .dbline 35
0038 .dbline 36
0038 47E7 ldi R20,1143
003A 54E0 ldi R21,4
003C 02C0 xjmp L14
003E L11:
003E .dbline 37
003E .dbline 37
003E .dbline 37
003E L12:
003E .dbline 36
003E 4150 subi R20,1
0040 5040 sbci R21,0
0042 L14:
0042 .dbline 36
0042 4030 cpi R20,0
0044 4507 cpc R20,R21
0046 D9F7 brne L11
0048 X1:
0048 .dbline 38
0048 L8:
0048 .dbline 34
0048 0150 subi R16,1
004A 1040 sbci R17,0
004C L10:
004C .dbline 34
004C 0030 cpi R16,0
004E 0107 cpc R16,R17
0050 99F7 brne L7
0052 X2:
0052 .dbline -2
0052 L6:
0052 0E940000 xcall pop_gset1
0056 .dbline 0 ; func end
0056 0895 ret
0058 .dbsym r a 20 i
0058 .dbsym r i 16 i
0058 .dbend
0058 .dbfile D:\PCF8563\1602_time\lcd1602_4h.h
0058 .dbfunc e lcd_da _lcd_da fV
0058 ; a -> R20
0058 ; data -> R22
.even
0058 _lcd_da::
0058 0E940000 xcall push_gset2
005C 602F mov R22,R16
005E .dbline -1
005E .dbline 33
005E .dbline 35
005E DA9A sbi 0x1b,2
0060 .dbline 36
0060 DB9A sbi 0x1b,3
0062 .dbline 37
0062 ; for(;n;n--)
0062 462F mov R20,R22
0064 4F60 ori R20,15
0066 .dbline 38
0066 ; {
0066 8BB3 in R24,0x1b
0068 806F ori R24,240
006A 8423 and R24,R20
006C 8BBB out 0x1b,R24
006E .dbline 39
006E ; a=i*10; //计算每声响的长度:MS
006E 02E3 ldi R16,50
0070 10E0 ldi R17,0
0072 D5DF xcall _delay_us
0074 .dbline 40
0074 ; for(;a;a--)
0074 DB98 cbi 0x1b,3
0076 .dbline 41
0076 ; {
0076 01E0 ldi R16,1
0078 10E0 ldi R17,0
007A DBDF xcall _delay_ms
007C .dbline 43
007C ; delay_us(500); //响声频率为1KHZ
007C ; SPK_TG;
007C DB9A sbi 0x1b,3
007E .dbline 44
007E ; delay_us(500);
007E 462F mov R20,R22
0080 4F70 andi R20,#0x0F
0082 4295 swap R20
0084 4F60 ori R20,15
0086 .dbline 45
0086 ; SPK_TG;
0086 8BB3 in R24,0x1b
0088 806F ori R24,240
008A 8423 and R24,R20
008C 8BBB out 0x1b,R24
008E .dbline 46
008E ; }
008E 02E3 ldi R16,50
0090 10E0 ldi R17,0
0092 C5DF xcall _delay_us
0094 .dbline 47
0094 ; SPK_OFF; //响完关闭蜂鸣器
0094 DB98 cbi 0x1b,3
0096 .dbline 48
0096 ; delay_ms(100); //每声响之间隔100MS
0096 01E0 ldi R16,1
0098 10E0 ldi R17,0
009A CBDF xcall _delay_ms
009C .dbline -2
009C L15:
009C 0E940000 xcall pop_gset2
00A0 .dbline 0 ; func end
00A0 0895 ret
00A2 .dbsym r a 20 c
00A2 .dbsym r data 22 c
00A2 .dbend
00A2 .dbfunc e lcd_comm _lcd_comm fV
00A2 ; a -> R20
00A2 ; data -> R22
.even
00A2 _lcd_comm::
00A2 0E940000 xcall push_gset2
00A6 602F mov R22,R16
00A8 .dbline -1
00A8 .dbline 53
00A8 ; }
00A8 ; }
00A8 ;
00A8 ; /**********************************
00A8 ; * 读出数据函数 *
00A8 .dbline 55
00A8 ; **********************************/
00A8 ; uchar read_timer(void)
00A8 DA98 cbi 0x1b,2
00AA .dbline 56
00AA ; {
00AA DB9A sbi 0x1b,3
00AC .dbline 57
00AC ; start(); //启动总线
00AC 462F mov R20,R22
00AE 4F60 ori R20,15
00B0 .dbline 58
00B0 ; waitack(); //等待启动完成
00B0 8BB3 in R24,0x1b
00B2 806F ori R24,240
00B4 8423 and R24,R20
00B6 8BBB out 0x1b,R24
00B8 .dbline 59
00B8 ; if(chkack()!=START)return I2C_ERR; //检查是否启动成功
00B8 02E3 ldi R16,50
00BA 10E0 ldi R17,0
00BC B0DF xcall _delay_us
00BE .dbline 60
00BE ; write_tim(SLA_W); //发送写地址
00BE DB98 cbi 0x1b,3
00C0 .dbline 61
00C0 ; write_tim(0x02); //写数据地址
00C0 01E0 ldi R16,1
00C2 10E0 ldi R17,0
00C4 B6DF xcall _delay_ms
00C6 .dbline 63
00C6 ;
00C6 ; start();
00C6 DB9A sbi 0x1b,3
00C8 .dbline 64
00C8 ; waitack(); //等待启动完成
00C8 462F mov R20,R22
00CA 4F70 andi R20,#0x0F
00CC 4295 swap R20
00CE 4F60 ori R20,15
00D0 .dbline 65
00D0 ; if(chkack()!=RESTART)return I2C_ERR; //检查是否启动成功
00D0 8BB3 in R24,0x1b
00D2 806F ori R24,240
00D4 8423 and R24,R20
00D6 8BBB out 0x1b,R24
00D8 .dbline 66
00D8 ; write_tim(SLA_R); //发送读地址
00D8 02E3 ldi R16,50
00DA 10E0 ldi R17,0
00DC A0DF xcall _delay_us
00DE .dbline 67
00DE ;
00DE DB98 cbi 0x1b,3
00E0 .dbline 68
00E0 ; timer[0]=read_tim()&0x7F; //读出秒数据
00E0 01E0 ldi R16,1
00E2 10E0 ldi R17,0
00E4 A6DF xcall _delay_ms
00E6 .dbline -2
00E6 L16:
00E6 0E940000 xcall pop_gset2
00EA .dbline 0 ; func end
00EA 0895 ret
00EC .dbsym r a 20 c
00EC .dbsym r data 22 c
00EC .dbend
00EC .dbfunc e lcd_comm_b _lcd_comm_b fV
00EC ; a -> R20
00EC ; data -> R20
.even
00EC _lcd_comm_b::
00EC 0E940000 xcall push_gset1
00F0 402F mov R20,R16
00F2 .dbline -1
00F2 .dbline 73
00F2 ; timer[1]=read_tim()&0x7F; //读出分数据
00F2 ; timer[2]=read_tim()&0x3F; //读出时数据
00F2 ; timer[3]=read_tim()&0x3F; //读出日数据
00F2 ; timer[4]=read_tim()&0x07; //读出周数据
00F2 ; if(timer[4]==0)timer[4]=7;
00F2 .dbline 75
00F2 ; timer[5]=read_tim(); //读出月数据
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -