📄 数字钟.lis
字号:
0082 ; 介 绍:8M晶振
0082 ; 入口参数:
0082 ; 出口参数:
0082 ; *************************************/
0082 ; unsigned char CountNum;//用来记录中断,第一次中断是1/500S
0082 ; unsigned char Count;//用来做1/100S
0082 ; unsigned char Time[3]={12,0,0};//表示时间,时分秒
0082 ; //初始化TC0
0082 ; void init_timer0()
0082 ; {
0082 .dbline 104
0082 ; TCCR0=0x00;//TCCR0工作于定时方式,先停止TC0
0082 2224 clr R2
0084 23BE out 0x33,R2
0086 .dbline 105
0086 ; TCNT0=0x06;//计数器初始值
0086 86E0 ldi R24,6
0088 82BF out 0x32,R24
008A .dbline 106
008A ; TIMSK|=(1<<TOIE0);//开放TOIE0中断
008A 89B7 in R24,0x39
008C 8160 ori R24,1
008E 89BF out 0x39,R24
0090 .dbline 107
0090 ; TCCR0=(1<<CS01)|(1<<CS00);//打开TC0用64分频
0090 83E0 ldi R24,3
0092 83BF out 0x33,R24
0094 .dbline -2
0094 L16:
0094 .dbline 0 ; func end
0094 0895 ret
0096 .dbend
.area vector(rom, abs)
.org 18
0012 4BC0 rjmp _timer0_fun
.area text(rom, con, rel)
0096 .dbfile E:\xiaozhiyong2009\设计资料\项目设计\ICCAVR_mega8_C\ICCAVR_mega8_数字钟\数字钟.c
0096 .dbfunc e timer0_fun _timer0_fun fV
.even
0096 _timer0_fun::
0096 2A92 st -y,R2
0098 8A93 st -y,R24
009A 9A93 st -y,R25
009C 2FB6 in R2,0x3f
009E 2A92 st -y,R2
00A0 .dbline -1
00A0 .dbline 112
00A0 ; }
00A0 ; //TC0中断函数
00A0 ; #pragma interrupt_handler timer0_fun:iv_TIMER0_OVF
00A0 ; void timer0_fun()
00A0 ; {
00A0 .dbline 113
00A0 ; TCNT0=0x06;//重装初值
00A0 86E0 ldi R24,6
00A2 82BF out 0x32,R24
00A4 .dbline 114
00A4 ; if (++CountNum==5)
00A4 80910700 lds R24,_CountNum
00A8 8F5F subi R24,255 ; addi 1
00AA 282E mov R2,R24
00AC 20920700 sts _CountNum,R2
00B0 8530 cpi R24,5
00B2 41F4 brne L18
00B4 X3:
00B4 .dbline 115
00B4 ; {
00B4 .dbline 116
00B4 ; CountNum=0;
00B4 2224 clr R2
00B6 20920700 sts _CountNum,R2
00BA .dbline 117
00BA ; Count++;
00BA 80910600 lds R24,_Count
00BE 8F5F subi R24,255 ; addi 1
00C0 80930600 sts _Count,R24
00C4 .dbline 118
00C4 ; }
00C4 L18:
00C4 .dbline 119
00C4 ; if (Count==100)//Count=100就是一秒到时了
00C4 80910600 lds R24,_Count
00C8 8436 cpi R24,100
00CA 41F4 brne L20
00CC X4:
00CC .dbline 120
00CC ; {
00CC .dbline 121
00CC ; Count=0;
00CC 2224 clr R2
00CE 20920600 sts _Count,R2
00D2 .dbline 122
00D2 ; Time[2]++;
00D2 80910200 lds R24,_Time+2
00D6 8F5F subi R24,255 ; addi 1
00D8 80930200 sts _Time+2,R24
00DC .dbline 123
00DC ; }
00DC L20:
00DC .dbline 124
00DC ; if (Time[2]==60)
00DC 80910200 lds R24,_Time+2
00E0 8C33 cpi R24,60
00E2 41F4 brne L23
00E4 X5:
00E4 .dbline 125
00E4 ; {
00E4 .dbline 126
00E4 ; Time[2]=0;
00E4 2224 clr R2
00E6 20920200 sts _Time+2,R2
00EA .dbline 127
00EA ; Time[1]++;
00EA 80910100 lds R24,_Time+1
00EE 8F5F subi R24,255 ; addi 1
00F0 80930100 sts _Time+1,R24
00F4 .dbline 128
00F4 ; }
00F4 L23:
00F4 .dbline 129
00F4 ; if (Time[1]==60)
00F4 80910100 lds R24,_Time+1
00F8 8C33 cpi R24,60
00FA 41F4 brne L28
00FC X6:
00FC .dbline 130
00FC ; {
00FC .dbline 131
00FC ; Time[1]=0;
00FC 2224 clr R2
00FE 20920100 sts _Time+1,R2
0102 .dbline 132
0102 ; Time[0]++;
0102 80910000 lds R24,_Time
0106 8F5F subi R24,255 ; addi 1
0108 80930000 sts _Time,R24
010C .dbline 133
010C ; }
010C L28:
010C .dbline 134
010C ; if (Time[0]==24)
010C 80910000 lds R24,_Time
0110 8831 cpi R24,24
0112 19F4 brne L32
0114 X7:
0114 .dbline 135
0114 ; {
0114 .dbline 136
0114 ; Time[0]=0;
0114 2224 clr R2
0116 20920000 sts _Time,R2
011A .dbline 137
011A ; }
011A L32:
011A .dbline -2
011A L17:
011A .dbline 0 ; func end
011A 2990 ld R2,y+
011C 2FBE out 0x3f,R2
011E 9991 ld R25,y+
0120 8991 ld R24,y+
0122 2990 ld R2,y+
0124 1895 reti
0126 .dbend
0126 .dbfunc e time_convert _time_convert fV
.even
0126 _time_convert::
0126 .dbline -1
0126 .dbline 151
0126 ; }
0126 ; //************************************************
0126 ;
0126 ; unsigned char Time6[6];
0126 ; /************************************
0126 ; 用 途:时间的转换
0126 ; Taget :mega8
0126 ; crystal :8M
0126 ; 介 绍:
0126 ; 入口参数:
0126 ; 出口参数:
0126 ; *************************************/
0126 ; void time_convert()
0126 ; {
0126 .dbline 152
0126 ; Time6[0]=Time[0]/10;
0126 1AE0 ldi R17,10
0128 00910000 lds R16,_Time
012C 00D0 rcall div8u
012E 00930000 sts _Time6,R16
0132 .dbline 153
0132 ; Time6[1]=Time[0]%10;
0132 1AE0 ldi R17,10
0134 00910000 lds R16,_Time
0138 00D0 rcall mod8u
013A 00930100 sts _Time6+1,R16
013E .dbline 154
013E ; Time6[2]=Time[1]/10;
013E 1AE0 ldi R17,10
0140 00910100 lds R16,_Time+1
0144 00D0 rcall div8u
0146 00930200 sts _Time6+2,R16
014A .dbline 155
014A ; Time6[3]=Time[1]%10;
014A 1AE0 ldi R17,10
014C 00910100 lds R16,_Time+1
0150 00D0 rcall mod8u
0152 00930300 sts _Time6+3,R16
0156 .dbline 156
0156 ; Time6[4]=Time[2]/10;
0156 1AE0 ldi R17,10
0158 00910200 lds R16,_Time+2
015C 00D0 rcall div8u
015E 00930400 sts _Time6+4,R16
0162 .dbline 157
0162 ; Time6[5]=Time[2]%10;
0162 1AE0 ldi R17,10
0164 00910200 lds R16,_Time+2
0168 00D0 rcall mod8u
016A 00930500 sts _Time6+5,R16
016E .dbline -2
016E L34:
016E .dbline 0 ; func end
016E 0895 ret
0170 .dbend
0170 .dbfunc e main _main fV
.even
0170 _main::
0170 .dbline -1
0170 .dbline 161
0170 ; }
0170 ;
0170 ; void main()
0170 ; {
0170 .dbline 163
0170 ;
0170 ; port_init();
0170 47DF rcall _port_init
0172 .dbline 164
0172 ; init_devices();
0172 4EDF rcall _init_devices
0174 .dbline 166
0174 ;
0174 ; init_timer0();
0174 86DF rcall _init_timer0
0176 04C0 rjmp L46
0178 L45:
0178 .dbline 168
0178 ; while(1)
0178 ; {
0178 .dbline 169
0178 ; time_convert();
0178 D6DF rcall _time_convert
017A .dbline 170
017A ; show_6_digit(Time6);
017A 00E0 ldi R16,<_Time6
017C 10E0 ldi R17,>_Time6
017E 58DF rcall _show_6_digit
0180 .dbline 171
0180 ; }
0180 L46:
0180 .dbline 167
0180 FBCF rjmp L45
0182 X8:
0182 .dbline -2
0182 L44:
0182 .dbline 0 ; func end
0182 0895 ret
0184 .dbend
.area bss(ram, con, rel)
0000 .dbfile E:\xiaozhiyong2009\设计资料\项目设计\ICCAVR_mega8_C\ICCAVR_mega8_数字钟\数字钟.c
0000 _Time6::
0000 .blkb 6
0006 .dbsym e Time6 _Time6 A[6:6]c
0006 _Count::
0006 .blkb 1
0007 .dbsym e Count _Count c
0007 _CountNum::
0007 .blkb 1
0008 .dbsym e CountNum _CountNum c
0008 ; }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -