📄 irremote.lis
字号:
.module irremote.c
.area text(rom, con, rel)
0000 .dbfile D:\M16开发板实验教程\icc-avr\irremote/delay.h
0000 .dbfunc e delay_1us _delay_1us fV
.even
0000 _delay_1us::
0000 .dbline -1
0000 .dbline 10
0000 ; /*
0000 ; Title: icc-avr irremote
0000 ; Author: dushibiao
0000 ; Date: 2007 10 19
0000 ; Purpose: control your pc use a ir remoter
0000 ; Frequency: internal 8M
0000 ; needed
0000 ; Software: icc-avr to compile
0000 ; needed
0000 ; Hardware: AVR mega16 BOARD
0000 .dbline 11
0000 ; Connect: dushibiao@126.com
0000 0000 nop
0002 .dbline -2
0002 L1:
0002 .dbline 0 ; func end
0002 0895 ret
0004 .dbend
0004 .dbfunc e delay_nus _delay_nus fV
0004 ; i -> R20,R21
0004 ; n -> R22,R23
.even
0004 _delay_nus::
0004 0E940000 xcall push_gset2
0008 B801 movw R22,R16
000A .dbline -1
000A .dbline 15
000A ; */
000A ; #include <iom16v.h>
000A ; #include <macros.h>
000A ; #include "shumaguan.h"
000A .dbline 16
000A ;
000A 4427 clr R20
000C 5527 clr R21
000E .dbline 17
000E ; #define IR 2 //PB2,irfrade receive line
000E 03C0 xjmp L6
0010 L3:
0010 .dbline 18
0010 F7DF xcall _delay_1us
0012 L4:
0012 .dbline 17
0012 4F5F subi R20,255 ; offset = 1
0014 5F4F sbci R21,255
0016 L6:
0016 .dbline 17
0016 4617 cp R20,R22
0018 5707 cpc R21,R23
001A D0F3 brlo L3
001C .dbline -2
001C L2:
001C 0E940000 xcall pop_gset2
0020 .dbline 0 ; func end
0020 0895 ret
0022 .dbsym r i 20 i
0022 .dbsym r n 22 i
0022 .dbend
0022 .dbfunc e delay_1ms _delay_1ms fV
0022 ; i -> R16,R17
.even
0022 _delay_1ms::
0022 .dbline -1
0022 .dbline 22
0022 ; #define PIN_RXD 0 //PD0 RXD
0022 ; #define PIN_TXD 1 //PD1 TXD
0022 ; #define BAUDRATE 9600 //baudrate
0022 ; #define F_CPU 8000000 //the frequency of the global clock
0022 ;
0022 .dbline 24
0022 0027 clr R16
0024 1127 clr R17
0026 02C0 xjmp L11
0028 L8:
0028 .dbline 24
0028 L9:
0028 .dbline 24
0028 0F5F subi R16,255 ; offset = 1
002A 1F4F sbci R17,255
002C L11:
002C .dbline 24
002C ;
002C ; volatile unsigned char flag,code;
002C 0437 cpi R16,116
002E E4E0 ldi R30,4
0030 1E07 cpc R17,R30
0032 D0F3 brlo L8
0034 .dbline -2
0034 L7:
0034 .dbline 0 ; func end
0034 0895 ret
0036 .dbsym r i 16 i
0036 .dbend
0036 .dbfunc e delay_nms _delay_nms fV
0036 ; i -> R20,R21
0036 ; n -> R22,R23
.even
0036 _delay_nms::
0036 0E940000 xcall push_gset2
003A B801 movw R22,R16
003C .dbline -1
003C .dbline 28
003C ;
003C ;
003C ; void delay0_9ms(void)
003C ; {
003C .dbline 29
003C ; delay_nus(510);
003C 4427 clr R20
003E 5527 clr R21
0040 .dbline 30
0040 ; }
0040 03C0 xjmp L16
0042 L13:
0042 .dbline 31
0042 EFDF xcall _delay_1ms
0044 L14:
0044 .dbline 30
0044 4F5F subi R20,255 ; offset = 1
0046 5F4F sbci R21,255
0048 L16:
0048 .dbline 30
0048 4617 cp R20,R22
004A 5707 cpc R21,R23
004C D0F3 brlo L13
004E .dbline -2
004E L12:
004E 0E940000 xcall pop_gset2
0052 .dbline 0 ; func end
0052 0895 ret
0054 .dbsym r i 20 i
0054 .dbsym r n 22 i
0054 .dbend
.area lit(rom, con, rel)
0000 _discode::
0000 C0F9 .byte 192,249
0002 A4B0 .byte 164,176
0004 9992 .byte 153,146
0006 82F8 .byte 130,248
0008 8090 .byte 128,144
000A 8883 .byte 136,131
000C C6A1 .byte 198,161
000E 868E .byte 134,142
0010 BF .byte 191
0011 .dbfile D:\M16开发板实验教程\icc-avr\irremote/shumaguan.h
0011 .dbsym e discode _discode A[17:17]kc
.area text(rom, con, rel)
0054 .dbfile D:\M16开发板实验教程\icc-avr\irremote/shumaguan.h
0054 .dbfunc e display _display fV
0054 ; num -> R20
.even
0054 _display::
0054 0E940000 xcall push_gset1
0058 402F mov R20,R16
005A .dbline -1
005A .dbline 21
005A .dbline 22
005A C098 cbi 0x18,0
005C .dbline 24
005C 80E0 ldi R24,<_discode
005E 90E0 ldi R25,>_discode
0060 E42F mov R30,R20
0062 FF27 clr R31
0064 F595 asr R31
0066 E795 ror R30
0068 F595 asr R31
006A E795 ror R30
006C F595 asr R31
006E E795 ror R30
0070 F595 asr R31
0072 E795 ror R30
0074 E80F add R30,R24
0076 F91F adc R31,R25
0078 E491 lpm R30,Z
007A EBBB out 0x1b,R30
007C .dbline 25
007C 05E0 ldi R16,5
007E 10E0 ldi R17,0
0080 DADF xcall _delay_nms
0082 .dbline 26
0082 C09A sbi 0x18,0
0084 .dbline 28
0084 C198 cbi 0x18,1
0086 .dbline 29
0086 20E1 ldi R18,16
0088 30E0 ldi R19,0
008A 042F mov R16,R20
008C 1127 clr R17
008E 0E940000 xcall mod16s
0092 F801 movw R30,R16
0094 80E0 ldi R24,<_discode
0096 90E0 ldi R25,>_discode
0098 E80F add R30,R24
009A F91F adc R31,R25
009C E491 lpm R30,Z
009E EBBB out 0x1b,R30
00A0 .dbline 30
00A0 05E0 ldi R16,5
00A2 10E0 ldi R17,0
00A4 C8DF xcall _delay_nms
00A6 .dbline 31
00A6 ;
00A6 C19A sbi 0x18,1
00A8 .dbline -2
00A8 L17:
00A8 0E940000 xcall pop_gset1
00AC .dbline 0 ; func end
00AC 0895 ret
00AE .dbsym r num 20 c
00AE .dbend
00AE .dbfunc e displayerror _displayerror fV
.even
00AE _displayerror::
00AE .dbline -1
00AE .dbline 38
00AE ; //4.5ms
00AE ; void delay4_5ms(void)
00AE ; {
00AE ; delay_nms(4);
00AE ; delay_nus(320);
00AE ; }
00AE ; /*---------------------------------------------------------------------------
00AE .dbline 39
00AE ; function send an unsigned char to the uart
00AE C098 cbi 0x18,0
00B0 .dbline 41
00B0 ; ----------------------------------------------------------------------------*/
00B0 ; void put_c(unsigned char c) //发送采用查询方式
00B0 E0E0 ldi R30,<_discode+16
00B2 F0E0 ldi R31,>_discode+16
00B4 E491 lpm R30,Z
00B6 EBBB out 0x1b,R30
00B8 .dbline 42
00B8 ; {
00B8 05E0 ldi R16,5
00BA 10E0 ldi R17,0
00BC BCDF xcall _delay_nms
00BE .dbline 43
00BE ; while( !(UCSRA & (1<<UDRE)) ); //wait until the uart is empty
00BE C09A sbi 0x18,0
00C0 .dbline 45
00C0 ; UDR=c; //write data to uart
00C0 ; }
00C0 C198 cbi 0x18,1
00C2 .dbline 46
00C2 ; /*---------------------------------------------------------------------------
00C2 E0E0 ldi R30,<_discode+16
00C4 F0E0 ldi R31,>_discode+16
00C6 E491 lpm R30,Z
00C8 EBBB out 0x1b,R30
00CA .dbline 47
00CA ; fuction initialize the uart unit
00CA 05E0 ldi R16,5
00CC 10E0 ldi R17,0
00CE B3DF xcall _delay_nms
00D0 .dbline 48
00D0 ; ----------------------------------------------------------------------------*/
00D0 C19A sbi 0x18,1
00D2 .dbline -2
00D2 L18:
00D2 .dbline 0 ; func end
00D2 0895 ret
00D4 .dbend
00D4 .dbfile D:\M16开发板实验教程\icc-avr\irremote\irremote.c
00D4 .dbfunc e delay0_9ms _delay0_9ms fV
.even
00D4 _delay0_9ms::
00D4 .dbline -1
00D4 .dbline 28
00D4 .dbline 29
00D4 0EEF ldi R16,510
00D6 11E0 ldi R17,1
00D8 95DF xcall _delay_nus
00DA .dbline -2
00DA L21:
00DA .dbline 0 ; func end
00DA 0895 ret
00DC .dbend
00DC .dbfunc e delay4_5ms _delay4_5ms fV
.even
00DC _delay4_5ms::
00DC .dbline -1
00DC .dbline 34
00DC .dbline 35
00DC 04E0 ldi R16,4
00DE 10E0 ldi R17,0
00E0 AADF xcall _delay_nms
00E2 .dbline 36
00E2 00E4 ldi R16,320
00E4 11E0 ldi R17,1
00E6 8EDF xcall _delay_nus
00E8 .dbline -2
00E8 L22:
00E8 .dbline 0 ; func end
00E8 0895 ret
00EA .dbend
00EA .dbfunc e put_c _put_c fV
00EA ; c -> R16
.even
00EA _put_c::
00EA .dbline -1
00EA .dbline 42
00EA L24:
00EA .dbline 43
00EA L25:
00EA .dbline 43
00EA 5D9B sbis 0xb,5
00EC FECF rjmp L24
00EE .dbline 44
00EE 0CB9 out 0xc,R16
00F0 .dbline -2
00F0 L23:
00F0 .dbline 0 ; func end
00F0 0895 ret
00F2 .dbsym r c 16 c
00F2 .dbend
00F2 .dbfunc e init_USART _init_USART fV
.even
00F2 _init_USART::
00F2 .dbline -1
00F2 .dbline 50
00F2 ; void init_USART(void)//USART 初始化
00F2 ; {
00F2 .dbline 53
00F2 ;
00F2 ; //USART 9600 8, n,1 PC上位机软件(超级终端等)也要设成同样的设置才能通讯
00F2 ; UCSRC = (1<<URSEL) | 0x06;
00F2 86E8 ldi R24,134
00F4 80BD out 0x20,R24
00F6 .dbline 69
00F6 ; //异步,8位数据,无奇偶校验,一个停止位,无倍速
00F6 ; /*
00F6 ; UBRRH与UCSRC共用I/O 地址。因此访问该地址时需注意以下问题。
00F6 ; 写访问
00F6 ; 当在该地址执行写访问时, USART 寄存器选择位(URSEL)控制被写入的寄存器。
00F6 ; 若URSEL为0,对UBRRH值更新;若URSEL为1,对UCSRC设置更新
00F6 ;
00F6 ; 读访问
00F6 ; 对UBRRH 或UCSRC 寄存器的读访问则较为复杂。但在大多数应用中,基本不需要读这些寄存器
00F6 ;
00F6 ;
00F6 ; 没有UBRR这个16位寄存器,因为UBRRL(0x09)/UBRRH(0x20)的地址不连续,而且UBRRH跟UCSRC共用地址
00F6 ; */
00F6 ;
00F6 ; //U2X=0时的公式计算
00F6 ; UBRRL= (F_CPU/BAUDRATE/16-1)%256;
00F6 83E3 ldi R24,51
00F8 89B9 out 0x9,R24
00FA .dbline 70
00FA ; UBRRH= (F_CPU/BAUDRATE/16-1)/256;
00FA 2224 clr R2
00FC 20BC out 0x20,R2
00FE .dbline 77
00FE ; //U2X=1时的公式计算
00FE ; //UBRRL= (F_CPU/BAUDRATE/8-1)%256;
00FE ; //UBRRH= (F_CPU/BAUDRATE/8-1)/256;
00FE ; //也可根据数据手册的[波特率设置的例子]查得
00FE ; //UBRRL = 0x2F; //set baud rate lo
00FE ; //UBRRH = 0x00; //set baud rate hi
00FE ; UCSRA = 0x00; //无倍速
00FE 2BB8 out 0xb,R2
0100 .dbline 78
0100 ; UCSRB = (1<<RXEN)|(1<<TXEN);
0100 88E1 ldi R24,24
0102 8AB9 out 0xa,R24
0104 .dbline -2
0104 L27:
0104 .dbline 0 ; func end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -