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

📄 main.lst

📁 一个下载数据的例子 一个下载数据的例子
💻 LST
📖 第 1 页 / 共 3 页
字号:
                     484     
                     485     ;发送数据
0253                 486     n1945_send_data:
0253 30991E          487             jnb ti,n1945_exit
0256 C299            488             clr ti
0258 E508            489             mov A,SCOM_SEND_DATA_CNT_REG
                     490             ;计数是否为0,为0则表示发送空
025A B40002          491             cjne A,#0,n1945_send_cnt_not_equ_0
025D 8015            492             jmp n1945_exit
025F                 493     n1945_send_cnt_not_equ_0:
025F 7410            494             mov A,#SCOM_SEND_DATA_BUFFER_ADDR
0261 2509            495             add A,SCOM_SEND_DATA_IDX_REG
0263 F8              496             mov R0,A
0264 E6              497             mov A,@R0;获取发送指针对应的当前发送字节。
0265 F599            498             mov sbuf,A
0267 0509            499             inc SCOM_SEND_DATA_IDX_REG
0269 E509            500             mov A,SCOM_SEND_DATA_IDX_REG
                     501             ;比较发送指针是否和发送计数值相等,
                     502             ;相等,则表示发送完成了。将2个寄存器都清零。
026B B50806          503             cjne A,SCOM_SEND_DATA_CNT_REG,n1945_exit
026E 750800          504             mov SCOM_SEND_DATA_CNT_REG,#0
0271 750900          505             mov SCOM_SEND_DATA_IDX_REG,#0
0274                 506     n1945_exit:
                     507     ;       pop 1
0274 D000            508             pop 0 ;R0
                     509     ;       mov R0,A
                     510     ;       pop B
0276 D0E0            511             pop acc
0278 D0D0            512             pop psw
027A 32              513             reti
                     514     ;func_IRQ_Serial_Comm_service_n1945:end
                     515     
                     516     
                     517     ;串行口操作发送ACK应答信号
027B                 518     func_Scom_send_ack_n1954:
A51 MACRO ASSEMBLER  MAIN                                                                 04/15/2004 14:47:38 PAGE     9

027B                 519     n1954:
027B 7810            520             mov R0,#SCOM_SEND_DATA_BUFFER_ADDR
027D 76FA            521             mov @R0,#0FAh;起始标志字符1
027F 08              522             inc R0
0280 76FB            523             mov @R0,#0FBh;起始标志字符2
0282 08              524             inc R0
0283 7631            525             mov @R0,#31h;操作码
0285 08              526             inc R0
0286 7600            527             mov @R0,#00h;数据长度
0288 75F004          528             mov B,#4
028B 1202A3          529             lcall func_Scom_Send_frame_n1957
028E 22              530             ret
                     531     ;func_Scom_send_ack_n1954:end
                     532     
                     533     
                     534     
                     535     ;串行口操作发送NAK应答信号
028F                 536     func_Scom_send_nak_n1955:
028F                 537     n1955:
028F 7810            538             mov R0,#SCOM_SEND_DATA_BUFFER_ADDR
0291 76FA            539             mov @R0,#0FAh;起始标志字符1
0293 08              540             inc R0
0294 76FB            541             mov @R0,#0FBh;起始标志字符2
0296 08              542             inc R0
0297 7630            543             mov @R0,#30h;操作码
0299 08              544             inc R0
029A 7600            545             mov @R0,#00h;数据长度
                     546     
029C 75F004          547             mov B,#4
029F 1202A3          548             lcall func_Scom_Send_frame_n1957
02A2 22              549             ret
                     550     ;func_Scom_send_nak_n1955:end
                     551     
                     552     
                     553     
                     554     ;串行口操作给发送帧加上校验码,然后发送出去.
02A3                 555     func_Scom_Send_frame_n1957:
02A3 C000            556             push 0
02A5 C001            557             push 1
02A7 C002            558             push 2
02A9 7913            559             mov R1,#SCOM_SEND_DATA_BUFFER_ADDR+3
02AB E7              560             mov A,@R1
02AC FA              561             mov R2,A
02AD 0A              562             inc R2
02AE 0A              563             inc R2
02AF                 564     n1957_data_len_not_equ_0:
02AF 7812            565             mov R0,#SCOM_SEND_DATA_BUFFER_ADDR+2
02B1 7400            566             mov A,#0
02B3                 567     n1957_add_calc:
02B3 26              568             add A,@R0
02B4 08              569             inc R0
02B5 DAFC            570             djnz R2,n1957_add_calc
02B7                 571     n1957_copy_last_data:
02B7 C0E0            572             push ACC
02B9 E5F0            573             mov A,B
02BB 2410            574             add A,#SCOM_SEND_DATA_BUFFER_ADDR
02BD F8              575             mov R0,A
02BE D0E0            576             pop ACC
02C0 F6              577             mov @R0,A
02C1 05F0            578             inc B
02C3                 579     n1957_wait_1:
02C3 E508            580             mov A,SCOM_SEND_DATA_CNT_REG
02C5 B400FB          581             cjne A,#00,n1957_wait_1
02C8 85F008          582             mov SCOM_SEND_DATA_CNT_REG,B
02CB D299            583             setb Ti
02CD                 584     n1957_wait_2:
A51 MACRO ASSEMBLER  MAIN                                                                 04/15/2004 14:47:38 PAGE    10

02CD E508            585             mov A,SCOM_SEND_DATA_CNT_REG
02CF B400FB          586             cjne A,#00,n1957_wait_2
02D2 D002            587             pop 2
02D4 D001            588             pop 1
02D6 D000            589             pop 0
02D8 22              590             ret
                     591     ;func_Scom_Send_frame_n1957:end
                     592     
                     593     
                     594     
                     595     ;验证接收帧的校验码是否有效
02D9                 596     func_Scom_Check_Verify_Code_n1958:
02D9 7813            597             mov R0,#SCOM_RECV_DATA_BUFFER_ADDR+3
02DB E6              598             mov A,@R0
02DC F9              599             mov R1,A
02DD 09              600             inc R1
02DE 09              601             inc R1
02DF                 602     n1958_data_len_not_equ_0:
02DF 7812            603             mov R0,#SCOM_RECV_DATA_BUFFER_ADDR+2
02E1 7400            604             mov A,#0
02E3                 605     n1958_calc_data:
02E3 26              606             add A,@R0
02E4 08              607             inc R0
02E5 D9FC            608             djnz R1,n1958_calc_data
02E7 C3              609             clr C
02E8 96              610             subb A,@R0
02E9 B40002          611             cjne A,#0,n1958_exit_error
02EC                 612     n1958_exit_good:
02EC D3              613             setb C
02ED 22              614             ret
02EE                 615     n1958_exit_error:
02EE C3              616             clr C
02EF 22              617             ret
                     618     ;func_Scom_Check_Verify_Code_n1958:end
                     619     
                     620     
                     621     
                     622     ;接收下载的资费、号码信息操作的文件数据块
02F0                 623     func_Scom_write_file_block_n1965:
                     624     ;       setb LED_1_BIT ;点灭1
                     625     ;       setb LED_2_BIT ;点灭2
                     626             ;帧数据校验
02F0 1202D9          627             lcall func_Scom_Check_Verify_Code_n1958
02F3 4000            628             jc n1965_recv_frame_valid
                     629             ;lcall func_Scom_send_nak_n1955
                     630             ;jmp n1965_exit_error2
02F5                 631     n1965_recv_frame_valid:
                     632             ;判断是否是下载费率数据块的协议关键字。如果不是,则返回。
02F5 7812            633             mov R0,#SCOM_RECV_DATA_BUFFER_ADDR+2
02F7 E6              634             mov A,@R0
02F8 B40608          635             cjne A,#Scom_frame_Op_Write_File_Block_Key,n1965_exit_error2
                     636             ;比较总块数,如果大于等于最大数+1,则退出
02FB 781A            637             mov R0,#SCOM_RECV_DATA_BUFFER_ADDR+10
02FD E6              638             mov A,@R0
02FE B4FB00          639             cjne A,#DATA_BLOCK_AREA_64B_block_Cnt+1,n1965_nextline_1
0301                 640     n1965_nextline_1:
0301 4003            641             jc n1965_bolck_cnt_good
0303                 642     n1965_exit_error2:
0303 020394          643             ljmp n1965_exit_error
0306                 644     n1965_bolck_cnt_good:
                     645             ;比较总块数小于当前块数,则退出
0306 781B            646             mov R0,#SCOM_RECV_DATA_BUFFER_ADDR+11
0308 86F0            647             mov B,@R0
030A B5F004          648             cjne A,B,n1965_block_not_equ
030D D2D5            649             setb F0 ;F0置位,表示是最后一块
030F 6115            650             ajmp n1965_compare_len
A51 MACRO ASSEMBLER  MAIN                                                                 04/15/2004 14:47:38 PAGE    11

0311                 651     n1965_block_not_equ:
0311 40F0            652             jc n1965_exit_error2
0313 C2D5            653             clr F0 ;F0清零,表示不是最后一块
0315                 654     n1965_compare_len:
                     655             ;比较数据长度
0315 7813            656             mov R0,#SCOM_RECV_DATA_BUFFER_ADDR+3
0317 E6              657             mov A,@R0
0318 B44802          658             cjne A,#72,n1965_len_not_72B ;长度128+8
031B 6120            659             ajmp n1965_write_file ;长度等于128+8,转去写入
031D                 660     n1965_len_not_72B:
031D 30D5E3          661             jnb F0,n1965_exit_error2 ;长度不等于128+8,而且不是最后一块,则出错,返回
                     662             ;找写入地址,写入数据
0320                 663     n1965_write_file:
                     664             ;根据当前块数计算起始地址
0320 781B            665             mov R0,#SCOM_RECV_DATA_BUFFER_ADDR+11
0322 E6              666             mov A,@R0
0323 14              667             dec A
0324 75F040          668             mov B,#64
0327 A4              669             mul AB
0328 209404          670             jb SELECT_SWITCH_BIT,n1965_write_jfq_data1
032B 2400            671             add A,#DATA_BLOCK_JRT_AREA_ADDR_Low
032D 6131            672             ajmp n1965_calc_addr_next1
032F                 673     n1965_write_jfq_data1:
032F 2400            674             add A,#DATA_BLOCK_JFQ_AREA_ADDR_Low
0331                 675     n1965_calc_addr_next1:
0331 FA              676             mov R2,A ;计算当前块的写入地址
0332 E5F0            677             mov A,B
                     678     
0334 C0D0            679             push PSW
0336 209406          680             jb SELECT_SWITCH_BIT,n1965_write_jfq_data2
0339 D0D0            681             pop PSW
033B 3420            682             addc A,#DATA_BLOCK_JRT_AREA_ADDR_High
033D 6143            683             ajmp n1965_calc_addr_next2
033F                 684     n1965_write_jfq_data2:
033F D0D0            685             pop PSW
0341 3401            686             addc A,#DATA_BLOCK_JFQ_AREA_ADDR_High
0343                 687     n1965_calc_addr_next2:
0343 FB              688             mov R3,A
0344 7840            689             mov R0,#64
0346 791C            690             mov R1,#SCOM_RECV_DATA_BUFFER_ADDR+12
0348 12043C          691             lcall func_EEP_IIC_bus_write_n1122
                     692     
034B 30D53C          693             jnb F0,n1965_not_last_block ;F0清零,表示不是最后一块
                     694             ;是最后一块,进行数据校验
034E 7813            695             mov R0,#SCOM_RECV_DATA_BUFFER_ADDR+3
0350 E6              696             mov A,@R0
0351 C3              697             clr C
0352 9408            698             subb A,#8
0354 F5F0            699             mov B,A ;当前块字节数,也就是最后一块字节数存入B
0356 781A            700             mov R0,#SCOM_RECV_DATA_BUFFER_ADDR+10
0358 E6              701             mov A,@R0 ;总块数存入A
0359 1203A1          702             lcall func_verify_dl_block_data_n1986 ;debug
                     703             ;cjne A,#0,n1965_verify_fail ;校验出错,退出
                     704     
                     705     ;写数据有效字节
035C 209410          706             jb SELECT_SWITCH_BIT,n1965_write_jfq_valid_idx_byte
035F 751000          707             mov EEP_RDWR_BYTE_BUFFER_ADDR,#00h
0362 7A00            708             mov R2,#DATA_BLOCK_JRT_AREA_ADDR_Low
0364 7B20            709             mov R3,#DATA_BLOCK_JRT_AREA_ADDR_High
0366 7801            710             mov R0,#1
0368 7910            711             mov R1,#EEP_RDWR_BYTE_BUFFER_ADDR
036A 12043C          712             lcall func_EEP_IIC_bus_write_n1122
036D 617D            713             ajmp n1965_exit_success
036F                 714     n1965_write_jfq_valid_idx_byte:
036F 751000          715             mov EEP_RDWR_BYTE_BUFFER_ADDR,#00h
0372 7A10            716             mov R2,#DATA_VALID_JFQ_IDX_BYTE_ADDR_Low
A51 MACRO ASSEMBLER  MAIN                                                                 04/15/2004 14:47:38 PAGE    12

0374 7B00            717             mov R3,#DATA_VALID_JFQ_IDX_BYTE_ADDR_High
0376 7801            718             mov R0,#1
0378 7910            719             mov R1,#EEP_RDWR_BYTE_BUFFER_ADDR
037A 12043C          720             lcall func_EEP_IIC_bus_write_n1122
                     721     
037D                 722     n1965_exit_success:
                     723             ;数据写完成,提示一下。
037D 12027B          724             lcall func_Scom_send_ack_n1954 ;应答
                     725             ;操作成功,显示LED信息
0380 120543          726             lcall func_Sd_Rc_Data_success_show_LED_n0602
0383 750BFF          727             mov SCOM_RECV_FRAME_VALID_REG,#SCOM_RECV_FRAME_INVALID_KEY ;清除串行口接收有效帧比

⌨️ 快捷键说明

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