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

📄 main.lst

📁 单片机学习的最好例子, 1.51多任务切换 2.红外解码 3.数码管扫描显示 4.1602LCD的现实,以及文字动画效果 5.系统构架,资源整合,菜单应用,按键板,其它更新中
💻 LST
📖 第 1 页 / 共 5 页
字号:
0104 C0E0       +1   430         PUSH     ACC
0106 C0E0       +1   431         PUSH     ACC
0108 C0E0       +1   432         PUSH     ACC
010A C0E0       +1   433         PUSH     ACC
010C C0E0       +1   434         PUSH     ACC
010E C0E0       +1   435         PUSH     ACC
0110 C0E0       +1   436         PUSH     ACC
                +1   437     
0112 8981       +1   438         MOV      SP,R1
                +1   439         
0114            +1   440         TASK_CREATE_START_RETURN:        
0114 22         +1   441     RET
                +1   442     
                +1   443     ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
                             ;;;;;;;;;;;;;;;
                +1   444     ;Suspend a task 
0115            +1   445     TASK_SUSPEND:
                +1   446     ;reserve
0115 22         +1   447     RET
                +1   448     
                +1   449     ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
                             ;;;;;;;;;;;;;;;
                +1   450     ;Resume a task 
0116            +1   451     TASK_RESUME:
                +1   452     ;reserve
0116 22         +1   453     RET
                +1   454     
                +1   455     ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
                             ;;;;;;;;;;;;;;;
                +1   456     ;Destroy a task 
0117            +1   457     TASK_DESTROY:
                +1   458     ;reserve
0117 22         +1   459     RET
                +1   460     
                +1   461     ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
                             ;;;;;;;;;;;;;;;
                +1   462     ;Task sleep
                +1   463     ;Input  : R0 - sleep number of low 8bit, R1 - sleep number of high 8bit 
                +1   464     ;Output : NULL
0118            +1   465     TASK_SLEEP:
                +1   466     
                +1   467         ;R2~R3 ago tick
0118 AA09       +1   468         MOV      R2,VAR_TIMER_TICK_NOW_BYTE0
011A AB0A       +1   469         MOV      R3,VAR_TIMER_TICK_NOW_BYTE1
                +1   470     
011C            +1   471         TASK_SLEEP_LOOP:
011C C3         +1   472         CLR      C
                +1   473         
                +1   474         ;R4~R5 different tick
011D E509       +1   475         MOV      A,VAR_TIMER_TICK_NOW_BYTE0
011F 9A         +1   476         SUBB     A,R2
0120 FC         +1   477         MOV      R4,A 
                +1   478     
0121 E50A       +1   479         MOV      A,VAR_TIMER_TICK_NOW_BYTE1
0123 9B         +1   480         SUBB     A,R3
0124 FD         +1   481         MOV      R5,A 
                +1   482     
                +1   483         ;Now >= Ago
0125 C3         +1   484         CLR      C
                +1   485     
0126 EC         +1   486         MOV      A,R4
0127 98         +1   487         SUBB     A,R0
0128 FC         +1   488         MOV      R4,A
                +1   489     
0129 ED         +1   490         MOV      A,R5
A51 MACRO ASSEMBLER  MAIN                                                                 04/19/2009 02:07:50 PAGE     9

012A 99         +1   491         SUBB     A,R1
012B FD         +1   492         MOV      R5,A
                +1   493     
012C 40EE       +1   494         JC       TASK_SLEEP_LOOP
012E 020134     +1   495         LJMP     TASK_SLEEP_RETURN
                +1   496             
0131 02011C     +1   497         LJMP     TASK_SLEEP_LOOP
                +1   498     
0134            +1   499         TASK_SLEEP_RETURN:
0134 22         +1   500     RET
                +1   501     
                +1   502     ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
                             ;;;;;;;;;;;;;;;
                +1   503     ;Create multi task, if no need multi task don't call this function
                +1   504     ;Note: The main function can be use multi task aslo, but the task count don't out of DEFINE
                             _TASK_MAX 
0135            +1   505     CREATE_MULTI_TASK:     
                +1   506         ;System flow
0135 900565     +1   507         MOV      DPTR,#MAIN_TASK_PROCESS
0138 7800       +1   508         MOV      R0,#00    
013A 11D7       +1   509         CALL     TASK_CREATE_
                +1   510     
                +1   511         ;CLOCK
013C 9000C8     +1   512         MOV      DPTR,#CLOCK_TASK_PROCESS
013F 7801       +1   513         MOV      R0,#01    
0141 11D7       +1   514         CALL     TASK_CREATE_
                +1   515     
                +1   516         ;Storage device
0143 9004C9     +1   517         MOV      DPTR,#E2PROM_TASK_PROCESS    ; E2PROM
0146 7802       +1   518         MOV      R0,#02    
0148 11D7       +1   519         CALL     TASK_CREATE_
                +1   520     
                +1   521         ;Communication device
014A 9004CE     +1   522         MOV      DPTR,#COM_TASK_PROCESS
014D 7803       +1   523         MOV      R0,#03    
014F 11D7       +1   524         CALL     TASK_CREATE_ 
0151 22         +1   525     RET
                +1   526     
                     527     
                     528     
                     529     ;Driver
                     530         ;$include (..\Driver\I2C.inc)
                +1   531     ;System I2C part
0152            +1   532     I2C_INITIAL:
0152 7AA2       +1   533         MOV     R2,#0xA2
0154 7BA3       +1   534         MOV     R3,#0xA3        
                +1   535          
0156 7801       +1   536         MOV     R0,#0x01 ;24C02 address
0158 7902       +1   537         MOV     R1,#0x02 ;RAM address
                +1   538         ;CALL    I2C_WRITE
015A 22         +1   539     RET
                +1   540     
015B            +1   541     I2C_START:  
015B D2A1       +1   542         SETB    DEFINE_I2C_IO_SCL
015D D2A0       +1   543         SETB    DEFINE_I2C_IO_SDA
015F C2A0       +1   544         CLR     DEFINE_I2C_IO_SDA
0161 C2A1       +1   545         CLR     DEFINE_I2C_IO_SCL
0163 22         +1   546     RET
                +1   547     
0164            +1   548     I2C_STOP: 
0164 C2A1       +1   549         CLR     DEFINE_I2C_IO_SCL
0166 C2A0       +1   550         CLR     DEFINE_I2C_IO_SDA
0168 D2A1       +1   551         SETB    DEFINE_I2C_IO_SCL
016A D2A0       +1   552         SETB    DEFINE_I2C_IO_SDA
016C 22         +1   553     RET
                +1   554     
A51 MACRO ASSEMBLER  MAIN                                                                 04/19/2009 02:07:50 PAGE    10

016D            +1   555     I2C_ACK_RECV:
016D D2A0       +1   556         SETB    DEFINE_I2C_IO_SDA
016F D2A1       +1   557         SETB    DEFINE_I2C_IO_SCL
0171 A2A0       +1   558         MOV     C,DEFINE_I2C_IO_SDA
0173 C2A1       +1   559         CLR     DEFINE_I2C_IO_SCL
0175 22         +1   560     RET
                +1   561     
0176            +1   562     I2C_ACK_SEND:
0176 C2A0       +1   563         CLR     DEFINE_I2C_IO_SDA
0178 D2A1       +1   564         SETB    DEFINE_I2C_IO_SCL    
017A C2A1       +1   565         CLR     DEFINE_I2C_IO_SCL
017C D2A0       +1   566         SETB    DEFINE_I2C_IO_SDA
017E 22         +1   567     RET
                +1   568     
017F            +1   569     I2C_ACK_NO_SEND:
017F D2A0       +1   570         SETB    DEFINE_I2C_IO_SDA
0181 D2A1       +1   571         SETB    DEFINE_I2C_IO_SCL
0183 C2A1       +1   572         CLR     DEFINE_I2C_IO_SCL
0185 D2A0       +1   573         SETB    DEFINE_I2C_IO_SDA
0187 22         +1   574     RET
                +1   575     
0188            +1   576     I2C_8BIT_SEND:  
0188 75F008     +1   577         MOV     B,#0x08
018B C3         +1   578         CLR     C
                +1   579     
018C            +1   580         I2C_8BIT_SEND_LOOP:
018C 33         +1   581         RLC     A
018D 92A0       +1   582         MOV     DEFINE_I2C_IO_SDA,C
018F D2A1       +1   583         SETB    DEFINE_I2C_IO_SCL
0191 C2A1       +1   584         CLR     DEFINE_I2C_IO_SCL
0193 D5F0F6     +1   585         DJNZ    B,I2C_8BIT_SEND_LOOP
0196 22         +1   586     RET
                +1   587     
0197            +1   588     I2C_8BIT_RECV:
0197 75F008     +1   589         MOV     B,#0x08
019A E4         +1   590         CLR     A
                +1   591     
019B            +1   592         I2C_8BIT_RECV_LOOP:
019B D2A1       +1   593         SETB    DEFINE_I2C_IO_SCL
019D A2A0       +1   594         MOV     C,DEFINE_I2C_IO_SDA
019F 33         +1   595         RLC     A
01A0 C2A1       +1   596         CLR     DEFINE_I2C_IO_SCL
01A2 D5F0F6     +1   597         DJNZ    B,I2C_8BIT_RECV_LOOP 
01A5 22         +1   598     RET
                +1   599     
01A6            +1   600     I2C_READ: 
01A6            +1   601         I2C_READ_LOOP_A:
01A6 315B       +1   602         CALL    I2C_START
                +1   603     
01A8 74A0       +1   604         MOV     A,#10100000B
01AA 3188       +1   605         CALL    I2C_8BIT_SEND
01AC 316D       +1   606         CALL    I2C_ACK_RECV
01AE 40F6       +1   607         JC      I2C_READ_LOOP_A
                +1   608                     
01B0 E8         +1   609         MOV     A,R0
01B1 3188       +1   610         CALL    I2C_8BIT_SEND
01B3 316D       +1   611         CALL    I2C_ACK_RECV
                +1   612     
01B5            +1   613         I2C_READ_LOOP_B:
01B5 315B       +1   614         CALL    I2C_START
                +1   615     
01B7 74A1       +1   616         MOV     A,#10100001B
01B9 3188       +1   617         CALL    I2C_8BIT_SEND
01BB 316D       +1   618         CALL    I2C_ACK_RECV
01BD 40F6       +1   619         JC      I2C_READ_LOOP_B
                +1   620                                 
A51 MACRO ASSEMBLER  MAIN                                                                 04/19/2009 02:07:50 PAGE    11

01BF 3197       +1   621         CALL    I2C_8BIT_RECV
01C1 F7         +1   622         MOV     @R1,A
01C2 3176       +1   623         CALL    I2C_ACK_SEND
                +1   624                    
01C4 09         +1   625         INC     R1
                +1   626     
01C5 3197       +1   627         CALL    I2C_8BIT_RECV
01C7 F7         +1   628         MOV     @R1,A
01C8 317F       +1   629         CALL    I2C_ACK_NO_SEND
                +1   630                      
01CA 3164       +1   631         CALL    I2C_STOP
01CC 22         +1   632     RET
                +1   633     
01CD            +1   634     I2C_WRITE:
01CD            +1   635         I2C_WRITE_LOOP_A:   
01CD 315B       +1   636         CALL    I2C_START
                +1   637                           
01CF 74A0       +1   638         MOV     A,#10100000B
01D1 3188       +1   639         CALL    I2C_8BIT_SEND
01D3 316D       +1   640         CALL    I2C_ACK_RECV
01D5 40F6       +1   641         JC      I2C_WRITE_LOOP_A
                +1   642                       
01D7 E8         +1   643         MOV     A,R0
01D8 3188       +1   644         CALL    I2C_8BIT_SEND
01DA 316D       +1   645         CALL    I2C_ACK_RECV
                +1   646                     
01DC E7         +1   647         MOV     A,@R1 
01DD 3188       +1   648         CALL    I2C_8BIT_SEND 
01DF 316D       +1   649         CALL    I2C_ACK_RECV
                +1   650                       
01E1 09         +1   651         INC     R1
                +1   652     
01E2 E7         +1   653         MOV     A,@R1 
01E3 3188       +1   654         CALL    I2C_8BIT_SEND
01E5 317F       +1   655         CALL    I2C_ACK_NO_SEND
                +1   656         

⌨️ 快捷键说明

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