📄 tc.lst
字号:
__text_start:
__start:
35 EFCF LDI R28,0xFF
36 E0D4 LDI R29,4
37 BFCD OUT 0x3D,R28
38 BFDE OUT 0x3E,R29
39 51C0 SUBI R28,0x10
3A 40D0 SBCI R29,0
3B EA0A LDI R16,0xAA
3C 8308 STD Y+0,R16
3D 2400 CLR R0
3E E0E2 LDI R30,2
3F E0F1 LDI R31,1
40 E011 LDI R17,1
41 30E2 CPI R30,2
42 07F1 CPC R31,R17
43 F011 BEQ 0x0046
44 9201 ST R0,Z+
45 CFFB RJMP 0x0041
46 8300 STD Z+0,R16
47 E6E8 LDI R30,0x68
48 E0F0 LDI R31,0
49 E0A0 LDI R26,0
4A E0B1 LDI R27,1
4B E010 LDI R17,0
4C 36EA CPI R30,0x6A
4D 07F1 CPC R31,R17
4E F021 BEQ 0x0053
4F 95C8 LPM
50 9631 ADIW R30,1
51 920D ST R0,X+
52 CFF9 RJMP 0x004C
53 940E 00A9 CALL _main
_exit:
55 CFFF RJMP _exit
FILE: G:\燕洪成\gra_des\exper\inc\myfun.h
(0001) #define uchar unsigned char
(0002) //******DelayTime*******//
(0003) void Delayus(int time)
(0004) {
(0005) do
(0006) time--;
_Delayus:
time --> R16
56 5001 SUBI R16,1
57 4010 SBCI R17,0
(0007) while(time>1);
58 E081 LDI R24,1
59 E090 LDI R25,0
5A 1780 CP R24,R16
5B 0791 CPC R25,R17
5C F3CC BLT 0x0056
5D 9508 RET
_Delayms:
time --> R20
5E 934A ST R20,-Y
5F 935A ST R21,-Y
60 01A8 MOVW R20,R16
(0008) }
(0009) void Delayms(unsigned int time)
(0010) {
61 C005 RJMP 0x0067
(0011) while(time!=0)
(0012) {
(0013) Delayus(1000);
62 EE08 LDI R16,0xE8
63 E013 LDI R17,3
64 DFF1 RCALL _Delayus
(0014) time--;
65 5041 SUBI R20,1
66 4050 SBCI R21,0
67 3040 CPI R20,0
68 0745 CPC R20,R21
69 F7C1 BNE 0x0062
6A 9159 LD R21,Y+
6B 9149 LD R20,Y+
6C 9508 RET
FILE: G:\燕洪成\gra_des\exper\tc\tc.c
(0001) // **************************************************************
(0002) // *** 实验: Timer/Counter ***
(0003) // *** 2007年10月13日 ***
(0004) // *** 目标MCU:MEGA168v 晶振:内部 8MHZ ***
(0005) // *** fuse_config:CLKDIV8 disabled ***
(0006) // **************************************************************
(0007) //set_bit:PORTD |=(1<<PORTD3);
(0008) //clr_bit:PORTD &=~(1<<PORTD3);
(0009) #include<iom168v.h>
(0010) #include<macros.h>
(0011) #include<myfun.h>
(0012)
(0013) void PORT_Init(void)
(0014) {
(0015) DDRD = 0xFF;
_PORT_Init:
6D EF8F LDI R24,0xFF
6E B98A OUT 0x0A,R24
6F 9508 RET
(0016) }
(0017) //*************************************************//
(0018) //******************* TC **********************//
(0019) //*************************************************//
(0020) unsigned int counter=0;
(0021) //prescale:8;WGM: Normal;
(0022) //desired value: 5KHz
(0023) //actual value: 5.009KHz (0.2%)
(0024) void timer0_init(void)
(0025) {
(0026) TCCR0B = 0x00; //stop
_timer0_init:
70 2422 CLR R2
71 BC25 OUT 0x25,R2
(0027) TCNT0 = 0x10; //set count
72 E180 LDI R24,0x10
73 BD86 OUT 0x26,R24
(0028) TCCR0A = 0x00;
74 BC24 OUT 0x24,R2
(0029) TIMSK0 = 0x01; //enable timer overflow interrupt
75 E081 LDI R24,1
76 9380 006E STS 0x006E,R24
(0030) TCCR0B = 0x02; //start timer
78 E082 LDI R24,2
79 BD85 OUT 0x25,R24
7A 9508 RET
_timer0_ovf_isr:
7B 922A ST R2,-Y
7C 923A ST R3,-Y
7D 938A ST R24,-Y
7E 939A ST R25,-Y
7F 93EA ST R30,-Y
80 B62F IN R2,0x3F
81 922A ST R2,-Y
(0031) }
(0032) #pragma interrupt_handler timer0_ovf_isr:17
(0033) void timer0_ovf_isr(void)
(0034) {
(0035) TCNT0 = 0x10; //set count
82 E180 LDI R24,0x10
83 BD86 OUT 0x26,R24
(0036) counter++;
84 9180 0100 LDS R24,counter
86 9190 0101 LDS R25,counter+1
88 9601 ADIW R24,1
89 9390 0101 STS counter+1,R25
8B 9380 0100 STS counter,R24
(0037) if(counter == 4000)
8D 3A80 CPI R24,0xA0
8E E0EF LDI R30,0xF
8F 079E CPC R25,R30
90 F409 BNE 0x0092
(0038) PORTD |= (1<<PORTD3);
91 9A5B SBI 0x0B,3
(0039) if(counter == 8000)
92 9180 0100 LDS R24,counter
94 9190 0101 LDS R25,counter+1
96 3480 CPI R24,0x40
97 E1EF LDI R30,0x1F
98 079E CPC R25,R30
99 F439 BNE 0x00A1
(0040) {
(0041) counter = 0;
9A 2422 CLR R2
9B 2433 CLR R3
9C 9230 0101 STS counter+1,R3
9E 9220 0100 STS counter,R2
(0042) PORTD &= ~(1<<PORTD3);
A0 985B CBI 0x0B,3
(0043) }
A1 9029 LD R2,Y+
A2 BE2F OUT 0x3F,R2
A3 91E9 LD R30,Y+
A4 9199 LD R25,Y+
A5 9189 LD R24,Y+
A6 9039 LD R3,Y+
A7 9029 LD R2,Y+
A8 9518 RETI
(0044) }
(0045) //*************************************************//
(0046) //****************** TC_over **********************//
(0047) //*************************************************//
(0048) void main(void)
(0049) {
(0050) CLI();
_main:
A9 94F8 BCLR 7
(0051) PORT_Init();
AA DFC2 RCALL _PORT_Init
(0052) timer0_init();
AB DFC4 RCALL _timer0_init
(0053) SEI();
AC 9478 BSET 7
(0054)
(0055) while(1) ;
FILE: <library>
AD CFFF RJMP 0x00AD
AE 9508 RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -