📄 t0时钟.lis
字号:
00D2 2AE0 ldi R18,10
00D4 30E0 ldi R19,0
00D6 8A01 movw R16,R20
00D8 0E940000 xcall mod16u
00DC F801 movw R30,R16
00DE 80E0 ldi R24,<_discode
00E0 90E0 ldi R25,>_discode
00E2 E80F add R30,R24
00E4 F91F adc R31,R25
00E6 E491 lpm R30,Z
00E8 EBBB out 0x1b,R30
00EA .dbline 39
00EA ; void initial(void)
00EA 05E0 ldi R16,5
00EC 10E0 ldi R17,0
00EE A3DF xcall _delay_nms
00F0 .dbline 40
00F0 ; {
00F0 C39A sbi 0x18,3
00F2 .dbline -2
00F2 L17:
00F2 0E940000 xcall pop_gset1
00F6 .dbline 0 ; func end
00F6 0895 ret
00F8 .dbsym r number 20 i
00F8 .dbend
00F8 .dbfile D:\M16开发板实验教程\icc-avr\T0CTCT~1\T0时钟.c
00F8 .dbfunc e main _main fV
00F8 ; disvalue -> R20,R21
.even
00F8 _main::
00F8 .dbline -1
00F8 .dbline 25
00F8 .dbline 26
00F8 0FD0 xcall _initial
00FA 0CC0 xjmp L20
00FC L19:
00FC .dbline 29
00FC .dbline 31
00FC 20900000 lds R2,_minute
0100 84E6 ldi R24,100
0102 829D mul R24,R2
0104 A001 movw R20,R0
0106 20900100 lds R2,_second
010A 3324 clr R3
010C 420D add R20,R2
010E 531D adc R21,R3
0110 .dbline 32
0110 8A01 movw R16,R20
0112 A0DF xcall _display
0114 .dbline 33
0114 L20:
0114 .dbline 28
0114 F3CF xjmp L19
0116 X0:
0116 .dbline -2
0116 L18:
0116 .dbline 0 ; func end
0116 0895 ret
0118 .dbsym r disvalue 20 i
0118 .dbend
0118 .dbfunc e initial _initial fV
.even
0118 _initial::
0118 .dbline -1
0118 .dbline 40
0118 .dbline 41
0118 ; PORTA=0XFF; //A口初始化
0118 8FEF ldi R24,255
011A 8BBB out 0x1b,R24
011C .dbline 42
011C ; DDRA=0XFF; //out
011C 8ABB out 0x1a,R24
011E .dbline 43
011E ; PORTB=0XFF; //B口初始化
011E 88BB out 0x18,R24
0120 .dbline 44
0120 ; DDRB=0XFF;
0120 87BB out 0x17,R24
0122 .dbline 45
0122 ; PORTC=0XFF; //其它口上拉电阻有效
0122 85BB out 0x15,R24
0124 .dbline 46
0124 ; PORTD=0XFF;
0124 82BB out 0x12,R24
0126 .dbline 47
0126 ; _SEI();
0126 7894 sei
0128 .dbline 48
0128 ; OCR0=249; //定时250us ORC0+1
0128 89EF ldi R24,249
012A 8CBF out 0x3c,R24
012C .dbline 49
012C ; TIMSK|=(1<<OCIE0); //比较匹配中断允许
012C 89B7 in R24,0x39
012E 8260 ori R24,2
0130 89BF out 0x39,R24
0132 .dbline 50
0132 ; TCCR0|=(1<<WGM01)|(1<<CS01); //CTC模式,8分频
0132 83B7 in R24,0x33
0134 8A60 ori R24,10
0136 83BF out 0x33,R24
0138 .dbline -2
0138 L22:
0138 .dbline 0 ; func end
0138 0895 ret
013A .dbend
.area vector(rom, abs)
.org 76
004C 0C949D00 jmp _T0INT
.area text(rom, con, rel)
013A .dbfile D:\M16开发板实验教程\icc-avr\T0CTCT~1\T0时钟.c
013A .dbfunc e T0INT _T0INT fV
.even
013A _T0INT::
013A 2A92 st -y,R2
013C 3A92 st -y,R3
013E 8A93 st -y,R24
0140 9A93 st -y,R25
0142 EA93 st -y,R30
0144 2FB6 in R2,0x3f
0146 2A92 st -y,R2
0148 .dbline -1
0148 .dbline 87
0148 ; /*---------------------------------------------------------
0148 ; TCCR0
0148 ; 7: FOC0--------Force Output Campare
0148 ; 6,3 WGM01:0-----Waveform Generator Mode
0148 ; 00----------Normal
0148 ; 01----------PWM,Phase Correct
0148 ; 10----------CTC
0148 ; 11----------Fast PWM
0148 ; 5,4 COM11:0-----Compare Match Output Mode
0148 ; ----------------------------------------
0148 ; Non PWM mode
0148 ; ----------------------------------------
0148 ; 00----------Normal Port Operation, OC0 disconnected
0148 ; 01----------Toggle OC0 on compare match
0148 ; 10----------Clear OC0 on compare match
0148 ; 11----------Set OC0 on compare match
0148 ; 2--0 CS02:0------Clock Select
0148 ; 000---------None clock select
0148 ; 001---------clk(io)
0148 ; 010---------clk(io)/8
0148 ; 011---------clk(io)/64
0148 ; 100---------clk(io)/256
0148 ; 101---------clk(io)/1024
0148 ; 110---------T0 pin,falling edge
0148 ; 111---------T0 pin,rising edge
0148 ; ----------------------------------------------------------*/
0148 ; }
0148 ;
0148 ; /*------------------------------------------------------------
0148 ; function: interrupt service routine,it increases micsec,minute
0148 ; second , and the main loop routine display the current
0148 ; time
0148 ; -------------------------------------------------------------*/
0148 ;
0148 ; #pragma interrupt_handler T0INT: iv_TIMER0_COMP
0148 ; void T0INT(void)
0148 ; {
0148 .dbline 88
0148 ; micsec += 1;
0148 80910200 lds R24,_micsec
014C 90910300 lds R25,_micsec+1
0150 0196 adiw R24,1
0152 90930300 sts _micsec+1,R25
0156 80930200 sts _micsec,R24
015A .dbline 89
015A ; if(micsec==4000)
015A 803A cpi R24,160
015C EFE0 ldi R30,15
015E 9E07 cpc R25,R30
0160 C1F4 brne L24
0162 .dbline 90
0162 ; {
0162 .dbline 91
0162 ; micsec=0;
0162 2224 clr R2
0164 3324 clr R3
0166 30920300 sts _micsec+1,R3
016A 20920200 sts _micsec,R2
016E .dbline 92
016E ; second +=1 ;
016E 80910100 lds R24,_second
0172 8F5F subi R24,255 ; addi 1
0174 80930100 sts _second,R24
0178 .dbline 93
0178 ; if(second==60)
0178 8C33 cpi R24,60
017A 59F4 brne L26
017C .dbline 94
017C ; {
017C .dbline 95
017C ; second = 0;
017C 20920100 sts _second,R2
0180 .dbline 96
0180 ; minute += 1 ;
0180 80910000 lds R24,_minute
0184 8F5F subi R24,255 ; addi 1
0186 80930000 sts _minute,R24
018A .dbline 97
018A ; if(minute==60)
018A 8C33 cpi R24,60
018C 11F4 brne L28
018E .dbline 98
018E ; minute=0;
018E 20920000 sts _minute,R2
0192 L28:
0192 .dbline 99
0192 ; }
0192 L26:
0192 .dbline 100
0192 L24:
0192 .dbline -2
0192 L23:
0192 2990 ld R2,y+
0194 2FBE out 0x3f,R2
0196 E991 ld R30,y+
0198 9991 ld R25,y+
019A 8991 ld R24,y+
019C 3990 ld R3,y+
019E 2990 ld R2,y+
01A0 .dbline 0 ; func end
01A0 1895 reti
01A2 .dbend
.area bss(ram, con, rel)
0000 .dbfile D:\M16开发板实验教程\icc-avr\T0CTCT~1\T0时钟.c
0000 _minute::
0000 .blkb 1
0001 .dbsym e minute _minute c
0001 _second::
0001 .blkb 1
0002 .dbsym e second _second c
0002 _micsec::
0002 .blkb 2
0004 .dbsym e micsec _micsec i
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -