⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ir.lis

📁 单片机红外通讯控制 C语言编写 源程序。
💻 LIS
📖 第 1 页 / 共 3 页
字号:
                        .module ir.c
                        .area vector(rom, abs)
                        .org 4
 0004 ADC0              rjmp _int1_serving
                        .area data(ram, con, rel)
 0000           _Table::
 0000                   .blkb 2
                        .area idata
 0000 C0F9              .byte 192,249
                        .area data(ram, con, rel)
 0002                   .blkb 2
                        .area idata
 0002 A4B0              .byte 164,176
                        .area data(ram, con, rel)
 0004                   .blkb 2
                        .area idata
 0004 9992              .byte 153,146
                        .area data(ram, con, rel)
 0006                   .blkb 2
                        .area idata
 0006 82F8              .byte 130,248
                        .area data(ram, con, rel)
 0008                   .blkb 2
                        .area idata
 0008 8090              .byte 128,144
                        .area data(ram, con, rel)
 000A                   .blkb 2
                        .area idata
 000A 8FB9              .byte 143,185
                        .area data(ram, con, rel)
 000C                   .blkb 2
                        .area idata
 000C 8688              .byte 134,136
                        .area data(ram, con, rel)
 000E                   .blkb 1
                        .area idata
 000E C6                .byte 198
                        .area data(ram, con, rel)
 000F                   .dbfile E:\iccavr代码\实验9_红外遥控接收的应用\ir.c
 000F                   .dbsym e Table _Table A[15:15]c
                        .area text(rom, con, rel)
 0000                   .dbfile E:\iccavr代码\实验9_红外遥控接收的应用\ir.c
 0000                   .dbfunc e DelaymS _DelaymS fV
 0000           ;              j -> R20,R21
 0000           ;              i -> R16,R17
                        .even
 0000           _DelaymS::
 0000 00D0              rcall push_gset1
 0002                   .dbline -1
 0002                   .dbline 42
 0002           ; //******************************************************************************
 0002           ; //                                                                             *
 0002           ; //    FileName   : 实验板ir.c        ICCAVR V6.31A编译                         *
 0002           ; //    Function   : 红外接收         C与汇编混合编程实例                        *
 0002           ; //    Date       : 2007-01-04                                                  *
 0002           ; //    Version    : 1.0                                                         *
 0002           ; //                                                                             *
 0002           ; //    Author     : 开关电源              hongtusy@163.com                      *
 0002           ; //    Company    : 电子信息技术咨询网    http://www.itsn.cn                    *
 0002           ; //                                                                             *
 0002           ; //***************************描述与记事*****************************************
 0002           ; //实验板的AVR程序,接收红外线遥控器的按键信号,并将译码后的数字送数码管显示。
 0002           ; //本试验需要配合配套的红外遥控器(使用6121芯片),使用ATmega8535,使用片内1M晶振。
 0002           ; //接线定义:PA2=SW5-7接蜂鸣器,PD3/INT1=SW5-6红外信号接收端
 0002           ; //     数码管显示部分,SW1-1~8,SW2-1~3,SW2-6,SW3-8为系统复位端。
 0002           ; //功能:刚上电,蜂鸣器会响一声,然后收到一个红外信号就响一声,并将键值显示在数码管上。
 0002           ; //记事:本程序旨在对红外接收的理解与演示,忽略了系统码,程序适合初学者使用。
 0002           ; /*解码的关键是如何识别"0"和"1",从位的定义我们可以发现"0"和"1"均以0.565mS的低电平开始,
 0002           ; 不同的是高电平的宽度不同,"0"为0.56mS,"1"为1.68mS,所以必须根据高电平的宽度区别"0"和
 0002           ; "1",如果从0.565mS低电平过后,开始延时,0.56mS以后,若读到的电平为低,说明该位为"0",
 0002           ; 反之则为"1",为了可靠起见,延时必须比0.56mS长些,但又不能超过1.12mS,否则如果该位为"0",
 0002           ; 读到的已是下一位的高电平,因此取(1.12mS+0.56mS)/2=0.84mS最为可靠,一般取0.84mS即可。
 0002           ; //******************************************************************************/
 0002           ; #include <iom8535v.h>             //头文件,ATmega8535单片机的寄存器定义
 0002           ; #include "macros.h"             //可以使用NOP()以及SEI()等指令.
 0002           ; 
 0002           ; typedef unsigned char  uchar;    //宏
 0002           ; typedef unsigned int   uint;
 0002           ; 
 0002           ; #pragma interrupt_handler int1_serving:3   //外部中断1/红外信号中断入口向量。
 0002           ; 
 0002           ; uchar Table[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x8F,0xB9,0x86,0x88,0xC6};
 0002           ; 
 0002           ; /************************************************
 0002           ; 函 数 名:    DelaymS()
 0002           ; 功    能:    毫秒级延时函数
 0002           ; 输入参数:     延迟时间/系统晶体
 0002           ; 输出参数:    做相应的延迟处理
 0002           ; 描    述:    /
 0002           ; ***********************************************/
 0002           ; void DelaymS (uint i) 
 0002           ; {
 0002                   .dbline 44
 0002           ;        uint j;
 0002           ;        for(;i!=0;i--)
 0002 0AC0              rjmp L5
 0004           L2:
 0004                   .dbline 45
 0004           ;        {
 0004                   .dbline 46
 0004 42E3              ldi R20,50
 0006 50E0              ldi R21,0
 0008 02C0              rjmp L9
 000A           L6:
 000A                   .dbline 46
 000A           L7:
 000A                   .dbline 46
 000A 4150              subi R20,1
 000C 5040              sbci R21,0
 000E           L9:
 000E                   .dbline 46
 000E 4030              cpi R20,0
 0010 4507              cpc R20,R21
 0012 D9F7              brne L6
 0014           X0:
 0014                   .dbline 47
 0014           L3:
 0014                   .dbline 44
 0014 0150              subi R16,1
 0016 1040              sbci R17,0
 0018           L5:
 0018                   .dbline 44
 0018 0030              cpi R16,0
 001A 0107              cpc R16,R17
 001C 99F7              brne L2
 001E           X1:
 001E                   .dbline -2
 001E           L1:
 001E 00D0              rcall pop_gset1
 0020                   .dbline 0 ; func end
 0020 0895              ret
 0022                   .dbsym r j 20 i
 0022                   .dbsym r i 16 i
 0022                   .dbend
 0022                   .dbfunc e Delay882uS _Delay882uS fV
                        .even
 0022           _Delay882uS::
 0022                   .dbline -1
 0022                   .dbline 57
 0022           ;                for (j=50;j!=0;j--);
 0022           ;        }
 0022           ; }
 0022           ; /************************************************
 0022           ; 函 数 名:    Delay882uS()
 0022           ; 功    能:    882微秒延时函数
 0022           ; 输入参数:     晶振1M,机器周期为1uS。
 0022           ; 输出参数:    延迟时间T=a(4b+3)+c
 0022           ; 描    述:    在C中调汇编函数,使用r24,r25不必作特殊的保护工作。    
 0022           ; ***********************************************/
 0022           ; void Delay882uS (void) 
 0022           ; {
 0022                   .dbline 58
 0022           ;    asm("        ldi    r24,10   ")   //t=1 参数:a
 0022 8AE0                      ldi    r24,10   
 0024 95E1              loop3:  ldi    r25,21   
 0026 9A95              loop4:  dec    r25      
 0028 0000                      nop             
 002A E9F7                      brne   loop4    
 002C 8A95                      dec    r24      
 002E D1F7                      brne   loop3    
 0030 0000              nop
 0032 0000               nop
 0034 0000               nop
 0036 0000               nop
 0038 0000               nop
 003A 0000               nop
 003C 0000               nop
 003E 0000               nop
 0040 0000               nop
 0042 0000               nop
 0044 0000               nop
 0046 0000               nop
 0048                   .dbline -2
 0048           L10:
 0048                   .dbline 0 ; func end
 0048 0895              ret
 004A                   .dbend
 004A                   .dbfunc e Delay1000uS _Delay1000uS fV
                        .even
 004A           _Delay1000uS::
 004A                   .dbline -1
 004A                   .dbline 75
 004A           ;    asm("loop3:  ldi    r25,21   ")   //t=1 参数:b
 004A           ;    asm("loop4:  dec    r25      ")   //t=1
 004A           ;    asm("        nop             ")   //t=1,校准用,需改动公式。
 004A           ;    asm("        brne   loop4    ")   //t=2/1
 004A           ;    asm("        dec    r24      ")   //t=1
 004A           ;    asm("        brne   loop3    ")   //t=2/1
 004A           ;    asm("nop\n nop\n nop\n nop\n nop\n nop\n nop\n nop\n nop\n nop\n nop\n nop"); //t=1,校准用,参数:c
 004A           ; }
 004A           ; /************************************************
 004A           ; 函 数 名:    Delay1000uS()
 004A           ; 功    能:    1000微秒延时函数
 004A           ; 输入参数:     晶振1M,机器周期为1uS。
 004A           ; 输出参数:    延迟时间T=a(4b+3)+c
 004A           ; 描    述:    在C中调汇编函数,使用r24,r25不必作特殊的保护工作。    
 004A           ; ***********************************************/
 004A           ; void Delay1000uS (void) 
 004A           ; {
 004A                   .dbline 76
 004A           ;    asm("        ldi    r24,4    ")   //t=1 参数:a
 004A 84E0                      ldi    r24,4    
 004C 9DE3              loop5:  ldi    r25,61   
 004E 9A95              loop6:  dec    r25      
 0050 0000                      nop             
 0052 E9F7                      brne   loop6    
 0054 8A95                      dec    r24      
 0056 D1F7                      brne   loop5    
 0058 0000              nop
 005A 0000               nop
 005C 0000               nop
 005E 0000               nop
 0060 0000               nop
 0062 0000               nop
 0064 0000               nop
 0066 0000               nop
 0068 0000               nop
 006A 0000               nop
 006C 0000               nop
 006E                   .dbline -2
 006E           L11:
 006E                   .dbline 0 ; func end
 006E 0895              ret
 0070                   .dbend
 0070                   .dbfunc e key_decode _key_decode fV
                        .area func_lit(rom, con, rel)
 0000           L45:
 0000 5300              .word `L16
 0002 5700              .word `L18
 0004 5B00              .word `L20
 0006 8E00              .word `L14
 0008 5F00              .word `L22
 000A 6300              .word `L24
 000C 6700              .word `L26
 000E 8E00              .word `L14
 0010 6B00              .word `L28
 0012 6F00              .word `L30
 0014 7300              .word `L32
 0016 8E00              .word `L14
 0018 7700              .word `L34
 001A 7B00              .word `L36
 001C 7F00              .word `L37
 001E 8E00              .word `L14
 0020 8300              .word `L39
 0022 8700              .word `L41
 0024 8B00              .word `L43
                        .area text(rom, con, rel)
 0070                   .dbfile E:\iccavr代码\实验9_红外遥控接收的应用\ir.c
 0070           ;           data -> R20
                        .even
 0070           _key_decode::
 0070 00D0              rcall push_gset1
 0072 402F              mov R20,R16
 0074                   .dbline -1
 0074                   .dbline 93
 0074           ;    asm("loop5:  ldi    r25,61   ")   //t=1 参数:b
 0074           ;    asm("loop6:  dec    r25      ")   //t=1
 0074           ;    asm("        nop             ")   //t=1,校准用,需改动公式。
 0074           ;    asm("        brne   loop6    ")   //t=2/1
 0074           ;    asm("        dec    r24      ")   //t=1
 0074           ;    asm("        brne   loop5    ")   //t=2/1

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -