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

📄 smart_timer.ls1

📁 单片机实现消息队列的例子
💻 LS1
📖 第 1 页 / 共 2 页
字号:
002D 2400     F      234             ADD     A,#LOW (wSmartTimerCounterPool)
002F F8              235             MOV     R0,A
0030 E6              236             MOV     A,@R0
0031 FE              237             MOV     R6,A
0032 08              238             INC     R0
0033 E6              239             MOV     A,@R0
0034 4E              240             ORL     A,R6
0035 706F            241             JNZ     ?C0007
                     242     ;                       {
                     243                             ; SOURCE LINE # 40
                     244     ;                               msg_queue_in(SmartTimerMsgPool[i][0], SmartTimerMsgPool[i][
                             1]);
                     245                             ; SOURCE LINE # 41
0037 7800     F      246             MOV     R0,#LOW (i?040)
0039 E6              247             MOV     A,@R0
003A FE              248             MOV     R6,A
003B 25E0            249             ADD     A,ACC
003D 2400     F      250             ADD     A,#LOW (SmartTimerMsgPool)
003F F8              251             MOV     R0,A
A51 MACRO ASSEMBLER  SMART_TIMER                                                          10/31/2003 02:22:29 PAGE     5

0040 E6              252             MOV     A,@R0
0041 FF              253             MOV     R7,A
0042 EE              254             MOV     A,R6
0043 25E0            255             ADD     A,ACC
0045 2400     F      256             ADD     A,#LOW (SmartTimerMsgPool+01H)
0047 F8              257             MOV     R0,A
0048 E6              258             MOV     A,@R0
0049 FD              259             MOV     R5,A
004A 120000   F      260             LCALL   _msg_queue_in
                     261     ;                               switch(SmartTimerSeveralPool[i])
                     262                             ; SOURCE LINE # 42
004D 7800     F      263             MOV     R0,#LOW (i?040)
004F E6              264             MOV     A,@R0
0050 FF              265             MOV     R7,A
0051 2400     F      266             ADD     A,#LOW (SmartTimerSeveralPool)
0053 F8              267             MOV     R0,A
0054 E6              268             MOV     A,@R0
0055 14              269             DEC     A
0056 601E            270             JZ      ?C0010
0058 04              271             INC     A
0059 702B            272             JNZ     ?C0011
                     273     ;                               {
                     274                             ; SOURCE LINE # 43
                     275     ;                                       case 0x00:                                         
                                                                          /*无限次*/
                     276                             ; SOURCE LINE # 44
005B                 277     ?C0009:
                     278     ;                                               wSmartTimerCounterPool[i] = wSmartTimerCoun
                             terRestorePool[i];
                     279                             ; SOURCE LINE # 45
005B 7800     F      280             MOV     R0,#LOW (i?040)
005D E6              281             MOV     A,@R0
005E FE              282             MOV     R6,A
005F 25E0            283             ADD     A,ACC
0061 2400     F      284             ADD     A,#LOW (wSmartTimerCounterRestorePool)
0063 F8              285             MOV     R0,A
0064 E6              286             MOV     A,@R0
0065 FC              287             MOV     R4,A
0066 08              288             INC     R0
0067 E6              289             MOV     A,@R0
0068 FD              290             MOV     R5,A
0069 EE              291             MOV     A,R6
006A 25E0            292             ADD     A,ACC
006C 2400     F      293             ADD     A,#LOW (wSmartTimerCounterPool)
006E F8              294             MOV     R0,A
006F A604            295             MOV     @R0,AR4
0071 08              296             INC     R0
0072 A605            297             MOV     @R0,AR5
                     298     ;                                               break;
                     299                             ; SOURCE LINE # 46
0074 8030            300             SJMP    ?C0007
                     301     ;                                       case 0x01:                                         
                                                                          /*一次*/
                     302                             ; SOURCE LINE # 47
0076                 303     ?C0010:
                     304     ;                                               RESETBIT(SmartTimerNumber, i);
                     305                             ; SOURCE LINE # 48
0076 7401            306             MOV     A,#01H
0078 A807            307             MOV     R0,AR7
007A 08              308             INC     R0
007B 8002            309             SJMP    ?C0028
007D                 310     ?C0027:
007D C3              311             CLR     C
007E 33              312             RLC     A
007F                 313     ?C0028:
007F D8FC            314             DJNZ    R0,?C0027
A51 MACRO ASSEMBLER  SMART_TIMER                                                          10/31/2003 02:22:29 PAGE     6

0081 F4              315             CPL     A
0082 5200     F      316             ANL     SmartTimerNumber,A
                     317     ;                                               break;
                     318                             ; SOURCE LINE # 49
0084 8020            319             SJMP    ?C0007
                     320     ;                                       default:                                           
                                                                          /*多次*/
                     321                             ; SOURCE LINE # 50
0086                 322     ?C0011:
                     323     ;                                               wSmartTimerCounterPool[i] = wSmartTimerCoun
                             terRestorePool[i];
                     324                             ; SOURCE LINE # 51
0086 7800     F      325             MOV     R0,#LOW (i?040)
0088 E6              326             MOV     A,@R0
0089 FF              327             MOV     R7,A
008A 25E0            328             ADD     A,ACC
008C 2400     F      329             ADD     A,#LOW (wSmartTimerCounterRestorePool)
008E F8              330             MOV     R0,A
008F E6              331             MOV     A,@R0
0090 FC              332             MOV     R4,A
0091 08              333             INC     R0
0092 E6              334             MOV     A,@R0
0093 FD              335             MOV     R5,A
0094 EF              336             MOV     A,R7
0095 25E0            337             ADD     A,ACC
0097 2400     F      338             ADD     A,#LOW (wSmartTimerCounterPool)
0099 F8              339             MOV     R0,A
009A A604            340             MOV     @R0,AR4
009C 08              341             INC     R0
009D A605            342             MOV     @R0,AR5
                     343     ;                                               SmartTimerSeveralPool[i]--;
                     344                             ; SOURCE LINE # 52
009F 7800     F      345             MOV     R0,#LOW (i?040)
00A1 E6              346             MOV     A,@R0
00A2 2400     F      347             ADD     A,#LOW (SmartTimerSeveralPool)
00A4 F8              348             MOV     R0,A
00A5 16              349             DEC     @R0
                     350     ;                                               break;
                     351                             ; SOURCE LINE # 53
                     352     ;                               }
                     353                             ; SOURCE LINE # 54
                     354     ;                       }
                     355                             ; SOURCE LINE # 55
00A6                 356     ?C0007:
                     357     ;                       wSmartTimerCounterPool[i]--;
                     358                             ; SOURCE LINE # 56
00A6 7800     F      359             MOV     R0,#LOW (i?040)
00A8 E6              360             MOV     A,@R0
00A9 25E0            361             ADD     A,ACC
00AB 2400     F      362             ADD     A,#LOW (wSmartTimerCounterPool)
00AD F8              363             MOV     R0,A
00AE 08              364             INC     R0
00AF E6              365             MOV     A,@R0
00B0 16              366             DEC     @R0
00B1 18              367             DEC     R0
00B2 7001            368             JNZ     ?C0029
00B4 16              369             DEC     @R0
00B5                 370     ?C0029:
                     371     ;               }
                     372                             ; SOURCE LINE # 57
                     373     ;       }
                     374                             ; SOURCE LINE # 58
00B5                 375     ?C0005:
00B5 7800     F      376             MOV     R0,#LOW (i?040)
00B7 06              377             INC     @R0
00B8 020000   F      378             LJMP    ?C0003
A51 MACRO ASSEMBLER  SMART_TIMER                                                          10/31/2003 02:22:29 PAGE     7

                     379     ; }
                     380                             ; SOURCE LINE # 59
00BB                 381     ?C0002:
00BB 22              382             RET     
                     383     ; END OF smart_timer_server
                     384     
                     385     ; 
                     386     ; 
                     387     ; 
                     388     ; /****************************************************************************************
                             **
                     389     ; *函数名:              smart_timer_idle_check
                     390     ; *参数:                        无
                     391     ; *返回值:              number
                     392     ; *描述:                        智能定时器空闲检测,返回空闲定时器数目
                     393     ; *编写:                        王绍伟
                     394     ; *版本信息:            V1.0                    2003年8月15日
                     395     ; *****************************************************************************************
                             */
                     396     ; extern byte smart_timer_idle_check(void)
                     397     
----                 398             RSEG  ?PR?smart_timer_idle_check?SMART_TIMER
0000                 399     smart_timer_idle_check:
                     400             USING   0
                     401                             ; SOURCE LINE # 71
                     402     ; {
                     403                             ; SOURCE LINE # 72
                     404     ;       byte idata i;
                     405     ;       byte idata number=0;
                     406                             ; SOURCE LINE # 74
0000 E4              407             CLR     A
0001 7800     F      408             MOV     R0,#LOW (number?142)
0003 F6              409             MOV     @R0,A
                     410     ;       for(i = 0; i < 4; i++)
                     411                             ; SOURCE LINE # 75
0004 18              412             DEC     R0
0005 F6              413             MOV     @R0,A
0006                 414     ?C0012:
0006 7800     F      415             MOV     R0,#LOW (i?141)
0008 E6              416             MOV     A,@R0
0009 FF              417             MOV     R7,A
000A C3              418             CLR     C
000B 9404            419             SUBB    A,#04H
000D 5016            420             JNC     ?C0013
                     421     ;       {
                     422                             ; SOURCE LINE # 76
                     423     ;               if(!GETBIT(SmartTimerNumber, i))
                     424                             ; SOURCE LINE # 77
000F E500     F      425             MOV     A,SmartTimerNumber
0011 A807            426             MOV     R0,AR7
0013 08              427             INC     R0
0014 8002            428             SJMP    ?C0031
0016                 429     ?C0030:
0016 C3              430             CLR     C
0017 13              431             RRC     A
0018                 432     ?C0031:
0018 D8FC            433             DJNZ    R0,?C0030
001A 20E003          434             JB      ACC.0,?C0014
                     435     ;               {
                     436                             ; SOURCE LINE # 78
                     437     ;                       number++;
                     438                             ; SOURCE LINE # 79
001D 7800     F      439             MOV     R0,#LOW (number?142)
001F 06              440             INC     @R0
                     441     ;               }
                     442                             ; SOURCE LINE # 80
A51 MACRO ASSEMBLER  SMART_TIMER                                                          10/31/2003 02:22:29 PAGE     8

                     443     ;       }
                     444                             ; SOURCE LINE # 81
0020                 445     ?C0014:
0020 7800     F      446             MOV     R0,#LOW (i?141)
0022 06              447             INC     @R0
0023 80E1            448             SJMP    ?C0012
0025                 449     ?C0013:
                     450     ;       return(number);
                     451                             ; SOURCE LINE # 82
0025 7800     F      452             MOV     R0,#LOW (number?142)
0027 E6              453             MOV     A,@R0
0028 FF              454             MOV     R7,A
                     455     ; }
                     456                             ; SOURCE LINE # 83
0029                 457     ?C0016:
0029 22              458             RET     
                     459     ; END OF smart_timer_idle_check
                     460     
                     461     ; 
                     462     ; 
                     463     ; 
                     464     ; /****************************************************************************************
                             **
                     465     ; *函数名:              smart_timer_start
                     466     ; *参数:                        msgType                 消息类型
                     467     ;                               msgPoint                消息指针
                     468     ;                               wCounter                在此例中以5ms为最小计数单位值,设置

⌨️ 快捷键说明

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