📄 jiema.lis
字号:
.module jiema.c
.area text(rom, con, rel)
0000 .dbfile C:\DOCUME~1\Administrator.27F5F4061F03467\桌面\上升沿\jiema.c
.area data(ram, con, rel)
0000 .dbfile C:\DOCUME~1\Administrator.27F5F4061F03467\桌面\上升沿\jiema.c
0000 _IRCON::
0000 .blkb 1
.area idata
0000 00 .byte 0
.area data(ram, con, rel)
0001 .dbfile C:\DOCUME~1\Administrator.27F5F4061F03467\桌面\上升沿\jiema.c
0001 .dbsym e IRCON _IRCON c
.area text(rom, con, rel)
0000 .dbfile C:\DOCUME~1\Administrator.27F5F4061F03467\桌面\上升沿\jiema.c
0000 .dbfunc e delay_nus _delay_nus fV
0000 ; i -> R20,R21
0000 ; n -> R16,R17
.even
0000 _delay_nus::
0000 4A93 st -y,R20
0002 5A93 st -y,R21
0004 .dbline -1
0004 .dbline 13
0004 ; //ICC-AVR application builder : 2008-8-7 14:56:45
0004 ; // Target : M8515
0004 ; // Crystal: 4.0000Mhz
0004 ;
0004 ; #include <iom8515v.h>
0004 ; #include <macros.h>
0004 ; #define uchar unsigned char
0004 ; #define uint unsigned int
0004 ; #define DQ PD2
0004 ; #define HW (PIND&(1<<DQ)) //数据的状态
0004 ; uchar IRCode[3],IRCON=0;
0004 ; void delay_nus(unsigned int n)//n微秒延时函数
0004 ; {
0004 .dbline 15
0004 ; unsigned int i;
0004 ; for (i=0;i<n;i++)
0004 4427 clr R20
0006 5527 clr R21
0008 03C0 rjmp L5
000A L2:
000A .dbline 16
000A ; {
000A .dbline 17
000A ; asm("nop");
000A 0000 nop
000C .dbline 18
000C ; }
000C L3:
000C .dbline 15
000C 4F5F subi R20,255 ; offset = 1
000E 5F4F sbci R21,255
0010 L5:
0010 .dbline 15
0010 4017 cp R20,R16
0012 5107 cpc R21,R17
0014 D0F3 brlo L2
0016 X0:
0016 .dbline -2
0016 L1:
0016 .dbline 0 ; func end
0016 5991 ld R21,y+
0018 4991 ld R20,y+
001A 0895 ret
001C .dbsym r i 20 i
001C .dbsym r n 16 i
001C .dbend
001C .dbfunc e delay_nms _delay_nms fV
001C ; i -> R20,R21
001C ; n -> R10,R11
.even
001C _delay_nms::
001C 00D0 rcall push_xgset300C
001E 5801 movw R10,R16
0020 .dbline -1
0020 .dbline 21
0020 ; }
0020 ; void delay_nms(unsigned int n)//n毫秒延时函数
0020 ; {
0020 .dbline 23
0020 ; unsigned int i;
0020 ; for (i=0;i<n;i++) //执行n次1毫秒延时
0020 4427 clr R20
0022 5527 clr R21
0024 05C0 rjmp L10
0026 L7:
0026 .dbline 24
0026 ; delay_nus(10);
0026 0AE0 ldi R16,10
0028 10E0 ldi R17,0
002A EADF rcall _delay_nus
002C L8:
002C .dbline 23
002C 4F5F subi R20,255 ; offset = 1
002E 5F4F sbci R21,255
0030 L10:
0030 .dbline 23
0030 4A15 cp R20,R10
0032 5B05 cpc R21,R11
0034 C0F3 brlo L7
0036 X1:
0036 .dbline -2
0036 L6:
0036 .dbline 0 ; func end
0036 00C0 rjmp pop_xgset300C
0038 .dbsym r i 20 i
0038 .dbsym r n 10 i
0038 .dbend
0038 .dbfunc e uart0_init _uart0_init fV
.even
0038 _uart0_init::
0038 .dbline -1
0038 .dbline 28
0038 ; }
0038 ; /************************* UART 发送数据函数*********************************************************/
0038 ; void uart0_init(void)
0038 ; {
0038 .dbline 29
0038 ; UCSRB = 0x00; //disable while setting baud rate
0038 2224 clr R2
003A 2AB8 out 0xa,R2
003C .dbline 30
003C ; UCSRA = 0x00;
003C 2BB8 out 0xb,R2
003E .dbline 31
003E ; UCSRC = BIT(URSEL) | 0x26;
003E 86EA ldi R24,166
0040 80BD out 0x20,R24
0042 .dbline 32
0042 ; UBRRL = 0x33; //set baud rate lo
0042 83E3 ldi R24,51
0044 89B9 out 0x9,R24
0046 .dbline 33
0046 ; UBRRH = 0x00; //set baud rate hi
0046 20BC out 0x20,R2
0048 .dbline 34
0048 ; UCSRB = 0x18;
0048 88E1 ldi R24,24
004A 8AB9 out 0xa,R24
004C .dbline -2
004C L11:
004C .dbline 0 ; func end
004C 0895 ret
004E .dbend
004E .dbfunc e sendchar _sendchar fV
004E ; num -> R16
.even
004E _sendchar::
004E .dbline -1
004E .dbline 37
004E ; }
004E ; void sendchar(uchar num)
004E ; {
004E .dbline 38
004E ; UDR=num;
004E 0CB9 out 0xc,R16
0050 L13:
0050 .dbline 39
0050 ; while(!(UCSRA&(1<<TXC)));
0050 L14:
0050 .dbline 39
0050 5E9B sbis 0xb,6
0052 FECF rjmp L13
0054 X2:
0054 .dbline 40
0054 ; UCSRA |= (1<<TXC);
0054 5E9A sbi 0xb,6
0056 .dbline -2
0056 L12:
0056 .dbline 0 ; func end
0056 0895 ret
0058 .dbsym r num 16 c
0058 .dbend
.area vector(rom, abs)
.org 2
0002 2CC0 rjmp _int0_isr
.area text(rom, con, rel)
0058 .dbfile C:\DOCUME~1\Administrator.27F5F4061F03467\桌面\上升沿\jiema.c
0058 .dbfunc e int0_isr _int0_isr fV
0058 ; j -> <dead>
0058 ; flag -> <dead>
0058 ; m -> R20,R21
.even
0058 _int0_isr::
0058 0A92 st -y,R0
005A 1A92 st -y,R1
005C 2A92 st -y,R2
005E 3A92 st -y,R3
0060 4A92 st -y,R4
0062 5A92 st -y,R5
0064 6A92 st -y,R6
0066 7A92 st -y,R7
0068 8A92 st -y,R8
006A 9A92 st -y,R9
006C 0A93 st -y,R16
006E 1A93 st -y,R17
0070 2A93 st -y,R18
0072 3A93 st -y,R19
0074 8A93 st -y,R24
0076 9A93 st -y,R25
0078 AA93 st -y,R26
007A BA93 st -y,R27
007C EA93 st -y,R30
007E FA93 st -y,R31
0080 0FB6 in R0,0x3f
0082 0A92 st -y,R0
0084 4A93 st -y,R20
0086 5A93 st -y,R21
0088 .dbline -1
0088 .dbline 44
0088 ; }
0088 ; #pragma interrupt_handler int0_isr:iv_INT0
0088 ; void int0_isr(void)
0088 ; {
0088 .dbline 45
0088 ; uint flag,m=0,j;
0088 4427 clr R20
008A 5527 clr R21
008C .dbline 47
008C ;
008C ; m++;
008C 4F5F subi R20,255 ; offset = 1
008E 5F4F sbci R21,255
0090 .dbline 48
0090 ; if(m==2)
0090 4230 cpi R20,2
0092 E0E0 ldi R30,0
0094 5E07 cpc R21,R30
0096 31F4 brne L17
0098 X3:
0098 .dbline 49
0098 ; { GICR = 0x00;
0098 .dbline 49
0098 2224 clr R2
009A 2BBE out 0x3b,R2
009C .dbline 50
009C ; uart0_init();
009C CDDF rcall _uart0_init
009E .dbline 51
009E ; sendchar(IRCode[1]); }
009E 00910100 lds R16,_IRCode+1
00A2 D5DF rcall _sendchar
00A4 .dbline 51
00A4 L17:
00A4 .dbline -2
00A4 L16:
00A4 .dbline 0 ; func end
00A4 5991 ld R21,y+
00A6 4991 ld R20,y+
00A8 0990 ld R0,y+
00AA 0FBE out 0x3f,R0
00AC F991 ld R31,y+
00AE E991 ld R30,y+
00B0 B991 ld R27,y+
00B2 A991 ld R26,y+
00B4 9991 ld R25,y+
00B6 8991 ld R24,y+
00B8 3991 ld R19,y+
00BA 2991 ld R18,y+
00BC 1991 ld R17,y+
00BE 0991 ld R16,y+
00C0 9990 ld R9,y+
00C2 8990 ld R8,y+
00C4 7990 ld R7,y+
00C6 6990 ld R6,y+
00C8 5990 ld R5,y+
00CA 4990 ld R4,y+
00CC 3990 ld R3,y+
00CE 2990 ld R2,y+
00D0 1990 ld R1,y+
00D2 0990 ld R0,y+
00D4 1895 reti
00D6 .dbsym l j 1 i
00D6 .dbsym l flag 1 i
00D6 .dbsym r m 20 i
00D6 .dbend
00D6 .dbfunc e init_devices _init_devices fV
.even
00D6 _init_devices::
00D6 .dbline -1
00D6 .dbline 80
00D6 ; /*if(m>1)
00D6 ; {
00D6 ; IRCode[IRCON]<<=1; //每读一次放入变量中的二进制的一个位,每次左移一位
00D6 ; delay_nms(33); //0.84ms
00D6 ; flag++;
00D6 ; if(flag==9)
00D6 ; {
00D6 ; flag=0; //8为填满一个数组,计数清零
00D6 ; IRCON++; //填满一个字节,指向下一个变量
00D6 ; if(IRCON==4) IRCON=0;
00D6 ; }
00D6 ; if(HW) IRCode[IRCON]|=0x01; //左移后最后一位写入 1
00D6 ; if(m>32)
00D6 ; {
00D6 ; m=0;
00D6 ; uart0_init();
00D6 ; for(j=0;j<4;j++)
00D6 ; {
00D6 ; delay_nms(5000);
00D6 ; sendchar(IRCode[j]);
00D6 ; }
00D6 ; PORTB=IRCode[0];
00D6 ; }
00D6 ; } */
00D6 ; // GICR = 0x40;
00D6 ; //SEI();
00D6 ; }
00D6 ; void init_devices(void)
00D6 ; {
00D6 .dbline 81
00D6 ; CLI(); //disable all interrupts
00D6 F894 cli
00D8 .dbline 82
00D8 ; MCUCR = 0x03;
00D8 83E0 ldi R24,3
00DA 85BF out 0x35,R24
00DC .dbline 83
00DC ; GICR = 0x40;
00DC 80E4 ldi R24,64
00DE 8BBF out 0x3b,R24
00E0 .dbline 84
00E0 ; SEI(); //re-enable interrupts
00E0 7894 sei
00E2 .dbline -2
00E2 L20:
00E2 .dbline 0 ; func end
00E2 0895 ret
00E4 .dbend
00E4 .dbfunc e main _main fV
.even
00E4 _main::
00E4 .dbline -1
00E4 .dbline 88
00E4 ; }
00E4 ;
00E4 ; void main(void)
00E4 ; {
00E4 .dbline 89
00E4 ; DDRD&=~BIT(0);
00E4 8898 cbi 0x11,0
00E6 .dbline 90
00E6 ; DDRD|=BIT(1);
00E6 899A sbi 0x11,1
00E8 .dbline 91
00E8 ; DDRD&=~BIT(2);//设置PD2为输入口
00E8 8A98 cbi 0x11,2
00EA .dbline 92
00EA ; init_devices();
00EA F5DF rcall _init_devices
00EC L22:
00EC .dbline 93
00EC ; while(1);
00EC L23:
00EC .dbline 93
00EC FFCF rjmp L22
00EE X4:
00EE .dbline -2
00EE L21:
00EE .dbline 0 ; func end
00EE 0895 ret
00F0 .dbend
.area bss(ram, con, rel)
0000 .dbfile C:\DOCUME~1\Administrator.27F5F4061F03467\桌面\上升沿\jiema.c
0000 _IRCode::
0000 .blkb 3
0003 .dbsym e IRCode _IRCode A[3:3]c
0003 ; }
0003 ;
0003 ;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -