📄 hongwai.lst
字号:
__start:
__text_start:
12 E5CF LDI R28,0x5F
13 E0D2 LDI R29,2
14 BFCD OUT 0x3D,R28
15 BFDE OUT 0x3E,R29
16 51CE SUBI R28,0x1E
17 40D0 SBCI R29,0
18 EA0A LDI R16,0xAA
19 8308 STD Y+0,R16
1A 2400 CLR R0
1B E6E1 LDI R30,0x61
1C E0F0 LDI R31,0
1D E010 LDI R17,0
1E 36E4 CPI R30,0x64
1F 07F1 CPC R31,R17
20 F011 BEQ 0x0023
21 9201 ST R0,Z+
22 CFFB RJMP 0x001E
23 8300 STD Z+0,R16
24 E2E2 LDI R30,0x22
25 E0F0 LDI R31,0
26 E6A0 LDI R26,0x60
27 E0B0 LDI R27,0
28 E010 LDI R17,0
29 E000 LDI R16,0
2A BF0B OUT 0x3B,R16
2B 32E3 CPI R30,0x23
2C 07F1 CPC R31,R17
2D F021 BEQ 0x0032
2E 95C8 LPM
2F 9631 ADIW R30,1
30 920D ST R0,X+
31 CFF9 RJMP 0x002B
32 D073 RCALL _main
_exit:
33 CFFF RJMP _exit
_delay_nus:
i --> R20
n --> R16
34 934A ST R20,-Y
35 935A ST R21,-Y
FILE: C:\DOCUME~1\Administrator.27F5F4061F03467\桌面\上升沿\jiema.c
(0001) //ICC-AVR application builder : 2008-8-7 14:56:45
(0002) // Target : M8515
(0003) // Crystal: 4.0000Mhz
(0004)
(0005) #include <iom8515v.h>
(0006) #include <macros.h>
(0007) #define uchar unsigned char
(0008) #define uint unsigned int
(0009) #define DQ PD2
(0010) #define HW (PIND&(1<<DQ)) //数据的状态
(0011) uchar IRCode[3],IRCON=0;
(0012) void delay_nus(unsigned int n)//n微秒延时函数
(0013) {
(0014) unsigned int i;
(0015) for (i=0;i<n;i++)
36 2744 CLR R20
37 2755 CLR R21
38 C003 RJMP 0x003C
(0016) {
(0017) asm("nop");
39 0000 NOP
3A 5F4F SUBI R20,0xFF
3B 4F5F SBCI R21,0xFF
3C 1740 CP R20,R16
3D 0751 CPC R21,R17
3E F3D0 BCS 0x0039
3F 9159 LD R21,Y+
40 9149 LD R20,Y+
41 9508 RET
_delay_nms:
i --> R20
n --> R10
42 D069 RCALL push_xgset300C
43 0158 MOVW R10,R16
(0018) }
(0019) }
(0020) void delay_nms(unsigned int n)//n毫秒延时函数
(0021) {
(0022) unsigned int i;
(0023) for (i=0;i<n;i++) //执行n次1毫秒延时
44 2744 CLR R20
45 2755 CLR R21
46 C005 RJMP 0x004C
(0024) delay_nus(10);
47 E00A LDI R16,0xA
48 E010 LDI R17,0
49 DFEA RCALL _delay_nus
4A 5F4F SUBI R20,0xFF
4B 4F5F SBCI R21,0xFF
4C 154A CP R20,R10
4D 055B CPC R21,R11
4E F3C0 BCS 0x0047
4F C061 RJMP pop_xgset300C
(0025) }
(0026) /************************* UART 发送数据函数*********************************************************/
(0027) void uart0_init(void)
(0028) {
(0029) UCSRB = 0x00; //disable while setting baud rate
_uart0_init:
50 2422 CLR R2
51 B82A OUT 0x0A,R2
(0030) UCSRA = 0x00;
52 B82B OUT 0x0B,R2
(0031) UCSRC = BIT(URSEL) | 0x26;
53 EA86 LDI R24,0xA6
54 BD80 OUT 0x20,R24
(0032) UBRRL = 0x33; //set baud rate lo
55 E383 LDI R24,0x33
56 B989 OUT 0x09,R24
(0033) UBRRH = 0x00; //set baud rate hi
57 BC20 OUT 0x20,R2
(0034) UCSRB = 0x18;
58 E188 LDI R24,0x18
59 B98A OUT 0x0A,R24
5A 9508 RET
(0035) }
(0036) void sendchar(uchar num)
(0037) {
(0038) UDR=num;
_sendchar:
num --> R16
5B B90C OUT 0x0C,R16
(0039) while(!(UCSRA&(1<<TXC)));
5C 9B5E SBIS 0x0B,6
5D CFFE RJMP 0x005C
(0040) UCSRA |= (1<<TXC);
5E 9A5E SBI 0x0B,6
5F 9508 RET
_int0_isr:
j --> Y,+1
flag --> Y,+1
m --> R20
60 920A ST R0,-Y
61 921A ST R1,-Y
62 922A ST R2,-Y
63 923A ST R3,-Y
64 924A ST R4,-Y
65 925A ST R5,-Y
66 926A ST R6,-Y
67 927A ST R7,-Y
68 928A ST R8,-Y
69 929A ST R9,-Y
6A 930A ST R16,-Y
6B 931A ST R17,-Y
6C 932A ST R18,-Y
6D 933A ST R19,-Y
6E 938A ST R24,-Y
6F 939A ST R25,-Y
70 93AA ST R26,-Y
71 93BA ST R27,-Y
72 93EA ST R30,-Y
73 93FA ST R31,-Y
74 B60F IN R0,0x3F
75 920A ST R0,-Y
76 934A ST R20,-Y
77 935A ST R21,-Y
(0041) }
(0042) #pragma interrupt_handler int0_isr:iv_INT0
(0043) void int0_isr(void)
(0044) {
(0045) uint flag,m=0,j;
78 2744 CLR R20
79 2755 CLR R21
(0046)
(0047) m++;
7A 5F4F SUBI R20,0xFF
7B 4F5F SBCI R21,0xFF
(0048) if(m==2)
7C 3042 CPI R20,2
7D E0E0 LDI R30,0
7E 075E CPC R21,R30
7F F431 BNE 0x0086
(0049) { GICR = 0x00;
80 2422 CLR R2
81 BE2B OUT 0x3B,R2
(0050) uart0_init();
82 DFCD RCALL _uart0_init
(0051) sendchar(IRCode[1]); }
83 9100 0062 LDS R16,IRCode+1
85 DFD5 RCALL _sendchar
86 9159 LD R21,Y+
87 9149 LD R20,Y+
88 9009 LD R0,Y+
89 BE0F OUT 0x3F,R0
8A 91F9 LD R31,Y+
8B 91E9 LD R30,Y+
8C 91B9 LD R27,Y+
8D 91A9 LD R26,Y+
8E 9199 LD R25,Y+
8F 9189 LD R24,Y+
90 9139 LD R19,Y+
91 9129 LD R18,Y+
92 9119 LD R17,Y+
93 9109 LD R16,Y+
94 9099 LD R9,Y+
95 9089 LD R8,Y+
96 9079 LD R7,Y+
97 9069 LD R6,Y+
98 9059 LD R5,Y+
99 9049 LD R4,Y+
9A 9039 LD R3,Y+
9B 9029 LD R2,Y+
9C 9019 LD R1,Y+
9D 9009 LD R0,Y+
9E 9518 RETI
(0052) /*if(m>1)
(0053) {
(0054) IRCode[IRCON]<<=1; //每读一次放入变量中的二进制的一个位,每次左移一位
(0055) delay_nms(33); //0.84ms
(0056) flag++;
(0057) if(flag==9)
(0058) {
(0059) flag=0; //8为填满一个数组,计数清零
(0060) IRCON++; //填满一个字节,指向下一个变量
(0061) if(IRCON==4) IRCON=0;
(0062) }
(0063) if(HW) IRCode[IRCON]|=0x01; //左移后最后一位写入 1
(0064) if(m>32)
(0065) {
(0066) m=0;
(0067) uart0_init();
(0068) for(j=0;j<4;j++)
(0069) {
(0070) delay_nms(5000);
(0071) sendchar(IRCode[j]);
(0072) }
(0073) PORTB=IRCode[0];
(0074) }
(0075) } */
(0076) // GICR = 0x40;
(0077) //SEI();
(0078) }
(0079) void init_devices(void)
(0080) {
(0081) CLI(); //disable all interrupts
_init_devices:
9F 94F8 BCLR 7
(0082) MCUCR = 0x03;
A0 E083 LDI R24,3
A1 BF85 OUT 0x35,R24
(0083) GICR = 0x40;
A2 E480 LDI R24,0x40
A3 BF8B OUT 0x3B,R24
(0084) SEI(); //re-enable interrupts
A4 9478 BSET 7
A5 9508 RET
(0085) }
(0086)
(0087) void main(void)
(0088) {
(0089) DDRD&=~BIT(0);
_main:
A6 9888 CBI 0x11,0
(0090) DDRD|=BIT(1);
A7 9A89 SBI 0x11,1
(0091) DDRD&=~BIT(2);//设置PD2为输入口
A8 988A CBI 0x11,2
(0092) init_devices();
A9 DFF5 RCALL _init_devices
(0093) while(1);
FILE: <library>
AA CFFF RJMP 0x00AA
AB 9508 RET
push_xgset300C:
AC 935A ST R21,-Y
AD 934A ST R20,-Y
AE 92BA ST R11,-Y
AF 92AA ST R10,-Y
B0 9508 RET
pop_xgset300C:
B1 90A9 LD R10,Y+
B2 90B9 LD R11,Y+
B3 9149 LD R20,Y+
B4 9159 LD R21,Y+
B5 9508 RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -