📄 clock.lis
字号:
.module clock.c
.area vector(rom, abs)
.org 16
0010 37C2 rjmp _timer1_ovf
.org 18
0012 49C2 rjmp _timer0_ovf
.area data(ram, con, rel)
0000 _flag::
0000 .blkb 1
.area idata
0000 00 .byte 0
.area data(ram, con, rel)
0001 .dbfile D:\sl279\8535\clock.c
0001 .dbsym s flag _flag c
0001 _dflag::
0001 .blkb 1
.area idata
0001 00 .byte 0
.area data(ram, con, rel)
0002 .dbfile D:\sl279\8535\clock.c
0002 .dbsym s dflag _dflag c
.area text(rom, con, rel)
0000 .dbfile D:\sl279\8535\clock.c
0000 .dbfunc s receive_byte _receive_byte fI
; i -> R20
; temp -> R22
.even
0000 _receive_byte::
0000 00D0 rcall push_gset2
0002 .dbline -1
0002 .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<io8535.h>
; #include<slavr.h>
; #pragma interrupt_handler timer1_ovf:9
; #pragma interrupt_handler timer0_ovf:10
; #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)
; {
0002 .dbline 27
; unsigned char i,temp=0;
0002 6627 clr R22
0004 .dbline 28
; DDRC&=0xfb;
0004 84B3 in R24,0x14
0006 8B7F andi R24,251
0008 84BB out 0x14,R24
000A .dbline 29
; delay_us(90);
000A 0AE5 ldi R16,90
000C 10E0 ldi R17,0
000E 00D0 rcall _delay_us
0010 .dbline 30
; for(i=0;i<8;i++)
0010 4427 clr R20
0012 0FC0 rjmp L5
0014 L2:
0014 .dbline 31
; {
0014 .dbline 32
; temp=temp<<1;
0014 660F lsl R22
0016 .dbline 33
; PORTC|=0x08;//clk=1
0016 AB9A sbi 0x15,3
0018 .dbline 34
; delay_us(10);
0018 0AE0 ldi R16,10
001A 10E0 ldi R17,0
001C 00D0 rcall _delay_us
001E .dbline 35
; if((PINC&0x04)!=0)
001E 9A9B sbis 0x13,2
0020 01C0 rjmp L6
0022 .dbline 36
; temp|=0x01;
0022 6160 ori R22,1
0024 L6:
0024 .dbline 37
0024 85B3 in R24,0x15
0026 877F andi R24,247
0028 85BB out 0x15,R24
002A .dbline 38
002A 0AE0 ldi R16,10
002C 10E0 ldi R17,0
002E 00D0 rcall _delay_us
0030 .dbline 39
0030 L3:
0030 .dbline 30
0030 4395 inc R20
0032 L5:
0032 .dbline 30
0032 4830 cpi R20,8
0034 78F3 brlo L2
0036 .dbline 40
; PORTC&=0xf7;//clk=0
; delay_us(10);
; }
; DDRC|=0x04;
0036 A29A sbi 0x14,2
0038 .dbline 41
; return temp;
0038 062F mov R16,R22
003A 1127 clr R17
003C .dbline -2
003C L1:
003C 00D0 rcall pop_gset2
003E .dbline 0 ; func end
003E 0895 ret
0040 .dbsym r i 20 c
0040 .dbsym r temp 22 c
0040 .dbfunc s send_byte _send_byte fI
; i -> R20
; para -> R22
.even
0040 _send_byte::
0040 00D0 rcall push_gset2
0042 602F mov R22,R16
0044 .dbline -1
0044 .dbline 45
; }
; /* 字节发送函数 */
; void send_byte(unsigned char para)
; {
0044 .dbline 47
; unsigned char i;
; PORTC&=0xef;//cs=0
0044 85B3 in R24,0x15
0046 8F7E andi R24,239
0048 85BB out 0x15,R24
004A .dbline 48
; delay_us(90);
004A 0AE5 ldi R16,90
004C 10E0 ldi R17,0
004E 00D0 rcall _delay_us
0050 .dbline 49
; for(i=0;i<8;i++)
0050 4427 clr R20
0052 15C0 rjmp L12
0054 L9:
0054 .dbline 50
; {
0054 .dbline 51
; if((para&0x80)==0x80)
0054 862F mov R24,R22
0056 8078 andi R24,128
0058 8038 cpi R24,128
005A 11F4 brne L13
005C .dbline 52
; PORTC|=0x04;//data=1
005C AA9A sbi 0x15,2
005E 03C0 rjmp L14
0060 L13:
0060 .dbline 54
; else
; PORTC&=0xfb;//data=0
0060 85B3 in R24,0x15
0062 8B7F andi R24,251
0064 85BB out 0x15,R24
0066 L14:
0066 .dbline 55
0066 AB9A sbi 0x15,3
0068 .dbline 56
0068 0AE0 ldi R16,10
006A 10E0 ldi R17,0
006C 00D0 rcall _delay_us
006E .dbline 57
006E 85B3 in R24,0x15
0070 877F andi R24,247
0072 85BB out 0x15,R24
0074 .dbline 58
0074 0AE0 ldi R16,10
0076 10E0 ldi R17,0
0078 00D0 rcall _delay_us
007A .dbline 59
007A 660F lsl R22
007C .dbline 60
007C L10:
007C .dbline 49
007C 4395 inc R20
007E L12:
007E .dbline 49
007E 4830 cpi R20,8
0080 48F3 brlo L9
0082 .dbline -2
0082 .dbline 61
; PORTC|=0x08;//clk=1
; delay_us(10);
; PORTC&=0xf7;//clk=0
; delay_us(10);
; para=para<<1;
; }
; }
0082 L8:
0082 00D0 rcall pop_gset2
0084 .dbline 0 ; func end
0084 0895 ret
0086 .dbsym r i 20 c
0086 .dbsym r para 22 c
0086 .dbfunc s write279 _write279 fI
; cmd2 -> R20
; cmd1 -> R22
.even
0086 _write279::
0086 00D0 rcall push_gset2
0088 422F mov R20,R18
008A 602F mov R22,R16
008C .dbline -1
008C .dbline 64
; /* 写sl279双字节命令 */
; void write279(unsigned char cmd1, unsigned char cmd2)
; {
008C .dbline 65
; send_byte (cmd1);
008C 062F mov R16,R22
008E D8DF rcall _send_byte
0090 .dbline 66
; send_byte (cmd2);
0090 042F mov R16,R20
0092 D6DF rcall _send_byte
0094 .dbline 67
; PORTC|=0x10;
0094 AC9A sbi 0x15,4
0096 .dbline -2
0096 .dbline 68
; }
0096 L15:
0096 00D0 rcall pop_gset2
0098 .dbline 0 ; func end
0098 0895 ret
009A .dbsym r cmd2 20 c
009A .dbsym r cmd1 22 c
009A .dbfunc s initdis _initdis fI
.area func_lit(rom, con, rel)
0000 L59:
0000 2201 .word `L56
0002 0B01 .word `L53
0004 3801 .word `L61
0006 F300 .word `L48
0008 DB00 .word `L43
000A 3801 .word `L61
000C A600 .word `L31
000E 8E00 .word `L26
.area text(rom, con, rel)
009A .dbfile D:\sl279\8535\clock.c
; i -> R10
; key -> R20
.even
009A _initdis::
009A 00D0 rcall push_gset5
009C .dbline -1
009C .dbline 71
; /*在启动时设置时间,按shift键后进入计时状态*/
; void initdis()
; {
009C .dbline 72
; unsigned char i=7;
009C 87E0 ldi R24,7
009E A82E mov R10,R24
00A0 .dbline 73
; unsigned char key=0;
00A0 4427 clr R20
00A2 .dbline 74
; write279(0xc8,0);
00A2 2227 clr R18
00A4 08EC ldi R16,200
00A6 EFDF rcall _write279
00A8 .dbline 75
; write279(0xc9,0);
00A8 2227 clr R18
00AA 09EC ldi R16,201
00AC ECDF rcall _write279
00AE .dbline 76
; write279(0x92,1);
00AE 21E0 ldi R18,1
00B0 02E9 ldi R16,146
00B2 E9DF rcall _write279
00B4 .dbline 77
; write279(0xcb,0);
00B4 2227 clr R18
00B6 0BEC ldi R16,203
00B8 E6DF rcall _write279
00BA .dbline 78
; write279(0xcc,0);
00BA 2227 clr R18
00BC 0CEC ldi R16,204
00BE E3DF rcall _write279
00C0 .dbline 79
; write279(0x95,1);
00C0 21E0 ldi R18,1
00C2 05E9 ldi R16,149
00C4 E0DF rcall _write279
00C6 .dbline 80
; write279(0xce,0);
00C6 2227 clr R18
00C8 0EEC ldi R16,206
00CA DDDF rcall _write279
00CC .dbline 81
; write279(0xcf,0);
00CC 2227 clr R18
00CE 0FEC ldi R16,207
00D0 DADF rcall _write279
00D2 .dbline 82
; write279(0x88,0x7f);
00D2 2FE7 ldi R18,127
00D4 08E8 ldi R16,136
00D6 D7DF rcall _write279
00D8 .dbline 84
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -