📄 timer.lst
字号:
__start:
__text_start:
11 E5CF LDI R28,0x5F
12 E0D2 LDI R29,2
13 BFCD OUT 0x3D,R28
14 BFDE OUT 0x3E,R29
15 51CE SUBI R28,0x1E
16 40D0 SBCI R29,0
17 EA0A LDI R16,0xAA
18 8308 STD Y+0,R16
19 2400 CLR R0
1A E6E0 LDI R30,0x60
1B E0F0 LDI R31,0
1C E010 LDI R17,0
1D 37E3 CPI R30,0x73
1E 07F1 CPC R31,R17
1F F011 BEQ 0x0022
20 9201 ST R0,Z+
21 CFFB RJMP 0x001D
22 8300 STD Z+0,R16
23 E2E2 LDI R30,0x22
24 E0F0 LDI R31,0
25 E6A0 LDI R26,0x60
26 E0B0 LDI R27,0
27 E010 LDI R17,0
28 E000 LDI R16,0
29 BF0B OUT 0x3B,R16
2A 32E2 CPI R30,0x22
2B 07F1 CPC R31,R17
2C F021 BEQ 0x0031
2D 95C8 LPM
2E 9631 ADIW R30,1
2F 920D ST R0,X+
30 CFF9 RJMP 0x002A
31 D167 RCALL _main
_exit:
32 CFFF RJMP _exit
_delay_nus:
i --> R10
n --> R16
33 92AA ST R10,-Y
FILE: C:\DOCUME~1\Administrator.27F5F4061F03467\桌面\TIMER\timer.c
(0001) #include <iom8515v.h>
(0002) #include <macros.h>
(0003) #define uchar unsigned char
(0004) #define uint unsigned int
(0005) #define DQ PD2
(0006) #define HW 0x04
(0007) uchar HW_OLD;
(0008) uint IRCode[3],IRCON,f,flag,x;
(0009) uint m,c;
(0010) void delay_nus(unsigned int n)//n微秒延时函数
(0011) {
(0012) uchar i;
(0013) for (i=0;i<n;i++)
34 24AA CLR R10
35 C002 RJMP 0x0038
(0014) {
(0015) asm("nop");
36 0000 NOP
37 94A3 INC R10
38 2C2A MOV R2,R10
39 2433 CLR R3
3A 1620 CP R2,R16
3B 0631 CPC R3,R17
3C F3C8 BCS 0x0036
3D 90A9 LD R10,Y+
3E 9508 RET
_delay_nms:
i --> R20
n --> R10
3F D161 RCALL push_xgset300C
40 0158 MOVW R10,R16
(0016) }
(0017) }
(0018) void delay_nms(unsigned int n)//n毫秒延时函数
(0019) {
(0020) unsigned int i;
(0021) for (i=0;i<n;i++) //执行n次1毫秒延时
41 2744 CLR R20
42 2755 CLR R21
43 C005 RJMP 0x0049
(0022) delay_nus(1000);
44 EE08 LDI R16,0xE8
45 E013 LDI R17,3
46 DFEC RCALL _delay_nus
47 5F4F SUBI R20,0xFF
48 4F5F SBCI R21,0xFF
49 154A CP R20,R10
4A 055B CPC R21,R11
4B F3C0 BCS 0x0044
4C C159 RJMP pop_xgset300C
(0023) }
(0024) void uart0_init(void)
(0025) {
(0026) UCSRB = 0x00; //disable while setting baud rate
_uart0_init:
4D 2422 CLR R2
4E B82A OUT 0x0A,R2
(0027) UCSRA = 0x00;
4F B82B OUT 0x0B,R2
(0028) UCSRC = BIT(URSEL) | 0x26;
50 EA86 LDI R24,0xA6
51 BD80 OUT 0x20,R24
(0029) UBRRL = 0x33; //set baud rate lo
52 E383 LDI R24,0x33
53 B989 OUT 0x09,R24
(0030) UBRRH = 0x00; //set baud rate hi
54 BC20 OUT 0x20,R2
(0031) UCSRB = 0x18;
55 E188 LDI R24,0x18
56 B98A OUT 0x0A,R24
57 9508 RET
(0032) }
(0033) void sendchar(uchar num)
(0034) {
(0035) UDR=num;
_sendchar:
num --> R16
58 B90C OUT 0x0C,R16
(0036) while(!(UCSRA&(1<<TXC)));
59 9B5E SBIS 0x0B,6
5A CFFE RJMP 0x0059
(0037) UCSRA |= (1<<TXC);
5B 9A5E SBI 0x0B,6
5C 9508 RET
_int0_isr:
5D 920A ST R0,-Y
5E 921A ST R1,-Y
5F 922A ST R2,-Y
60 923A ST R3,-Y
61 924A ST R4,-Y
62 925A ST R5,-Y
63 926A ST R6,-Y
64 927A ST R7,-Y
65 928A ST R8,-Y
66 929A ST R9,-Y
67 930A ST R16,-Y
68 931A ST R17,-Y
69 932A ST R18,-Y
6A 933A ST R19,-Y
6B 938A ST R24,-Y
6C 939A ST R25,-Y
6D 93AA ST R26,-Y
6E 93BA ST R27,-Y
6F 93EA ST R30,-Y
70 93FA ST R31,-Y
71 B60F IN R0,0x3F
72 920A ST R0,-Y
(0038) }
(0039) #pragma interrupt_handler int0_isr:iv_INT0
(0040) void int0_isr(void)
(0041) {
(0042) GICR=0X00; //关外部中断
73 2422 CLR R2
74 BE2B OUT 0x3B,R2
(0043) init_devices_timer0(); //定时器初始化并开定时器
75 D11D RCALL _init_devices_timer0
76 9009 LD R0,Y+
77 BE0F OUT 0x3F,R0
78 91F9 LD R31,Y+
79 91E9 LD R30,Y+
7A 91B9 LD R27,Y+
7B 91A9 LD R26,Y+
7C 9199 LD R25,Y+
7D 9189 LD R24,Y+
7E 9139 LD R19,Y+
7F 9129 LD R18,Y+
80 9119 LD R17,Y+
81 9109 LD R16,Y+
82 9099 LD R9,Y+
83 9089 LD R8,Y+
84 9079 LD R7,Y+
85 9069 LD R6,Y+
86 9059 LD R5,Y+
87 9049 LD R4,Y+
88 9039 LD R3,Y+
89 9029 LD R2,Y+
8A 9019 LD R1,Y+
8B 9009 LD R0,Y+
8C 9518 RETI
(0044) }
(0045) void init_devices_int0(void)
(0046) {
(0047) CLI();
_init_devices_int0:
8D 94F8 BCLR 7
(0048) MCUCR = 0x02;
8E E082 LDI R24,2
8F BF85 OUT 0x35,R24
(0049) EMCUCR = 0x00;
90 2422 CLR R2
91 BE26 OUT 0x36,R2
(0050) GICR = 0x40;
92 E480 LDI R24,0x40
93 BF8B OUT 0x3B,R24
(0051) SEI();
94 9478 BSET 7
95 9508 RET
(0052) }
(0053)
(0054)
(0055) void timer0_init(void)
(0056) {
(0057) TCCR0 = 0x00; //关定时器
_timer0_init:
96 2422 CLR R2
97 BE23 OUT 0x33,R2
(0058) TCNT0 = 0xb0; //定时80us
98 EB80 LDI R24,0xB0
99 BF82 OUT 0x32,R24
(0059) OCR0 = 0x50;
9A E580 LDI R24,0x50
9B BF81 OUT 0x31,R24
(0060) TCCR0 = 0x02; //定时器开始计时8分频
9C E082 LDI R24,2
9D BF83 OUT 0x33,R24
9E 9508 RET
_timer0_ovf_isr:
j --> R20
9F 920A ST R0,-Y
A0 921A ST R1,-Y
A1 922A ST R2,-Y
A2 923A ST R3,-Y
A3 924A ST R4,-Y
A4 925A ST R5,-Y
A5 926A ST R6,-Y
A6 927A ST R7,-Y
A7 928A ST R8,-Y
A8 929A ST R9,-Y
A9 930A ST R16,-Y
AA 931A ST R17,-Y
AB 932A ST R18,-Y
AC 933A ST R19,-Y
AD 938A ST R24,-Y
AE 939A ST R25,-Y
AF 93AA ST R26,-Y
B0 93BA ST R27,-Y
B1 93EA ST R30,-Y
B2 93FA ST R31,-Y
B3 B60F IN R0,0x3F
B4 920A ST R0,-Y
B5 D0EB RCALL push_xgset300C
(0061)
(0062) }
(0063) /********************定时器中断服务函数,在此处理接收到的数据************************
(0064) ************************************************************************************/
(0065) #pragma interrupt_handler timer0_ovf_isr:iv_TIM0_OVF
(0066) void timer0_ovf_isr(void)
(0067) {
(0068) uchar j;
(0069) TIMSK = 0x00; //关定时器中断
B6 2422 CLR R2
B7 BE29 OUT 0x39,R2
(0070) TCCR0 = 0x00; //定时器停止计时
B8 BE23 OUT 0x33,R2
(0071) TCNT0 = 0xb0; //重新装入定时的初值
B9 EB80 LDI R24,0xB0
BA BF82 OUT 0x32,R24
(0072) c++; //c记录定时器中断的次数
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -