?? main.lst
字號:
+1 633 ; if ( c == '-' )
009E BE2D02 +1 634 CJNE R6, #'-', DispChar_elseif
+1 635 ; {
+1 636 ; DispBuf[x] = 0x40;
+1 637 ; }
00A1 8019 +1 638 SJMP DispChar_endif
+1 639 ; else if ( ( c >= '0' ) && ( c <= '9' ) )
00A3 +1 640 DispChar_elseif:
+1 641 BLO R6, #'0', DispChar_endif ;宏BLO的定義見Branch.INC
+1 646 BHI R6, #'9', DispChar_endif ;宏BHI的定義見Branch.INC
+1 651 ; {
+1 652 ; DispBuf[x] = Tab[c-'0'];
00AF 7430 +1 653 MOV A, #DispBuf
00B1 2F +1 654 ADD A, R7
00B2 F8 +1 655 MOV R0, A
00B3 EE +1 656 MOV A, R6
00B4 C3 +1 657 CLR C
00B5 9430 +1 658 SUBB A, #'0'
00B7 9000BD +1 659 MOV DPTR, #DispChar_Tab
A51 MACRO ASSEMBLER MAIN 06/23/2006 11:55:35 PAGE 11
00BA 93 +1 660 MOVC A, @A+DPTR
00BB F6 +1 661 MOV @R0, A
+1 662 ; }
00BC +1 663 DispChar_endif:
+1 664 ;}
00BC 22 +1 665 RET
00BD +1 666 DispChar_Tab:
+1 667 ; 0123456789的數(shù)碼管字型數(shù)據(jù)
00BD 3F065B4F +1 668 DB 0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F
00C1 666D7D07
00C5 7F6F
+1 669
+1 670
+1 671 ;*************************************************************************
+1 672 ;函數(shù):DispStr()
+1 673 ;功能:在數(shù)碼管上顯示字符串
+1 674 ;參數(shù):
+1 675 ; x:數(shù)碼管的坐標位置(0~7)
+1 676 ; *s:要顯示的字符串(字符僅限十進制數(shù)字和減號)
+1 677 ;*************************************************************************
+1 678 ;void DispStr(unsigned char x, unsigned char *s)
+1 679 ;x = R7
+1 680 ;*s = (0x08,0x09,0x0A)
00C7 +1 681 DispStr:
+1 682 ;{
00C7 C002 +1 683 PUSH 0x02
00C9 C003 +1 684 PUSH 0x03
00CB C006 +1 685 PUSH 0x06
+1 686 ; unsigned char c;
+1 687 ; 指定:c = R3
00CD EF +1 688 MOV A, R7
00CE FA +1 689 MOV R2, A
+1 690 ; for (;;)
00CF +1 691 DispStr_for:
+1 692 ; {
+1 693 ; c = *s;
00CF A908 +1 694 MOV R1, 0x08
00D1 850983 +1 695 MOV DPH, 0x09
00D4 850A82 +1 696 MOV DPL, 0x0A
00D7 12001E +1 697 LCALL BytePtrLD
00DA FB +1 698 MOV R3, A
+1 699 ; if ( c == '\0' ) break;
00DB 6012 +1 700 JZ DispStr_endfor
+1 701 ; s++;
+1 702 INC_W 0x09, 0x0A
+1 708 ; DispChar(x,c);
00E5 EB +1 709 MOV A, R3
00E6 FE +1 710 MOV R6, A
00E7 EA +1 711 MOV A, R2
00E8 FF +1 712 MOV R7, A
00E9 120097 +1 713 LCALL DispChar
+1 714 ; x++;
00EC 0A +1 715 INC R2
+1 716 ; }
00ED 80E0 +1 717 SJMP DispStr_for
00EF +1 718 DispStr_endfor:
00EF D006 +1 719 POP 0x06
00F1 D003 +1 720 POP 0x03
00F3 D002 +1 721 POP 0x02
+1 722 ;}
00F5 22 +1 723 RET
+1 724
+1 725
+1 726 ;*************************************************************************
+1 727 ;函數(shù):DispDotOn()
+1 728 ;功能:顯示指定位的小數(shù)點
A51 MACRO ASSEMBLER MAIN 06/23/2006 11:55:35 PAGE 12
+1 729 ;參數(shù):x為數(shù)碼管坐標
+1 730 ;*************************************************************************
+1 731 ;void DispDotOn(unsigned char x)
+1 732 ;x = R7
00F6 +1 733 DispDotOn:
+1 734 ;{
+1 735 ; DispBuf[7-x] |= 0x80;
00F6 7407 +1 736 MOV A, #7
00F8 C3 +1 737 CLR C
00F9 9F +1 738 SUBB A, R7
00FA 2430 +1 739 ADD A, #DispBuf
00FC F8 +1 740 MOV R0, A
00FD E6 +1 741 MOV A, @R0
00FE 4480 +1 742 ORL A, #0x80
0100 F6 +1 743 MOV @R0, A
+1 744 ;}
0101 22 +1 745 RET
+1 746
+1 747
+1 748 ;*************************************************************************
+1 749 ;函數(shù):DispInit()
+1 750 ;功能:數(shù)碼管掃描顯示初始化
+1 751 ;*************************************************************************
+1 752 ;void DispInit()
0102 +1 753 DispInit:
+1 754 ;{
+1 755 ; DispClear();
0102 12008D +1 756 LCALL DispClear
+1 757 ; EA = 0;
+1 758 ; TMOD &= 0x0F;
+1 759 ; TMOD |= 0x10;
+1 760 ; TH1 = 0xFC;
+1 761 ; TL1 = 0x66;
+1 762 ; TR1 = 1;
+1 763 ; ET1 = 1;
+1 764 ; EA = 1;
0105 C2AF +1 765 CLR EA
0107 53890F +1 766 ANL TMOD, #0x0F
010A 438910 +1 767 ORL TMOD, #0x10
010D 758DFC +1 768 MOV TH1, #0xFC
0110 758B66 +1 769 MOV TL1, #0x66
0113 D28E +1 770 SETB TR1
0115 D2AB +1 771 SETB ET1
0117 D2AF +1 772 SETB EA
+1 773 ;}
0119 22 +1 774 RET
+1 775
776 ;$include (I2C.INC) ;I2C總線驅(qū)動程序
+1 777 ;*************************************************************************
+1 778 ; I2C.INC
+1 779 ; 標準80C51單片機模擬I2C總線的主機程序頭文件
+1 780 ; Copyright (c) 2006,廣州周立功單片機發(fā)展有限公司
+1 781 ; All rights reserved.
+1 782 ; 本程序僅供學習參考,不提供任何可靠性方面的擔保;請勿用于商業(yè)目的
+1 783 ;*************************************************************************
+1 784
+1 785
+1 786 ;*************************************************************************
+1 787 ;模擬I2C總線的引腳定義
+1 788 ;*************************************************************************
00B4 +1 789 I2C_SCL BIT P3.4
00B5 +1 790 I2C_SDA BIT P3.5
+1 791
+1 792
+1 793 ;*************************************************************************
+1 794 ;定義I2C總線時鐘的延時值,要根據(jù)實際情況修改,取值1~255
A51 MACRO ASSEMBLER MAIN 06/23/2006 11:55:35 PAGE 13
+1 795 ;SCL信號周期約為(I2C_DELAY_VALUE*4+12)個機器周期
+1 796 ;*************************************************************************
0005 +1 797 I2C_DELAY_VALUE EQU 5
+1 798
+1 799
+1 800 ;*************************************************************************
+1 801 ;定義I2C總線停止后在下一次開始之前的等待時間,取值1~65535
+1 802 ;等待時間約為(I2C_STOP_WAIT_VALUE*8)個機器周期
+1 803 ;對于多數(shù)器件取值為1即可;但對于某些器件來說,較長的延時是必須的
+1 804 ;*************************************************************************
0001 +1 805 I2C_STOP_WAIT_VALUE EQU 1
+1 806
+1 807
+1 808 ;*************************************************************************
+1 809 ;定義延時變量,用于宏I2C_Delay()
+1 810 ;*************************************************************************
+1 811 ;unsigned char data I2C_Delay_t;
0039 +1 812 I2C_Delay_t DATA GLOBAL_IRAM ;在主文件里要用SET定義GLOBAL_IRAM的初值
003A +1 813 GLOBAL_IRAM SET GLOBAL_IRAM+1
+1 814
+1 815
+1 816 ;*************************************************************************
+1 817 ;宏定義:I2C_Delay
+1 818 ;功能:延時,模擬I2C總線專用
+1 819 ;*************************************************************************
+1 820 I2C_Delay MACRO
+1 821 MOV I2C_Delay_t, #I2C_DELAY_VALUE
+1 822 DJNZ I2C_Delay_t, $
+1 823 ENDM
+1 824
+1 825
+1 826 ;*************************************************************************
+1 827 ;函數(shù):I2C_Init()
+1 828 ;功能:I2C總線初始化,使總線處于空閑狀態(tài)
+1 829 ;說明:在main()函數(shù)的開始處,通常應當要執(zhí)行一次本函數(shù)
+1 830 ;*************************************************************************
+1 831 ;void I2C_Init()
011A +1 832 I2C_Init:
+1 833 ;{
+1 834 ; I2C_SCL = 1;
+1 835 ; I2C_Delay();
+1 836 ; I2C_SDA = 1;
+1 837 ; I2C_Delay();
011A D2B4 +1 838 SETB I2C_SCL
+1 839 I2C_Delay
0122 D2B5 +1 842 SETB I2C_SDA
+1 843 I2C_Delay
+1 846 ;}
012A 22 +1 847 RET
+1 848
+1 849
+1 850 ;*************************************************************************
+1 851 ;函數(shù):I2C_Start()
+1 852 ;功能:產(chǎn)生I2C總線的起始狀態(tài)
+1 853 ;說明:
+1 854 ; SCL處于高電平期間,當SDA出現(xiàn)下降沿時啟動I2C總線
+1 855 ; 不論SDA和SCL處于什么電平狀態(tài),本函數(shù)總能正確產(chǎn)生起始狀態(tài)
+1 856 ; 本函數(shù)也可以用來產(chǎn)生重復起始狀態(tài)
+1 857 ; 本函數(shù)執(zhí)行后,I2C總線處于忙狀態(tài)
+1 858 ;*************************************************************************
+1 859 ;void I2C_Start()
+1 860 ;{
012B +1 861 I2C_Start:
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -