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

📄 key.lis

📁 一个正在应用的步进电机控制程序,包括电机的调速,正反,细分,通讯控制
💻 LIS
字号:
                        .module key.c
                        .area text(rom, con, rel)
 0000                   .dbfile C:\BJQD\key.c
 0000                   .dbfunc e key_init _key_init fV
                        .even
 0000           _key_init::
 0000                   .dbline -1
 0000                   .dbline 18
 0000           ; #include <iom16v.h>
 0000           ; #include <macros.h>
 0000           ; #include <eeprom.h>
 0000           ; #include "delay.h"
 0000           ; #include "key.h"
 0000           ; #include "main.h"
 0000           ; 
 0000           ; extern unsigned char state;
 0000           ; extern unsigned char state0;
 0000           ; extern unsigned char state_other;
 0000           ; extern unsigned char key;
 0000           ; extern unsigned char state2;
 0000           ; extern unsigned char in_out_number;
 0000           ; /****************************************************
 0000           ; 键盘初始化函数  
 0000           ; ****************************************************/
 0000           ; void key_init(void)
 0000           ; {
 0000                   .dbline 19
 0000           ; SFIOR&=0b11111011;
 0000 80B7              in R24,0x30
 0002 8B7F              andi R24,251
 0004 80BF              out 0x30,R24
 0006                   .dbline -2
 0006           L1:
 0006                   .dbline 0 ; func end
 0006 0895              ret
 0008                   .dbend
 0008                   .dbfunc e out_init _out_init fV
                        .even
 0008           _out_init::
 0008                   .dbline -1
 0008                   .dbline 24
 0008           ; }
 0008           ; 
 0008           ; /*外控初始化*/
 0008           ; void out_init(void)
 0008           ; {
 0008                   .dbline 25
 0008           ; PINA&=~((1<<EX_RS)|(1<<EX_ZF));
 0008 89B3              in R24,0x19
 000A 8F73              andi R24,63
 000C 89BB              out 0x19,R24
 000E                   .dbline 26
 000E           ; PORTA|=(1<<EX_RS)|(1<<EX_ZF);
 000E 8BB3              in R24,0x1b
 0010 806C              ori R24,192
 0012 8BBB              out 0x1b,R24
 0014                   .dbline 27
 0014           ; PIND&=~(1<<EX_PULL);
 0014 8298              cbi 0x10,2
 0016                   .dbline 28
 0016           ; PORTD|=(1<<EX_PULL);
 0016 929A              sbi 0x12,2
 0018                   .dbline -2
 0018           L2:
 0018                   .dbline 0 ; func end
 0018 0895              ret
 001A                   .dbend
 001A                   .dbfunc e scan_key _scan_key fc
 001A           ;       what_key -> R16
                        .even
 001A           _scan_key::
 001A                   .dbline -1
 001A                   .dbline 38
 001A           ; }
 001A           ; /****************************************************
 001A           ;       键盘扫描函数,注意本函数不作按键释放检查                                  
 001A           ;         返回值:1、没有键按下返回0x7f
 001A           ;               2、如果shift按下,返回值最高位为1
 001A           ;               3、其余键按下时,返回键名对应数值
 001A           ;         
 001A           ; ****************************************************/
 001A           ; unsigned char scan_key(void)
 001A           ; { 
 001A                   .dbline 40
 001A           ; unsigned char what_key;
 001A           ; what_key=0;
 001A 0027              clr R16
 001C                   .dbline 41
 001C           ; return what_key;                                              //返回按键值
 001C                   .dbline -2
 001C           L3:
 001C                   .dbline 0 ; func end
 001C 0895              ret
 001E                   .dbsym r what_key 16 c
 001E                   .dbend
 001E                   .dbfunc e rs _rs fV
                        .even
 001E           _rs::
 001E                   .dbline -1
 001E                   .dbline 46
 001E           ; }
 001E           ; 
 001E           ; 
 001E           ; void rs(void)
 001E           ; {
 001E                   .dbline 47
 001E           ;                  key=runstop_nu;
 001E 81E0              ldi R24,1
 0020 80930000          sts _key,R24
 0024                   .dbline -2
 0024           L4:
 0024                   .dbline 0 ; func end
 0024 0895              ret
 0026                   .dbend
 0026                   .dbfunc e zf _zf fV
                        .even
 0026           _zf::
 0026                   .dbline -1
 0026                   .dbline 51
 0026           ; }
 0026           ; 
 0026           ; void zf(void)
 0026           ; {
 0026                   .dbline 52
 0026           ;                  key=cwccw_nu;
 0026 82E0              ldi R24,2
 0028 80930000          sts _key,R24
 002C                   .dbline -2
 002C           L5:
 002C                   .dbline 0 ; func end
 002C 0895              ret
 002E                   .dbend
 002E                   .dbfunc e out_key _out_key fV
 002E           ;           sta0 -> R22
 002E           ;            sta -> R20
 002E           ;              i -> R22
                        .even
 002E           _out_key::
 002E 0E940000          xcall push_gset2
 0032                   .dbline -1
 0032                   .dbline 57
 0032           ; }
 0032           ; 
 0032           ; /*外控按键处理函数*/
 0032           ; void out_key(void)//abcd
 0032           ; {
 0032                   .dbline 61
 0032           ; unsigned char i;
 0032           ; unsigned char sta;
 0032           ; unsigned char sta0;
 0032           ; sta=state;
 0032 40910000          lds R20,_state
 0036                   .dbline 62
 0036           ; sta0=state0;    
 0036 60910000          lds R22,_state0
 003A                   .dbline 65
 003A           ; 
 003A           ;    //正反转    
 003A           ;    if (in_out_number>=2)
 003A 80910000          lds R24,_in_out_number
 003E 8230              cpi R24,2
 0040 A0F0              brlo L7
 0042                   .dbline 66
 0042           ;        {
 0042                   .dbline 67
 0042           ;          i=PINA; 
 0042 69B3              in R22,0x19
 0044                   .dbline 68
 0044           ;          if ((i&(1<<EX_RS))==0)           //高电平
 0044 66FD              sbrc R22,6
 0046 04C0              rjmp L9
 0048                   .dbline 69
 0048           ;             {
 0048                   .dbline 70
 0048           ;             if (sta&(1<<RUN_STOP))        //启停判断
 0048 43FF              sbrs R20,3
 004A 05C0              rjmp L10
 004C                   .dbline 71
 004C           ;                    {rs();}
 004C                   .dbline 71
 004C E8DF              xcall _rs
 004E                   .dbline 71
 004E                   .dbline 72
 004E           ;             }
 004E 03C0              xjmp L10
 0050           L9:
 0050                   .dbline 74
 0050           ;        else                                                           //低电平
 0050           ;             {
 0050                   .dbline 75
 0050           ;             if ((sta&(1<<RUN_STOP))==0)                       //启停判断
 0050 43FD              sbrc R20,3
 0052 01C0              rjmp L13
 0054                   .dbline 76
 0054           ;                    {rs();}
 0054                   .dbline 76
 0054 E4DF              xcall _rs
 0056                   .dbline 76
 0056           L13:
 0056                   .dbline 77
 0056           ;             }  
 0056           L10:
 0056                   .dbline 78
 0056           ;          i=PINA;                                                                                 
 0056 69B3              in R22,0x19
 0058                   .dbline 79
 0058           ;        if ((i&(1<<EX_ZF))==0)           //高电平
 0058 67FD              sbrc R22,7
 005A 04C0              rjmp L15
 005C                   .dbline 80
 005C           ;             {
 005C                   .dbline 81
 005C           ;             if (sta&(1<<CW_CCW))          //正反判断
 005C 40FF              sbrs R20,0
 005E 05C0              rjmp L16
 0060                   .dbline 82
 0060           ;                    {zf();}
 0060                   .dbline 82
 0060 E2DF              xcall _zf
 0062                   .dbline 82
 0062                   .dbline 83
 0062           ;             }
 0062 03C0              xjmp L16
 0064           L15:
 0064                   .dbline 85
 0064           ;        else                                                           //低电平
 0064           ;             {
 0064                   .dbline 86
 0064           ;             if ((sta&(1<<CW_CCW))==0)                 //正反判断
 0064 40FD              sbrc R20,0
 0066 01C0              rjmp L19
 0068                   .dbline 87
 0068           ;                    {zf();}
 0068                   .dbline 87
 0068 DEDF              xcall _zf
 006A                   .dbline 87
 006A           L19:
 006A                   .dbline 88
 006A           ;             }
 006A           L16:
 006A                   .dbline 89
 006A           L7:
 006A                   .dbline -2
 006A           L6:
 006A 0E940000          xcall pop_gset2
 006E                   .dbline 0 ; func end
 006E 0895              ret
 0070                   .dbsym r sta0 22 c
 0070                   .dbsym r sta 20 c
 0070                   .dbsym r i 22 c
 0070                   .dbend

⌨️ 快捷键说明

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