📄 tc.lis
字号:
.module tc.c
.area text(rom, con, rel)
0000 .dbfile G:\燕洪成\gra_des\exper\tc\tc.c
0000 .dbfile G:\燕洪成\gra_des\exper\inc\myfun.h
0000 .dbfunc e Delayus _Delayus fV
0000 ; time -> R16,R17
.even
0000 _Delayus::
0000 .dbline -1
0000 .dbline 4
0000 ; #define uchar unsigned char
0000 ; //******DelayTime*******//
0000 ; void Delayus(int time)
0000 ; {
0000 L2:
0000 .dbline 6
0000 ; do
0000 ; time--;
0000 0150 subi R16,1
0002 1040 sbci R17,0
0004 L3:
0004 .dbline 7
0004 ; while(time>1);
0004 81E0 ldi R24,1
0006 90E0 ldi R25,0
0008 8017 cp R24,R16
000A 9107 cpc R25,R17
000C CCF3 brlt L2
000E X0:
000E .dbline -2
000E L1:
000E .dbline 0 ; func end
000E 0895 ret
0010 .dbsym r time 16 I
0010 .dbend
0010 .dbfunc e Delayms _Delayms fV
0010 ; time -> R20,R21
.even
0010 _Delayms::
0010 4A93 st -y,R20
0012 5A93 st -y,R21
0014 A801 movw R20,R16
0016 .dbline -1
0016 .dbline 10
0016 ; }
0016 ; void Delayms(unsigned int time)
0016 ; {
0016 05C0 xjmp L7
0018 L6:
0018 .dbline 12
0018 ; while(time!=0)
0018 ; {
0018 .dbline 13
0018 ; Delayus(1000);
0018 08EE ldi R16,1000
001A 13E0 ldi R17,3
001C F1DF xcall _Delayus
001E .dbline 14
001E ; time--;
001E 4150 subi R20,1
0020 5040 sbci R21,0
0022 .dbline 15
0022 ; }
0022 L7:
0022 .dbline 11
0022 4030 cpi R20,0
0024 4507 cpc R20,R21
0026 C1F7 brne L6
0028 X1:
0028 .dbline -2
0028 L5:
0028 .dbline 0 ; func end
0028 5991 ld R21,y+
002A 4991 ld R20,y+
002C 0895 ret
002E .dbsym r time 20 i
002E .dbend
002E .dbfile G:\燕洪成\gra_des\exper\tc\tc.c
002E .dbfunc e PORT_Init _PORT_Init fV
.even
002E _PORT_Init::
002E .dbline -1
002E .dbline 14
002E ; // **************************************************************
002E ; // *** 实验: Timer/Counter ***
002E ; // *** 2007年10月13日 ***
002E ; // *** 目标MCU:MEGA168v 晶振:内部 8MHZ ***
002E ; // *** fuse_config:CLKDIV8 disabled ***
002E ; // **************************************************************
002E ; //set_bit:PORTD |=(1<<PORTD3);
002E ; //clr_bit:PORTD &=~(1<<PORTD3);
002E ; #include<iom168v.h>
002E ; #include<macros.h>
002E ; #include<myfun.h>
002E ;
002E ; void PORT_Init(void)
002E ; {
002E .dbline 15
002E ; DDRD = 0xFF;
002E 8FEF ldi R24,255
0030 8AB9 out 0xa,R24
0032 .dbline -2
0032 L9:
0032 .dbline 0 ; func end
0032 0895 ret
0034 .dbend
.area data(ram, con, rel)
0000 .dbfile G:\燕洪成\gra_des\exper\tc\tc.c
0000 _counter::
0000 .blkb 2
.area idata
0000 0000 .word 0
.area data(ram, con, rel)
0002 .dbfile G:\燕洪成\gra_des\exper\tc\tc.c
0002 .dbsym e counter _counter i
.area text(rom, con, rel)
0034 .dbfile G:\燕洪成\gra_des\exper\tc\tc.c
0034 .dbfunc e timer0_init _timer0_init fV
.even
0034 _timer0_init::
0034 .dbline -1
0034 .dbline 25
0034 ; }
0034 ; //*************************************************//
0034 ; //******************* TC **********************//
0034 ; //*************************************************//
0034 ; unsigned int counter=0;
0034 ; //prescale:8;WGM: Normal;
0034 ; //desired value: 5KHz
0034 ; //actual value: 5.009KHz (0.2%)
0034 ; void timer0_init(void)
0034 ; {
0034 .dbline 26
0034 ; TCCR0B = 0x00; //stop
0034 2224 clr R2
0036 25BC out 0x25,R2
0038 .dbline 27
0038 ; TCNT0 = 0x10; //set count
0038 80E1 ldi R24,16
003A 86BD out 0x26,R24
003C .dbline 28
003C ; TCCR0A = 0x00;
003C 24BC out 0x24,R2
003E .dbline 29
003E ; TIMSK0 = 0x01; //enable timer overflow interrupt
003E 81E0 ldi R24,1
0040 80936E00 sts 110,R24
0044 .dbline 30
0044 ; TCCR0B = 0x02; //start timer
0044 82E0 ldi R24,2
0046 85BD out 0x25,R24
0048 .dbline -2
0048 L10:
0048 .dbline 0 ; func end
0048 0895 ret
004A .dbend
.area vector(rom, abs)
.org 64
0040 0C942500 jmp _timer0_ovf_isr
.area text(rom, con, rel)
004A .dbfile G:\燕洪成\gra_des\exper\tc\tc.c
004A .dbfunc e timer0_ovf_isr _timer0_ovf_isr fV
.even
004A _timer0_ovf_isr::
004A 2A92 st -y,R2
004C 3A92 st -y,R3
004E 8A93 st -y,R24
0050 9A93 st -y,R25
0052 EA93 st -y,R30
0054 2FB6 in R2,0x3f
0056 2A92 st -y,R2
0058 .dbline -1
0058 .dbline 34
0058 ; }
0058 ; #pragma interrupt_handler timer0_ovf_isr:17
0058 ; void timer0_ovf_isr(void)
0058 ; {
0058 .dbline 35
0058 ; TCNT0 = 0x10; //set count
0058 80E1 ldi R24,16
005A 86BD out 0x26,R24
005C .dbline 36
005C ; counter++;
005C 80910000 lds R24,_counter
0060 90910100 lds R25,_counter+1
0064 0196 adiw R24,1
0066 90930100 sts _counter+1,R25
006A 80930000 sts _counter,R24
006E .dbline 37
006E ; if(counter == 4000)
006E 803A cpi R24,160
0070 EFE0 ldi R30,15
0072 9E07 cpc R25,R30
0074 09F4 brne L12
0076 X2:
0076 .dbline 38
0076 ; PORTD |= (1<<PORTD3);
0076 5B9A sbi 0xb,3
0078 L12:
0078 .dbline 39
0078 ; if(counter == 8000)
0078 80910000 lds R24,_counter
007C 90910100 lds R25,_counter+1
0080 8034 cpi R24,64
0082 EFE1 ldi R30,31
0084 9E07 cpc R25,R30
0086 39F4 brne L14
0088 X3:
0088 .dbline 40
0088 ; {
0088 .dbline 41
0088 ; counter = 0;
0088 2224 clr R2
008A 3324 clr R3
008C 30920100 sts _counter+1,R3
0090 20920000 sts _counter,R2
0094 .dbline 42
0094 ; PORTD &= ~(1<<PORTD3);
0094 5B98 cbi 0xb,3
0096 .dbline 43
0096 ; }
0096 L14:
0096 .dbline -2
0096 L11:
0096 .dbline 0 ; func end
0096 2990 ld R2,y+
0098 2FBE out 0x3f,R2
009A E991 ld R30,y+
009C 9991 ld R25,y+
009E 8991 ld R24,y+
00A0 3990 ld R3,y+
00A2 2990 ld R2,y+
00A4 1895 reti
00A6 .dbend
00A6 .dbfunc e main _main fV
.even
00A6 _main::
00A6 .dbline -1
00A6 .dbline 49
00A6 ; }
00A6 ; //*************************************************//
00A6 ; //****************** TC_over **********************//
00A6 ; //*************************************************//
00A6 ; void main(void)
00A6 ; {
00A6 .dbline 50
00A6 ; CLI();
00A6 F894 cli
00A8 .dbline 51
00A8 ; PORT_Init();
00A8 C2DF xcall _PORT_Init
00AA .dbline 52
00AA ; timer0_init();
00AA C4DF xcall _timer0_init
00AC .dbline 53
00AC ; SEI();
00AC 7894 sei
00AE L17:
00AE .dbline 55
00AE ;
00AE ; while(1) ;
00AE L18:
00AE .dbline 55
00AE FFCF xjmp L17
00B0 X4:
00B0 .dbline -2
00B0 L16:
00B0 .dbline 0 ; func end
00B0 0895 ret
00B2 .dbend
00B2 ; }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -