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

📄 main.lst

📁 一个下载数据的例子 一个下载数据的例子
💻 LST
📖 第 1 页 / 共 3 页
字号:
A51 MACRO ASSEMBLER  MAIN                                                                 04/15/2004 14:47:38 PAGE     1


MACRO ASSEMBLER A51 V7.00a
OBJECT MODULE PLACED IN main.OBJ
ASSEMBLER INVOKED BY: D:\soft\Keil\C51\BIN\A51.EXE main.asm DB

LOC  OBJ            LINE     SOURCE

                       1     ;program for c51 jfq
                       2     ;xintong company
                       3     ;
                       4     
  0093                 5     LED_1_BIT EQU P1.3 ;P1.3
  0092                 6     LED_2_BIT EQU P1.2 ;P1.3
                       7     
  0095                 8     EEPROM_SCL_BIT EQU P1.5 ;P1.6
  0096                 9     EEPROM_SDA_BIT EQU P1.6 ;P1.7
  0097                10     DOWNLOAD_BUTTON_BIT EQU P1.7 ;P2.3
  0094                11     SELECT_SWITCH_BIT EQU P1.4;P1.4
                      12     
                      13     
                      14     ;串行口通信参数
  000B                15     SCOM_RECV_FRAME_VALID_REG EQU 0Bh
  0000                16     SCOM_RECV_FRAME_VALID_KEY EQU 00h
  00FF                17     SCOM_RECV_FRAME_INVALID_KEY EQU 0FFh
                      18     
  0010                19     SCOM_SEND_DATA_BUFFER_ADDR EQU 10h
  0010                20     SCOM_RECV_DATA_BUFFER_ADDR EQU 10h
  0008                21     SCOM_SEND_DATA_CNT_REG EQU 08h
  0009                22     SCOM_SEND_DATA_IDX_REG EQU 09h
  000A                23     SCOM_RECV_DATA_CNT_REG EQU 0Ah
                      24     
  00FA                25     IRQ_TIMER1_BYTE_KEY_FAh EQU 0FAh
                      26     
                      27     ;EEPROM芯片读写
  00A0                28     EEPROM_WRITE_KEY_BYTE equ 0A0h
  00A1                29     EEPROM_READ_KEY_BYTE equ 0A1h
  0004                30     EEP_RDWR_BYTE_NUM EQU 4
  0010                31     EEP_RDWR_BYTE_BUFFER_ADDR EQU 10h
  0000                32     EEP_RDWR_BYTE_ADDR_LOW EQU 00h
  0000                33     EEP_RDWR_BYTE_ADDR_HIGH EQU 00h
                      34     
                      35     
                      36     ;串行口命令帧的操作码关键字
  0031                37     Scom_frame_Op_Send_ACK_Key EQU 31h
  0030                38     Scom_frame_Op_Send_NAK_Key EQU 30h
  0006                39     Scom_frame_Op_Write_File_Block_Key EQU 06h
                      40     
                      41     
                      42     ;数据块按64字节算的最大个数
  00FA                43     DATA_BLOCK_AREA_64B_block_Cnt EQU 250
                      44     
                      45     ;计费器数据写入地址
  0000                46     DATA_BLOCK_JFQ_AREA_ADDR_Low EQU 00H
  0001                47     DATA_BLOCK_JFQ_AREA_ADDR_High EQU 01H
                      48     ;计费器费率数据块中存放块个数的地址
  0014                49     DATA_Block_JFQ_Num_ADDR_Low EQU 14H
  0001                50     DATA_Block_JFQ_Num_ADDR_High EQU 01H
                      51     
                      52     ;接入台数据块写入地址
  0000                53     DATA_BLOCK_JRT_AREA_ADDR_Low EQU 00H
  0020                54     DATA_BLOCK_JRT_AREA_ADDR_High EQU 20H
                      55     ;接入台费率数据块中存放块个数的地址
  0014                56     DATA_Block_JRT_Num_ADDR_Low EQU 14H
  0020                57     DATA_Block_JRT_Num_ADDR_High EQU 20H
                      58     
A51 MACRO ASSEMBLER  MAIN                                                                 04/15/2004 14:47:38 PAGE     2

                      59     
                      60     ;计费器数据有效标志字节地址
  0010                61     DATA_VALID_JFQ_IDX_BYTE_ADDR_Low EQU 10H
  0000                62     DATA_VALID_JFQ_IDX_BYTE_ADDR_High EQU 00H
                      63     
                      64     ;接入台数据有效标志字节地址
  0012                65     DATA_VALID_JRT_IDX_BYTE_ADDR_Low EQU 12H
  0000                66     DATA_VALID_JRT_IDX_BYTE_ADDR_High EQU 00H
                      67     
                      68     
  0060                69     stack EQU 060h
                      70     ;$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
                      71     ;        CSEG  AT 0
0000                  72             ORG   0
0000 02003B           73             LJMP poweron
0003                  74             ORG   3;INT0
0003 32               75             reti
000B                  76             ORG   0BH;T0
000B 32               77             reti
0013                  78             org   13h;INT1
0013 32               79             reti
001B                  80             org   1bh;T1
001B 32               81             reti
0023                  82             org   23h;TRI
0023 0201FE           83             ljmp func_IRQ_Serial_Comm_service_n1945
                      84             ;reti
                      85     
                      86     ;#########################################################
0030                  87     ORG   30H
0030 56657273         88     Version:        DB    'Version2004'
0034 696F6E32                
0038 303034                  
                      89     ;
003B                  90     poweron:
003B 75A800           91             mov ie,#0
003E 758160           92             mov sp,#stack
0041 7580FF           93             mov p0,#0ffh
0044 75A0FF           94             mov p2,#0ffh
0047 75B0FF           95             mov p3,#0ffh
004A 7590FF           96             mov p1,#0ffh
004D 75D000           97             mov psw,#0
                      98     
0050 C295             99             clr EEPROM_SCL_BIT ;EEPROM的时钟线拉低
0052 D296            100             setb EEPROM_SDA_BIT ;EEPROM的数据线拉高
0054 750BFF          101             mov SCOM_RECV_FRAME_VALID_REG,#SCOM_RECV_FRAME_INVALID_KEY
0057 750800          102             mov SCOM_SEND_DATA_CNT_REG,#0
005A 750900          103             mov SCOM_SEND_DATA_IDX_REG,#0
005D 750A00          104             mov SCOM_RECV_DATA_CNT_REG,#0
0060 D293            105             setb LED_1_BIT ;点灭1
0062 D292            106             setb LED_2_BIT ;点灭2
                     107     
                     108             ;定时器串行口中断寄存器初始化
0064 1201DB          109             lcall func_init_timer_scom_irq_reg_n1946
                     110     
                     111             ;检测数据块有效性并显示LED指示灯
0067 1204E4          112             lcall func_Check_data_valid_show_LED_n0601
                     113     
                     114             ;debug
                     115             ;lcall func_Scom_send_ack_n1954 ;应答
                     116             ;lcall func_File_Block_Full_Write_Entry_n2067
006A                 117     start:
006A 00              118             nop
006B 00              119             nop
006C 7403            120             mov A,#3
006E 12058B          121             lcall func_delay_A_mul_1ms_n2242
                     122     
A51 MACRO ASSEMBLER  MAIN                                                                 04/15/2004 14:47:38 PAGE     3

0071 020076          123             ljmp func_Main_control_n1301
0074 80F4            124             jmp start
                     125     ;main program end
                     126     
                     127     
                     128     
                     129     
                     130     ;主控程序模块
0076                 131     func_Main_control_n1301:
0076                 132     n1301_start:
                     133             ;检测是否有接收到有效数据帧
0076 E50B            134             mov A,SCOM_RECV_FRAME_VALID_REG
0078 B40003          135             cjne A,#SCOM_RECV_FRAME_VALID_KEY,n1301_not_receive_frame
007B 1202F0          136             lcall func_Scom_write_file_block_n1965
007E                 137     n1301_not_receive_frame:
                     138             ;检测是否有按钮按下
007E 209706          139             jb DOWNLOAD_BUTTON_BIT,n1301_not_button_down
0081 12009B          140             lcall func_File_Block_Full_Write_Entry_n2067
0084                 141     n1301_wait_button_up:
0084 3097FD          142             jnb DOWNLOAD_BUTTON_BIT,n1301_wait_button_up
                     143     
0087                 144     n1301_not_button_down:
0087 209406          145             jb SELECT_SWITCH_BIT,n1301_show_Led_1
008A C292            146             clr LED_2_BIT ;点亮2
008C D293            147             setb LED_1_BIT ;点灭1
008E 0194            148             ajmp n1301_delay
0090                 149     n1301_show_Led_1:
0090 C293            150             clr LED_1_BIT ;点亮1
0092 D292            151             setb LED_2_BIT ;点灭2
0094                 152     n1301_delay:
0094 740A            153             mov A,#10
0096 12058B          154             lcall func_delay_A_mul_1ms_n2242 ;延迟1/4秒
0099 0176            155             ajmp n1301_start
                     156     ;func_Main_control_n1301:end
                     157     
                     158     
                     159     
                     160     ;数据发送函数模块,按段写入
009B                 161     func_File_Block_Full_Write_Entry_n2067:
009B D293            162             setb LED_1_BIT ;点灭1
009D D292            163             setb LED_2_BIT ;点灭2
                     164     
009F 209418          165             jb SELECT_SWITCH_BIT,n2067_send_jfq_data_block
                     166             ;判断数据有效标志字节是否有效
00A2 7A12            167             mov R2,#DATA_VALID_JRT_IDX_BYTE_ADDR_Low
00A4 7B00            168             mov R3,#DATA_VALID_JRT_IDX_BYTE_ADDR_High
00A6 7801            169             mov R0,#1
00A8 7910            170             mov R1,#EEP_RDWR_BYTE_BUFFER_ADDR
00AA 12048D          171             lcall func_EEP_IIC_bus_read_n1123
00AD E510            172             mov A,EEP_RDWR_BYTE_BUFFER_ADDR
00AF B40006          173             cjne A,#00,n2067_data_invalid
                     174     
00B2 7A14            175             mov R2,#DATA_Block_JRT_Num_ADDR_Low
00B4 7B20            176             mov R3,#DATA_Block_JRT_Num_ADDR_High
00B6 01CE            177             ajmp n2067_read_block_cnt_num
00B8                 178     n2067_data_invalid:
00B8 8061            179             jmp n2067_exit_failed2
00BA                 180     n2067_send_jfq_data_block:
                     181             ;判断数据有效标志字节是否有效
00BA 7A10            182             mov R2,#DATA_VALID_JFQ_IDX_BYTE_ADDR_Low
00BC 7B00            183             mov R3,#DATA_VALID_JFQ_IDX_BYTE_ADDR_High
00BE 7801            184             mov R0,#1
00C0 7910            185             mov R1,#EEP_RDWR_BYTE_BUFFER_ADDR
00C2 12048D          186             lcall func_EEP_IIC_bus_read_n1123
00C5 E510            187             mov A,EEP_RDWR_BYTE_BUFFER_ADDR
00C7 B400EE          188             cjne A,#00,n2067_data_invalid
A51 MACRO ASSEMBLER  MAIN                                                                 04/15/2004 14:47:38 PAGE     4

                     189     
00CA 7A14            190             mov R2,#DATA_Block_JFQ_Num_ADDR_Low
00CC 7B01            191             mov R3,#DATA_Block_JFQ_Num_ADDR_High
00CE                 192     n2067_read_block_cnt_num:
                     193             ;读取块的个数
00CE 7801            194             mov R0,#1 ;块个数1个字节,
00D0 7910            195             mov R1,#EEP_RDWR_BYTE_BUFFER_ADDR
00D2 12048D          196             lcall func_EEP_IIC_bus_read_n1123
00D5 AC10            197             mov R4,EEP_RDWR_BYTE_BUFFER_ADDR;R4中存放块的个数
                     198             ;R4存放块的个数,如果为0,则退出
00D7 BC0002          199             cjne R4,#0,n2067_block_num_not_0
00DA 8039            200             jmp n2067_exit_success
00DC                 201     n2067_block_num_not_0:
00DC EA              202             mov A,R2
00DD 2401            203             add A,#1 ;偏移个数的1个字节,偏移块的个数字节
00DF FA              204             mov R2,A
00E0 EB              205             mov A,R3
00E1 3400            206             addc A,#0
00E3 FB              207             mov R3,A
                     208     
00E4                 209     n2067_next_block:
00E4 C004            210             push 4 ;保存R4,块的个数
                     211             ;读取块的写入地址
00E6 7802            212             mov R0,#2 ;读取2个字节的写入地址
00E8 7910            213             mov R1,#EEP_RDWR_BYTE_BUFFER_ADDR
00EA 12048D          214             lcall func_EEP_IIC_bus_read_n1123
                     215             ;设置第1块数据的目的地址,存放在R6,R7中
00ED AE11            216             mov R6,EEP_RDWR_BYTE_BUFFER_ADDR+1
00EF AF10            217             mov R7,EEP_RDWR_BYTE_BUFFER_ADDR
                     218     
00F1 EA              219             mov A,R2
00F2 2402            220             add A,#2 ;偏移写入地址的2个字节
00F4 FA              221             mov R2,A
00F5 EB              222             mov A,R3
00F6 3400            223             addc A,#0
00F8 FB              224             mov R3,A
                     225             ;读取块的数据长度2个字节
00F9 7802            226             mov R0,#2
00FB 7910            227             mov R1,#EEP_RDWR_BYTE_BUFFER_ADDR
00FD 12048D          228             lcall func_EEP_IIC_bus_read_n1123
                     229             ;块的数据长度存入R4,R5
0100 AC11            230             mov R4,EEP_RDWR_BYTE_BUFFER_ADDR+1
0102 AD10            231             mov R5,EEP_RDWR_BYTE_BUFFER_ADDR
                     232     
0104 EA              233             mov A,R2
0105 2402            234             add A,#2;偏移块的数据长度2个字节,指向块1的数据
0107 FA              235             mov R2,A
0108 EB              236             mov A,R3
0109 3400            237             addc A,#0

⌨️ 快捷键说明

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