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

📄 clock.lis

📁 采用c语言编写的简易电子时钟程序。利用iccavr系列开发工具编写并调试成功。利用8mhz晶振可以达到实际时钟效果。
💻 LIS
📖 第 1 页 / 共 3 页
字号:
                         .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 + -