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

📄 main.lst

📁 一个下载数据的例子 一个下载数据的例子
💻 LST
📖 第 1 页 / 共 3 页
字号:
010B FB              238             mov R3,A
                     239             ;发送数据块
010C 12011F          240             lcall func_Send_File_Block_64_byte_n2068
010F 5008            241             jnc n2067_exit_failed
0111 D004            242             pop 4 ;退出R4,存放块的个数
0113 DCCF            243             djnz R4,n2067_next_block
0115                 244     n2067_exit_success:
                     245             ;操作成功,显示LED信息
0115 120543          246             lcall func_Sd_Rc_Data_success_show_LED_n0602
0118 22              247             ret
0119                 248     n2067_exit_failed:
0119 D004            249             pop 4
011B                 250     n2067_exit_failed2:
                     251             ;操作失败,显示LED信息
011B 120570          252             lcall func_Sd_Rc_Data_fail_show_LED_n0603
011E 22              253             ret
                     254     ;func_File_Block_Full_Write_Entry_n2067:end
A51 MACRO ASSEMBLER  MAIN                                                                 04/15/2004 14:47:38 PAGE     5

                     255     
                     256     
                     257     
                     258     ;发送数据块的64个字节
011F                 259     func_Send_File_Block_64_byte_n2068:
011F                 260     n2068_paster_block_data:
011F BC0005          261             cjne R4,#0,n2068_clock_len_not_0
0122 BD0002          262             cjne R5,#0,n2068_clock_len_not_0
0125 21D7            263             jmp n2068_exit_success
0127                 264     n2068_clock_len_not_0:
0127 BC4000          265             cjne R4,#64,n2068_nextline_1
012A                 266     n2068_nextline_1:
012A 5008            267             jnc n2068_data_size_big_equ_64 ;大于等于64字节
012C BD0100          268             cjne R5,#1,n2068_nextline_2
012F                 269     n2068_nextline_2:
012F 5003            270             jnc n2068_data_size_big_equ_64 ;大于等于256字节
                     271             ;小于64字节,转
0131 02018A          272             ljmp n2068_less_64_byte
0134                 273     n2068_data_size_big_equ_64:
0134 7810            274             mov R0,#EEP_RDWR_BYTE_BUFFER_ADDR
0136 7510FA          275             mov EEP_RDWR_BYTE_BUFFER_ADDR,#0FAh
0139 7511FB          276             mov EEP_RDWR_BYTE_BUFFER_ADDR+1,#0FBh
013C 751235          277             mov EEP_RDWR_BYTE_BUFFER_ADDR+2,#035h
                     278             ;len
013F 751342          279             mov EEP_RDWR_BYTE_BUFFER_ADDR+3,#66
0142 8F14            280             mov EEP_RDWR_BYTE_BUFFER_ADDR+4,R7
0144 8E15            281             mov EEP_RDWR_BYTE_BUFFER_ADDR+5,R6
0146 7916            282             mov R1,#EEP_RDWR_BYTE_BUFFER_ADDR+6
0148 7840            283             mov R0,#64
014A 12048D          284             lcall func_EEP_IIC_bus_read_n1123
014D 75F046          285             mov B,#70
0150 1202A3          286             lcall func_Scom_Send_frame_n1957
                     287             ;等待应答帧
0153 7828            288             mov R0,#40
0155                 289     n2068_delay_Max_2s:
0155 7401            290             mov A,#1
0157 12059B          291             lcall func_delay_A_mul_50ms_n2241
015A E50B            292             mov A,SCOM_RECV_FRAME_VALID_REG
015C B4FF04          293             cjne A,#SCOM_RECV_FRAME_INVALID_KEY,n2068_recv_valid_frame
015F D8F4            294             djnz R0,n2068_delay_Max_2s
0161 21D9            295             ajmp n2068_exit_failed ;超时退出
0163                 296     n2068_recv_valid_frame:
0163 750BFF          297             mov SCOM_RECV_FRAME_VALID_REG,#SCOM_RECV_FRAME_INVALID_KEY
0166 7812            298             mov R0,#SCOM_RECV_DATA_BUFFER_ADDR+2
0168 E6              299             mov A,@R0
                     300             ;如果不是应答帧,则返回退出
0169 B4316D          301             cjne A,#Scom_frame_Op_Send_ACK_Key,n2068_exit_failed
016C 750A00          302             mov SCOM_RECV_DATA_CNT_REG,#0
                     303     
                     304             ;EEPROM源地址增加64字节
016F 7440            305             mov A,#64
0171 2A              306             add A,R2
0172 FA              307             mov R2,A
0173 7400            308             mov A,#0
0175 3B              309             addc A,R3
0176 FB              310             mov R3,A
                     311             ;目的地址增加64字节
0177 7440            312             mov A,#64
0179 2E              313             add A,R6
017A FE              314             mov R6,A
017B 7400            315             mov A,#0
017D 3F              316             addc A,R7
017E FF              317             mov R7,A
                     318             ;块长度减64字节
017F C3              319             clr C
0180 EC              320             mov A,R4
A51 MACRO ASSEMBLER  MAIN                                                                 04/15/2004 14:47:38 PAGE     6

0181 9440            321             subb A,#64
0183 FC              322             mov R4,A
0184 ED              323             mov A,R5
0185 9400            324             subb A,#0
0187 FD              325             mov R5,A
0188 8095            326             jmp n2068_paster_block_data
                     327     
                     328             ;发送最后的小于64字节的数据
018A                 329     n2068_less_64_byte:
018A 7810            330             mov R0,#EEP_RDWR_BYTE_BUFFER_ADDR
018C 7510FA          331             mov EEP_RDWR_BYTE_BUFFER_ADDR,#0FAh
018F 7511FB          332             mov EEP_RDWR_BYTE_BUFFER_ADDR+1,#0FBh
0192 751235          333             mov EEP_RDWR_BYTE_BUFFER_ADDR+2,#035h
0195 8F14            334             mov EEP_RDWR_BYTE_BUFFER_ADDR+4,R7
0197 8E15            335             mov EEP_RDWR_BYTE_BUFFER_ADDR+5,R6
0199 7916            336             mov R1,#EEP_RDWR_BYTE_BUFFER_ADDR+6
019B A804            337             mov R0,4 ;R4
019D 12048D          338             lcall func_EEP_IIC_bus_read_n1123
01A0 EC              339             mov A,R4
01A1 2406            340             add A,#6
01A3 F5F0            341             mov B,A
01A5 EC              342             mov A,R4
01A6 2402            343             add A,#2
                     344             ;len
01A8 F513            345             mov EEP_RDWR_BYTE_BUFFER_ADDR+3,A
01AA 1202A3          346             lcall func_Scom_Send_frame_n1957
                     347             ;等待应答帧
01AD 7814            348             mov R0,#20
01AF                 349     n2068_delay_Max_1s_2:
01AF 7401            350             mov A,#1
01B1 12059B          351             lcall func_delay_A_mul_50ms_n2241
01B4 E50B            352             mov A,SCOM_RECV_FRAME_VALID_REG
01B6 B4FF04          353             cjne A,#SCOM_RECV_FRAME_INVALID_KEY,n2068_recv_valid_frame_2
01B9 D8F4            354             djnz R0,n2068_delay_Max_1s_2
01BB 21D9            355             ajmp n2068_exit_failed ;超时退出
01BD                 356     n2068_recv_valid_frame_2:
01BD 750BFF          357             mov SCOM_RECV_FRAME_VALID_REG,#SCOM_RECV_FRAME_INVALID_KEY
01C0 7812            358             mov R0,#SCOM_RECV_DATA_BUFFER_ADDR+2
01C2 E6              359             mov A,@R0
                     360             ;如果不是应答帧,则返回退出
01C3 B43113          361             cjne A,#Scom_frame_Op_Send_ACK_Key,n2068_exit_failed
01C6 750A00          362             mov SCOM_RECV_DATA_CNT_REG,#0
                     363             ;EEPROM源地址增加64字节
01C9 EC              364             mov A,R4
01CA 2A              365             add A,R2
01CB FA              366             mov R2,A
01CC 7400            367             mov A,#0
01CE 3B              368             addc A,R3
01CF FB              369             mov R3,A
                     370             ;目的地址增加64字节
01D0 EC              371             mov A,R4
01D1 2E              372             add A,R6
01D2 FE              373             mov R6,A
01D3 7400            374             mov A,#0
01D5 3F              375             addc A,R7
01D6 FF              376             mov R7,A
01D7                 377     n2068_exit_success:
01D7 D3              378             setb C
01D8 22              379             ret
01D9                 380     n2068_exit_failed:
01D9 C3              381             clr C
01DA 22              382             ret
                     383     ;func_Send_File_Block_64_byte_n2068:end
                     384     
                     385     
                     386     
A51 MACRO ASSEMBLER  MAIN                                                                 04/15/2004 14:47:38 PAGE     7

                     387     ;///////////////////////////////////////////////////////////////////////
                     388     ;///////////////////////////////////////////////////////////////////////
                     389     ;///////////////////////////////////////////////////////////////////////
                     390     ;///////////////串行口处理模块服务程序//////////////////////////////////
                     391     ;///////////////////////////////////////////////////////////////////////
                     392     ;///////////////////////////////////////////////////////////////////////
                     393     ;///////////////////////////////////////////////////////////////////////
                     394     
                     395     ;中断、定时器、串口的初始化寄存器的操作
01DB                 396     func_init_timer_scom_irq_reg_n1946:
                     397     ;input:NO,output:NO,use:NO
01DB C28C            398             clr TR0
01DD C28E            399             clr TR1
01DF 758DFA          400             mov TH1,#IRQ_TIMER1_BYTE_KEY_FAh;设定时器1初始值,波特率4800
01E2 758BFA          401             mov TL1,#IRQ_TIMER1_BYTE_KEY_FAh
                     402             ;T1工作于方式2,T0工作于方式1,都只受TRi控制,计数源为内部晶振分频
01E5 758921          403             mov TMOD,#21h
                     404     
                     405             ;设置串行口控制寄存器
01E8 759870          406             mov scon,#70h
                     407             ;0111 0000,工作在方式1,SM2为1,REN为1,允许接收,清零Ti和Ri
                     408     
01EB 75B800          409             mov IP,#00h;中断优先级寄存器清零
01EE D2BC            410             setb ps;串行口优先级设为高优先级
                     411     
01F0 75A800          412             mov IE,#00h;中断允许寄存器清零
01F3 C2A9            413             clr ET0;不允许定时器0中断
01F5 C2AB            414             clr ET1;不允许定时器1中断
01F7 D2AC            415             setb ES;允许串行口中断
01F9 D2AF            416             setb EA;开总中断允许
01FB D28E            417             setb TR1;启动定时器1计数
01FD 22              418             ret
                     419     ;func_init_timer_scom_irq_reg_n1946:end
                     420     
                     421     
                     422     
                     423     ;///////////////////////////////////////////////////////////////////////
                     424     ;///////////////串行口通信中断服务程序//////////////////////////////////
                     425     ;///////////////////////////////////////////////////////////////////////
01FE                 426     func_IRQ_Serial_Comm_service_n1945:
01FE C0D0            427             push psw
0200 C0E0            428             push acc
                     429     ;       push B
                     430     ;       mov A,R0
0202 C000            431             push 0 ;R0
                     432     ;       push 0
                     433     ;       push 1
                     434     ;接收数据
0204 30984C          435             jnb ri,n1945_send_data
0207 C298            436             clr ri
                     437             ;如果串行口接收帧有效比特还没有清零,则也退出
0209 E50B            438             mov A,SCOM_RECV_FRAME_VALID_REG
020B B4FF45          439             cjne A,#SCOM_RECV_FRAME_INVALID_KEY,n1945_send_data
020E E50A            440             mov A,SCOM_RECV_DATA_CNT_REG
                     441             ;接收计数是否到80,到80则表示接收满
0210 B45000          442             cjne A,#80,n1945_nextline_1
0213                 443     n1945_nextline_1:
0213 4003            444             jc n1945_recv_cnt_less_80
0215 750A00          445             mov SCOM_RECV_DATA_CNT_REG,#0
0218                 446     n1945_recv_cnt_less_80:
0218 7810            447             mov R0,#SCOM_RECV_DATA_BUFFER_ADDR
021A E50A            448             mov A,SCOM_RECV_DATA_CNT_REG
021C 28              449             add A,R0
021D F8              450             mov R0,A
021E E599            451             mov A,sbuf
0220 F6              452             mov @R0,A
A51 MACRO ASSEMBLER  MAIN                                                                 04/15/2004 14:47:38 PAGE     8

0221 050A            453             inc SCOM_RECV_DATA_CNT_REG
                     454     
0223 E50A            455             mov A,SCOM_RECV_DATA_CNT_REG
                     456             ;判断第1个字符是否是帧开始标志字符1
0225 B4010B          457             cjne A,#1,n1945_not_first_byte;当前计数值是否为1
0228 E6              458             mov A,@R0
0229 B4FA02          459             cjne A,#0FAh,n1945_first_byte_not_match;当前字符是否为开始标志字符1
022C 8025            460             jmp n1945_send_data
022E                 461     n1945_first_byte_not_match: ;第一个字符不是开始标志字符1
022E 750A00          462             mov SCOM_RECV_DATA_CNT_REG,#0
0231 8020            463             jmp n1945_send_data
0233                 464     n1945_not_first_byte: ;当前计数值不是1
0233 B4020B          465             cjne A,#2,n1945_not_second_byte;当前计数值是否为2
0236 E6              466             mov A,@R0
0237 B4FB02          467             cjne A,#0FBh,n1945_second_byte_not_match;当前字符是否为开始标志字符2
023A 8017            468             jmp n1945_send_data
023C                 469     n1945_second_byte_not_match: ;第二个字符不是开始标志字符2
023C 750A00          470             mov SCOM_RECV_DATA_CNT_REG,#0
023F 8012            471             jmp n1945_send_data
0241                 472     n1945_not_second_byte: ;当前计数值不是2,判断计数值是否大于5
0241 B40500          473             cjne A,#5,n1945_nextline_2
0244                 474     n1945_nextline_2:
                     475             ;判断当前接收的字节数,小于5,则表示没有接收完。转
0244 400D            476             jc n1945_send_data
                     477             ;大于等于5,则比较接收的帧数据长度是否到了。
0246 7813            478             mov R0,#SCOM_RECV_DATA_BUFFER_ADDR+3
0248 E6              479             mov A,@R0
0249 2405            480             add A,#5
024B B50A05          481             cjne A,SCOM_RECV_DATA_CNT_REG,n1945_send_data;长度不等,没有到,转
024E 750B00          482             mov SCOM_RECV_FRAME_VALID_REG,#SCOM_RECV_FRAME_VALID_KEY ;大于等于3,置位帧有效标志
0251 4153            483             ajmp n1945_send_data

⌨️ 快捷键说明

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