📄 clock.lis
字号:
.module clock.c
.area vector(rom, abs)
.org 12
000C 6AC1 rjmp _timer1
.area code(ram, con, rel)
.area lit(rom, con, rel)
0000 _tabel::
0000 3F06 .byte 63,6
0002 5B4F .byte 91,'O
0004 666D .byte 'f,'m
0006 7D07 .byte 125,7
0008 7F6F .byte 127,'o
000A 777C .byte 'w,124
000C 395E .byte 57,94
000E 7971 .byte 'y,'q
0010 .dbfile D:\ICC-AVR\examples.sl\clock\clock.c
0010 .dbsym s tabel _tabel Ac[16:16]
.area data(ram, con, rel)
0000 .dbfile D:\ICC-AVR\examples.sl\clock\clock.c
0000 _ledbuff::
0000 .blkb 2
.area idata
0000 3F3F .byte 63,63
.area data(ram, con, rel)
0002 .dbfile D:\ICC-AVR\examples.sl\clock\clock.c
0002 .blkb 2
.area idata
0002 3F3F .byte 63,63
.area data(ram, con, rel)
0004 .dbfile D:\ICC-AVR\examples.sl\clock\clock.c
0004 .blkb 2
.area idata
0004 3F3F .byte 63,63
.area data(ram, con, rel)
0006 .dbfile D:\ICC-AVR\examples.sl\clock\clock.c
0006 .dbsym s ledbuff _ledbuff Ac[6:6]
0006 _time::
0006 .blkb 2
.area idata
0006 0000 .byte 0,0
.area data(ram, con, rel)
0008 .dbfile D:\ICC-AVR\examples.sl\clock\clock.c
0008 .blkb 1
.area idata
0008 00 .byte 0
.area data(ram, con, rel)
0009 .dbfile D:\ICC-AVR\examples.sl\clock\clock.c
0009 .dbsym s time _time Ac[3:3]
0009 _flag::
0009 .blkb 1
.area idata
0009 00 .byte 0
.area data(ram, con, rel)
000A .dbfile D:\ICC-AVR\examples.sl\clock\clock.c
000A .dbsym s flag _flag c
.area text(rom, con, rel)
0000 .dbfile D:\ICC-AVR\examples.sl\clock\clock.c
0000 .dbfunc s port_init _port_init fI
.even
0000 _port_init::
0000 .dbline 28{
; /**********************************************
; http://www.sl.com.cn
; 双龙电子公司----电脑时钟演示程序(ICCAVR)
; 作者:詹卫前
; 1、学习定时器T1溢出中断的使用
; 2、学习电脑时钟的编程方法
; 3、在程序运行时按SHIFT进行校时
; 使用注意:1、应包含头文件slavr.h
; 2、在工程选项中的Additional Lib中填入slavr
; 使用编译器使用附加库文件libslavr.a
; ***********************************************/
; #include <io8515.h>
; #include <macros.h>
; #include <slavr.h>
; #pragma interrupt_handler timer1:7
; #pragma data:code
; /* 七段译码字形表 */
; const unsigned char tabel[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
; #pragma data:data
; /* 显示缓冲区 */
; unsigned char ledbuff[]={0x3f,0x3f,0x3f,0x3f,0x3f,0x3f};
; unsigned char time[3]={0,0,0};
; unsigned char flag=0;
; /*****************************************
; 初始化
; *****************************************/
; void port_init(void)
; {
0000 .dbline 29
; DDRD=0x3f;
0000 8FE3 ldi R24,63
0002 81BB out 0x11,R24
0004 .dbline 30
; DDRB=0xff;
0004 8FEF ldi R24,255
0006 87BB out 0x17,R24
0008 .dbline 31
; PORTD=0xff;
0008 82BB out 0x12,R24
000A .dbline 32
; PORTB=0xff;
000A 88BB out 0x18,R24
000C .dbline 33
; TIMSK=0x80;//开放T1溢出中断
000C 80E8 ldi R24,128
000E 89BF out 0x39,R24
0010 .dbline 34
; TCCR1A=0x00;
0010 2224 clr R2
0012 2FBC out 0x2f,R2
0014 .dbline 35
; TCCR1B=0x04;
0014 84E0 ldi R24,4
0016 8EBD out 0x2e,R24
0018 .dbline 36
; TCNT1=0x85ee;
0018 8EEE ldi R24,-31250
001A 95E8 ldi R25,-123
001C 90934D00 sts 76+1,R25
0020 80934C00 sts 76,R24
0024 .dbline 37
; SEI();
0024 7894 sei
0026 .dbline 38}
; }
0026 L1:
0026 0895 ret
0028 .dbfunc s hextobcd _hextobcd fI
; temp -> R20
; i -> R22
.even
0028 _hextobcd::
0028 00D0 rcall push_gset2
002A .dbline 43{
; /*****************************************
; 刷新LED显示缓冲区
; *****************************************/
; void hextobcd (void)
; {
002A .dbline 45
; unsigned char i,temp;
; for (i=0;i<3;i++)
002A 6627 clr R22
002C 4CC0 rjmp L6
002E L3:
002E .dbline 46
002E .dbline 47
002E 80E0 ldi R24,<_time
0030 90E0 ldi R25,>_time
0032 E62F mov R30,R22
0034 FF27 clr R31
0036 E80F add R30,R24
0038 F91F adc R31,R25
003A 0081 ldd R16,z+0
003C 1AE0 ldi R17,10
003E 00D0 rcall div8u
0040 402F mov R20,R16
0042 .dbline 48
0042 1AE0 ldi R17,10
0044 00D0 rcall mod8u
0046 402F mov R20,R16
0048 .dbline 49
0048 262E mov R2,R22
004A 3324 clr R3
004C 220C lsl R2
004E 331C rol R3
0050 E5E0 ldi R30,5
0052 F0E0 ldi R31,0
0054 E219 sub R30,R2
0056 F309 sbc R31,R3
0058 80E0 ldi R24,<_ledbuff
005A 90E0 ldi R25,>_ledbuff
005C E80F add R30,R24
005E F91F adc R31,R25
0060 80E0 ldi R24,<_tabel
0062 90E0 ldi R25,>_tabel
0064 242E mov R2,R20
0066 3324 clr R3
0068 280E add R2,R24
006A 391E adc R3,R25
006C FA93 st -y,R31
006E EA93 st -y,R30
0070 E22D mov R30,R2
0072 F32D mov R31,R3
0074 C895 lpm
0076 E991 ld R30,y+
0078 F991 ld R31,y+
007A 0082 std z+0,R0
007C .dbline 50
007C 80E0 ldi R24,<_time
007E 90E0 ldi R25,>_time
0080 E62F mov R30,R22
0082 FF27 clr R31
0084 E80F add R30,R24
0086 F91F adc R31,R25
0088 0081 ldd R16,z+0
008A 1AE0 ldi R17,10
008C 00D0 rcall mod8u
008E 402F mov R20,R16
0090 .dbline 51
0090 262E mov R2,R22
0092 3324 clr R3
0094 220C lsl R2
0096 331C rol R3
0098 E4E0 ldi R30,4
009A F0E0 ldi R31,0
009C E219 sub R30,R2
009E F309 sbc R31,R3
00A0 80E0 ldi R24,<_ledbuff
00A2 90E0 ldi R25,>_ledbuff
00A4 E80F add R30,R24
00A6 F91F adc R31,R25
00A8 80E0 ldi R24,<_tabel
00AA 90E0 ldi R25,>_tabel
00AC 242E mov R2,R20
00AE 3324 clr R3
00B0 280E add R2,R24
00B2 391E adc R3,R25
00B4 FA93 st -y,R31
00B6 EA93 st -y,R30
00B8 E22D mov R30,R2
00BA F32D mov R31,R3
00BC C895 lpm
00BE E991 ld R30,y+
00C0 F991 ld R31,y+
00C2 0082 std z+0,R0
00C4 .dbline 52
00C4 L4:
00C4 .dbline 45
00C4 6395 inc R22
00C6 L6:
00C6 .dbline 45
00C6 6330 cpi R22,3
00C8 08F4 brsh X0
00CA B1CF rjmp L3
00CC X0:
00CC .dbline 53}
; {
; temp=time[i]/10;
; temp=temp%10;
; ledbuff[5-2*i]=tabel[temp];
; temp=time[i]%10;
; ledbuff[4-2*i]=tabel[temp];
; }
; }
00CC L2:
00CC 00D0 rcall pop_gset2
00CE 0895 ret
00D0 .dbsym r temp 20 c
00D0 .dbsym r i 22 c
00D0 .dbfunc s display _display fI
; i -> R20
.even
00D0 _display::
00D0 00D0 rcall push_gset1
00D2 .dbline 58{
; /*****************************************
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -