hd_support.lis

来自「一个解决5个IO口扫描25个按键的解决方法,完整文件包,有参考意义,C51.」· LIS 代码 · 共 318 行

LIS
318
字号
                        .module HD_Support.c
                        .area text(rom, con, rel)
 0000                   .dbfile F:\AVR\按键扫描\HD_Support.c
                        .area vector(rom, abs)
                        .org 18
 0012 22C0              rjmp _Timer0_OVF_ISR
                        .area text(rom, con, rel)
 0000                   .dbfile F:\AVR\按键扫描\HD_Support.c
 0000                   .dbfunc e Device_INIT _Device_INIT fV
                        .even
 0000           _Device_INIT::
 0000                   .dbline -1
 0000                   .dbline 84
 0000           ; /***********************************************************
 0000           ; *   函数库说明:底层硬件初始化函数库                       *
 0000           ; *   版本:                                                 *
 0000           ; *   作者:                                                 *
 0000           ; *   创建日期:                                             *
 0000           ; * -------------------------------------------------------- *
 0000           ; *  [硬件说明]                                              *
 0000           ; *   处理器:                                               *
 0000           ; *   系统时钟:                                             *
 0000           ; * -------------------------------------------------------- *
 0000           ; *  [支 持 库]                                              *
 0000           ; *   支持库名称:HD_Support.h                               *
 0000           ; *   需要版本:  -----                                      *
 0000           ; *   支持库说明:底层硬件初始化声明库                       *
 0000           ; *                                                          *
 0000           ; *   支持库名称:PF_Config.h                                *
 0000           ; *   需要版本:  -----                                      *
 0000           ; *   支持库说明:硬件平台配置声明库                         *
 0000           ; * -------------------------------------------------------- *
 0000           ; *  [版本更新]                                              *
 0000           ; *   修改:                                                 *
 0000           ; *   修改日期:                                             *
 0000           ; *   版本:                                                 *
 0000           ; * -------------------------------------------------------- *
 0000           ; *  [版本历史]                                              *
 0000           ; * -------------------------------------------------------- *
 0000           ; *  [使用说明]                                              *
 0000           ; ***********************************************************/
 0000           ; 
 0000           ; /********************
 0000           ; * 头 文 件 配 置 区 *
 0000           ; ********************/
 0000           ; # include "PF_Config.h"
 0000           ; # include "HD_Support.h"
 0000           ; 
 0000           ; /********************
 0000           ; *   系 统 宏 定 义  *
 0000           ; ********************/
 0000           ; # pragma interrupt_handler Timer0_OVF_ISR:iv_TIMER0_OVF
 0000           ; 
 0000           ; /*------------------*
 0000           ; *   常 数 宏 定 义  *
 0000           ; *------------------*/
 0000           ; 
 0000           ; /*------------------*
 0000           ; *   动 作 宏 定 义  *
 0000           ; *------------------*/
 0000           ; #ifndef INSERT_TIMER0_OVF_ISR_CODE
 0000           ;     # define INSERT_TIMER0_OVF_ISR_CODE
 0000           ;     # warning "TIMER0_OVF_ISR haven`t been used but initialed!"
 0000           ; #endif
 0000           ; 
 0000           ; /********************
 0000           ; *  模块结构体定义区 *
 0000           ; ********************/
 0000           ; 
 0000           ; /********************
 0000           ; *   函 数 声 明 区  *
 0000           ; ********************/
 0000           ; void Device_INIT(void);
 0000           ; 
 0000           ; /********************
 0000           ; *   模块函数声明区  *
 0000           ; ********************/
 0000           ; static void Port_INIT(void);
 0000           ; static void Timer0_INIT(void);
 0000           ; 
 0000           ; /********************
 0000           ; *   模块变量声明区  *
 0000           ; ********************/
 0000           ; 
 0000           ; /********************
 0000           ; *   全局变量声明区  *
 0000           ; ********************/
 0000           ; 
 0000           ; 
 0000           ; /***********************************************************
 0000           ; *   函数说明:系统硬件初始化函数                           *
 0000           ; *   输入:    无                                           *
 0000           ; *   输出:    无                                           *
 0000           ; *   调用函数:Port_INIT()   Timer0_INIT()                  *
 0000           ; ***********************************************************/
 0000           ; void Device_INIT(void)
 0000           ; {
 0000                   .dbline 85
 0000           ;     Port_INIT();
 0000 04D0              rcall _Port_INIT
 0002                   .dbline 86
 0002           ;     Timer0_INIT();
 0002 19D0              rcall _Timer0_INIT
 0004                   .dbline 89
 0004           ;     //*在这里添加其他初始化函数*//
 0004           ;     
 0004           ;     TIMSK = BIT(TOIE0);                                    //启动定时期0溢出中断资源
 0004 81E0              ldi R24,1
 0006 89BF              out 0x39,R24
 0008                   .dbline -2
 0008           L1:
 0008                   .dbline 0 ; func end
 0008 0895              ret
 000A                   .dbend
 000A                   .dbfunc s Port_INIT _Port_INIT fV
                        .even
 000A           _Port_INIT:
 000A                   .dbline -1
 000A                   .dbline 100
 000A           ;     //*在这里添加其他全局寄存器的初始化代码*//
 000A           ; }
 000A           ; 
 000A           ; /***********************************************************
 000A           ; *   函数说明:系统端口初始化函数                           *
 000A           ; *   输入:    无                                           *
 000A           ; *   输出:    无                                           *
 000A           ; *   调用函数:无                                           *
 000A           ; ***********************************************************/
 000A           ; static void Port_INIT(void)
 000A           ; {
 000A                   .dbline 104
 000A           ;     //*在这里添加端口初始化代码*//
 000A           ;     
 000A           ;     //按键扫描
 000A           ;     DDRC &= ~(BIT(PC1)|BIT(PC2));
 000A 84B3              in R24,0x14
 000C 897F              andi R24,249
 000E 84BB              out 0x14,R24
 0010                   .dbline 105
 0010           ;     PORTC |= BIT(PC1)|BIT(PC2);
 0010 85B3              in R24,0x15
 0012 8660              ori R24,6
 0014 85BB              out 0x15,R24
 0016                   .dbline 107
 0016           ;     
 0016           ;     DDRC |= BIT(PC3)|BIT(PC4)|BIT(PC5)|BIT(PC0);
 0016 84B3              in R24,0x14
 0018 8963              ori R24,57
 001A 84BB              out 0x14,R24
 001C                   .dbline 108
 001C           ;     PORTC |= BIT(PC3)|BIT(PC4)|BIT(PC5)|BIT(PC0);
 001C 85B3              in R24,0x15
 001E 8963              ori R24,57
 0020 85BB              out 0x15,R24
 0022                   .dbline 111
 0022           ;     
 0022           ;     //结果显示用端口
 0022           ;     DDRD = 0xFF;
 0022 8FEF              ldi R24,255
 0024 81BB              out 0x11,R24
 0026                   .dbline 112
 0026           ;     PORTD = 0xFF;
 0026 82BB              out 0x12,R24
 0028                   .dbline 121
 0028           ;     
 0028           ;     #ifdef _USE_VIRTUAL_SPI_RCV_CODE
 0028           ;     //模拟SPI接收机
 0028           ;     DDRB &= ~(BIT(1)|BIT(2)|BIT(3));
 0028           ;     PORTB |= BIT(1)|BIT(2)|BIT(3);
 0028           ;     #endif
 0028           ;     
 0028           ;     #ifdef _USE_VIRTUAL_SPI_SND_CODE
 0028           ;     DDRB |= BIT(1)|BIT(2)|BIT(3);
 0028 87B3              in R24,0x17
 002A 8E60              ori R24,14
 002C 87BB              out 0x17,R24
 002E                   .dbline 122
 002E           ;     PORTB |= BIT(1)|BIT(2)|BIT(3);
 002E 88B3              in R24,0x18
 0030 8E60              ori R24,14
 0032 88BB              out 0x18,R24
 0034                   .dbline -2
 0034           L2:
 0034                   .dbline 0 ; func end
 0034 0895              ret
 0036                   .dbend
 0036                   .dbfunc s Timer0_INIT _Timer0_INIT fV
                        .even
 0036           _Timer0_INIT:
 0036                   .dbline -1
 0036                   .dbline 133
 0036           ;     #endif
 0036           ; }
 0036           ; 
 0036           ; /***********************************************************
 0036           ; *   函数声明:定时器0初始化函数                            *
 0036           ; *   输入:    无                                           *
 0036           ; *   输出:    无                                           *
 0036           ; *   调用函数:无                                           *
 0036           ; ***********************************************************/
 0036           ; static void Timer0_INIT(void)
 0036           ; {
 0036                   .dbline 148
 0036           ;     //*在这里粘贴从代码生成向导中生成的初始化代码*//
 0036           ;     //*要求为1K的溢出中断                        *//
 0036           ;     
 0036           ; #ifdef USE_SYSTEM_CLOCK_1M
 0036           ;     TCCR0 = 0x00; //stop
 0036           ;     TCNT0 = 0x83; //set count
 0036           ;     TCCR0 = 0x02; //start timer
 0036           ; #endif
 0036           ; #ifdef USE_SYSTEM_CLOCK_4M
 0036           ;     TCCR0 = 0x00; //stop
 0036           ;     TCNT0 = 0xC2; //set count
 0036           ;     TCCR0 = 0x03; //start timer
 0036           ; #endif
 0036           ; #ifdef USE_SYSTEM_CLOCK_8M
 0036           ;     TCCR0 = 0x00; //stop
 0036 2224              clr R2
 0038 23BE              out 0x33,R2
 003A                   .dbline 149
 003A           ;     TCNT0 = 0x83; //set count
 003A 83E8              ldi R24,131
 003C 82BF              out 0x32,R24
 003E                   .dbline 150
 003E           ;     TCCR0 = 0x03; //start timer
 003E 83E0              ldi R24,3
 0040 83BF              out 0x33,R24
 0042                   .dbline -2
 0042           L3:
 0042                   .dbline 0 ; func end
 0042 0895              ret
 0044                   .dbend
 0044                   .dbfunc e Timer0_OVF_ISR _Timer0_OVF_ISR fV
                        .even
 0044           _Timer0_OVF_ISR::
 0044 0A92              st -y,R0
 0046 1A92              st -y,R1
 0048 2A92              st -y,R2
 004A 3A92              st -y,R3
 004C 4A92              st -y,R4
 004E 5A92              st -y,R5
 0050 6A92              st -y,R6
 0052 7A92              st -y,R7
 0054 8A92              st -y,R8
 0056 9A92              st -y,R9
 0058 0A93              st -y,R16
 005A 1A93              st -y,R17
 005C 2A93              st -y,R18
 005E 3A93              st -y,R19
 0060 8A93              st -y,R24
 0062 9A93              st -y,R25
 0064 AA93              st -y,R26
 0066 BA93              st -y,R27
 0068 EA93              st -y,R30
 006A FA93              st -y,R31
 006C 0FB6              in R0,0x3f
 006E 0A92              st -y,R0
 0070                   .dbline -1
 0070                   .dbline 161
 0070           ; #endif
 0070           ; }
 0070           ; 
 0070           ; /***********************************************************
 0070           ; *   函数声明:定时器0溢出中断处理程序                      *
 0070           ; *   输入:    无                                           *
 0070           ; *   输出:    无                                           *
 0070           ; *   调用函数:INSERT_TIMER0_OVF_ISR_CODE                   *
 0070           ; ***********************************************************/
 0070           ; void Timer0_OVF_ISR(void)
 0070           ; {
 0070                   .dbline 169
 0070           ;     #ifdef USE_SYSTEM_CLOCK_1M
 0070           ;     TCNT0 = 0x83; //set count
 0070           ;     #endif
 0070           ;     #ifdef USE_SYSTEM_CLOCK_4M
 0070           ;     TCNT0 = 0xC2; //set count
 0070           ;     #endif
 0070           ;     #ifdef USE_SYSTEM_CLOCK_8M
 0070           ;     TCNT0 = 0x83; //set count
 0070 83E8              ldi R24,131
 0072 82BF              out 0x32,R24
 0074                   .dbline 172
 0074           ;     #endif
 0074           ;     
 0074           ;     INSERT_TIMER0_OVF_ISR_CODE
 0074 7894              sei
 0076                   .dbline 172
 0076 00D0              rcall _Insert_Timer0_OVF_ISR_Code
 0078                   .dbline -2
 0078           L4:
 0078                   .dbline 0 ; func end
 0078 0990              ld R0,y+
 007A 0FBE              out 0x3f,R0
 007C F991              ld R31,y+
 007E E991              ld R30,y+
 0080 B991              ld R27,y+
 0082 A991              ld R26,y+
 0084 9991              ld R25,y+
 0086 8991              ld R24,y+
 0088 3991              ld R19,y+
 008A 2991              ld R18,y+
 008C 1991              ld R17,y+
 008E 0991              ld R16,y+
 0090 9990              ld R9,y+
 0092 8990              ld R8,y+
 0094 7990              ld R7,y+
 0096 6990              ld R6,y+
 0098 5990              ld R5,y+
 009A 4990              ld R4,y+
 009C 3990              ld R3,y+
 009E 2990              ld R2,y+
 00A0 1990              ld R1,y+
 00A2 0990              ld R0,y+
 00A4 1895              reti
 00A6                   .dbend
 00A6           ; }

⌨️ 快捷键说明

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