📄 main.ls1
字号:
011E 2404 664 ADD A,#04H
0120 2F 665 ADD A,R7
0121 F8 666 MOV R0,A
0122 A600 F 667 MOV @R0,t?744
668 ; } while ( --n != 0 );
669 ; SOURCE LINE # 176
0124 D500C8 F 670 DJNZ n?745,?C0018
671 ; }
672 ; SOURCE LINE # 177
0127 673 ?C0015:
674 ; //提取校验和
675 ; t = (toint(hex[i++])<<4);
676 ; SOURCE LINE # 179
0127 AF00 F 677 MOV R7,i?742
0129 0500 F 678 INC i?742
012B E500 F 679 MOV A,hex?741
012D 2F 680 ADD A,R7
012E F8 681 MOV R0,A
012F E2 682 MOVX A,@R0
0130 FF 683 MOV R7,A
0131 120000 F 684 LCALL _toint
0134 EF 685 MOV A,R7
0135 C4 686 SWAP A
0136 54F0 687 ANL A,#0F0H
0138 F500 F 688 MOV t?744,A
689 ; t += toint(hex[i++]);
690 ; SOURCE LINE # 180
013A AF00 F 691 MOV R7,i?742
013C 0500 F 692 INC i?742
013E E500 F 693 MOV A,hex?741
0140 2F 694 ADD A,R7
0141 F8 695 MOV R0,A
0142 E2 696 MOVX A,@R0
0143 FF 697 MOV R7,A
0144 120000 F 698 LCALL _toint
0147 EF 699 MOV A,R7
0148 2500 F 700 ADD A,t?744
014A F500 F 701 MOV t?744,A
702 ; cc += t;
703 ; SOURCE LINE # 181
014C 2500 F 704 ADD A,cc?746
014E F500 F 705 MOV cc?746,A
706 ; IntelHEX->cc = t;
707 ; SOURCE LINE # 182
0150 E500 F 708 MOV A,IntelHEX?740
0152 2424 709 ADD A,#024H
0154 F8 710 MOV R0,A
0155 A600 F 711 MOV @R0,t?744
A51 MACRO ASSEMBLER MAIN 03/29/2007 22:55:54 PAGE 12
712 ; //检查校验和
713 ; if ( cc == 0 )
714 ; SOURCE LINE # 184
0157 E500 F 715 MOV A,cc?746
0159 7002 716 JNZ ?C0019
717 ; return 1;
718 ; SOURCE LINE # 185
015B D3 719 SETB C
015C 22 720 RET
015D 721 ?C0019:
722 ; else
723 ; return 0;
724 ; SOURCE LINE # 187
015D C3 725 CLR C
726 ; }
727 ; SOURCE LINE # 188
015E 728 ?C0009:
015E 22 729 RET
730 ; END OF _AnalyseHEX
731
732 ;
733 ;
734 ; //蜂鸣器鸣叫
735 ; void Beep()
736
---- 737 RSEG ?PR?Beep?MAIN
0000 738 Beep:
739 USING 0
740 ; SOURCE LINE # 192
741 ; {
742 ; SOURCE LINE # 193
743 ; unsigned int n;
744 ; TMOD &= 0xF0; //T0设置在方式1,即16位定时器(不改变T1的模式)
745 ; SOURCE LINE # 195
0000 5389F0 746 ANL TMOD,#0F0H
747 ; TMOD |= 0x01;
748 ; SOURCE LINE # 196
0003 438901 749 ORL TMOD,#01H
750 ; n = 800;
751 ; SOURCE LINE # 197
752 ;---- Variable 'n?848' assigned to Register 'R6/R7' ----
0006 7F20 753 MOV R7,#020H
0008 7E03 754 MOV R6,#03H
000A 755 ?C0023:
756 ; do
757 ; {
758 ; SOURCE LINE # 199
759 ; TH0 = 0xFC; //设置T0初值=65536-(11059200/12)/(2*f)
760 ; SOURCE LINE # 200
000A 758CFC 761 MOV TH0,#0FCH
762 ; TL0 = 0x66; //f为发声频率(500Hz)
763 ; SOURCE LINE # 201
000D 758A66 764 MOV TL0,#066H
765 ; TR0 = 1; //启动定时器
766 ; SOURCE LINE # 202
0010 D28C 767 SETB TR0
0012 768 ?C0024:
769 ; while ( !TF0 ); //等待定时器溢出
770 ; SOURCE LINE # 203
0012 308DFD 771 JNB TF0,?C0024
0015 772 ?C0025:
773 ; TR0 = 0; //停止定时器
774 ; SOURCE LINE # 204
0015 C28C 775 CLR TR0
776 ; TF0 = 0; //清除溢出标志
777 ; SOURCE LINE # 205
A51 MACRO ASSEMBLER MAIN 03/29/2007 22:55:54 PAGE 13
0017 C28D 778 CLR TF0
779 ; BUZZER = !BUZZER; //翻转I/O口,产生方波振荡,使蜂鸣器发声
780 ; SOURCE LINE # 206
0019 B292 781 CPL BUZZER
782 ; } while ( --n != 0 );
783 ; SOURCE LINE # 207
001B EF 784 MOV A,R7
001C 1F 785 DEC R7
001D 7001 786 JNZ ?C0058
001F 1E 787 DEC R6
0020 788 ?C0058:
0020 14 789 DEC A
0021 4E 790 ORL A,R6
0022 70E6 791 JNZ ?C0023
792 ; BUZZER = 1;
793 ; SOURCE LINE # 208
0024 D292 794 SETB BUZZER
795 ; }
796 ; SOURCE LINE # 209
0026 22 797 RET
798 ; END OF Beep
799
800 ;
801 ;
802 ; /*******************************************************************************
803 ; 函数:Delay()
804 ; 功能:延时0.01s~2.56s
805 ; 参数:t>0时,延时(t*0.01)s
806 ; t=0时,延时2.56s
807 ; 说明:定时10ms的定时器初值=65536-0.01/(1/(f/12)),其中f为晶振频率
808 ; *******************************************************************************/
809 ; void Delay(unsigned char t)
810
---- 811 RSEG ?PR?_Delay?MAIN
0000 812 _Delay:
813 USING 0
814 ; SOURCE LINE # 219
815 ;---- Variable 't?949' assigned to Register 'R7' ----
816 ; {
817 ; SOURCE LINE # 220
818 ; TMOD &= 0xF0; //T0设置在方式1,即16位定时器(不改变T1的模式)
819 ; SOURCE LINE # 221
0000 5389F0 820 ANL TMOD,#0F0H
821 ; TMOD |= 0x01;
822 ; SOURCE LINE # 222
0003 438901 823 ORL TMOD,#01H
0006 824 ?C0029:
825 ; do
826 ; {
827 ; SOURCE LINE # 224
828 ; TH0 = 0xDC; //设置定时器初值(定时10ms)
829 ; SOURCE LINE # 225
0006 758CDC 830 MOV TH0,#0DCH
831 ; TL0 = 0x00;
832 ; SOURCE LINE # 226
0009 E4 833 CLR A
000A F58A 834 MOV TL0,A
835 ; TR0 = 1; //启动定时器
836 ; SOURCE LINE # 227
000C D28C 837 SETB TR0
000E 838 ?C0030:
839 ; while ( !TF0 ); //等待定时器溢出
840 ; SOURCE LINE # 228
000E 308DFD 841 JNB TF0,?C0030
0011 842 ?C0031:
843 ; TR0 = 0; //停止定时器
A51 MACRO ASSEMBLER MAIN 03/29/2007 22:55:54 PAGE 14
844 ; SOURCE LINE # 229
0011 C28C 845 CLR TR0
846 ; TF0 = 0; //清除溢出标志
847 ; SOURCE LINE # 230
0013 C28D 848 CLR TF0
849 ; } while ( --t != 0 ); //循环t次
850 ; SOURCE LINE # 231
0015 DFEF 851 DJNZ R7,?C0029
852 ; }
853 ; SOURCE LINE # 232
0017 22 854 RET
855 ; END OF _Delay
856
857 ;
858 ;
859 ; //跳到RAM执行程序
860 ; void GotoRam()
861
---- 862 RSEG ?PR?GotoRam?MAIN
0000 863 GotoRam:
864 USING 0
865 ; SOURCE LINE # 236
866 ; {
867 ; SOURCE LINE # 237
868 ; //下载完毕后,发送OK、蜂鸣器鸣叫
869 ; printf("OK, press K4 to executing.\r\n");
870 ; SOURCE LINE # 239
0000 7BFF 871 MOV R3,#0FFH
0002 7A00 F 872 MOV R2,#HIGH (?SC_0)
0004 7900 F 873 MOV R1,#LOW (?SC_0)
0006 120000 F 874 LCALL _printf
875 ; Beep();
876 ; SOURCE LINE # 240
0009 120000 F 877 LCALL Beep
000C 878 ?C0033:
879 ; //等待按键K4按下,当K4抬起时,才运行RAM程序
880 ; while ( K4 );
881 ; SOURCE LINE # 242
000C 20B5FD 882 JB K4,?C0033
000F 883 ?C0034:
884 ; Delay(40);
885 ; SOURCE LINE # 243
000F 7F28 886 MOV R7,#028H
0011 120000 F 887 LCALL _Delay
0014 888 ?C0035:
889 ; while ( !K4 );
890 ; SOURCE LINE # 244
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -