新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 51單片機學習筆記(一)_總記

        51單片機學習筆記(一)_總記

        作者: 時間:2016-11-20 來源:網絡 收藏
        單片機電路仿真軟件Proteus;編程軟件Keil;

        在Proteus中設計好電路圖、在Keil中編寫程序編譯生成十六進制文件。

        本文引用地址:http://www.104case.com/article/201611/318622.htm

        在電路圖中載入該十六進制文件通過相應的程序控制電路。

        51hei單片機+Proteus視頻+實例+開發工具包 http://download.csdn.net/detail/leytton/7658297

        http://www.51hei.com/

        文章閱讀

        http://www.51hei.com/mcuteach/252.html

        http://www.51hei.com/mcuteach/150.html

        視頻教程

        http://www.51hei.com/sp/

        JBJB P1.3,L1 意思就是判斷P1.3的值是不是“1” 如果是就跳轉到L1程序執行

        eg1

        MOV R7,#250 ;賦值R7=250 注意沒有"H"

        LOOP:

        DJNZ R7,LOOP ;R7=R7-1;if(R7!=0) goto LOOP;循環250次

        eg2 http://www.51hei.com/mcuteach/244.html

        MOV R7,#20

           MOV R0,#30H

        LOOP:MOV A,@R0

           INC R0

           DJNZ R7,LOOP

        這個例程中大部份指令我們是能看懂的,第一句,是將立即數20送到R7中,執行完后R7中的值應當是20。第二句是將立即數30H送入R0工作寄存器中,所以執行完后,R0單元中的值是30H,第三句,這是看一下R0單元中是什么值,把這個值作為地址,取這個地址單元的內容送入A中,此時,執行這條指令的結果就相當于MOV A,30H。第四句,沒學過,就是把R0中的值加1,因此執行完后,R0中的值就是31H,第五句,學過,將R7中的值減1,看是否等于0,不等于0,則轉到標號LOOP處繼續執行,因此,執行完這句后,將轉去執行MOV A,@R0這句話,此時相當于執行了MOV A,31H(因為此時的R0中的值已是31H了),如此,直到R7中的值逐次相減等于0,也就是循環20次為止,就實現了我們的要求:從30H單元開始將20個數據送入A中。

        AJMP無條件跳轉指令

        以直接地址為目的操作數的指令

        MOV direct,A例:MOV 20H,A

        MOV direct,Rn MOV 20H,R1

        MOV direct1,direct2 MOV 20H,30H

        MOV direct,@Ri MOV 20H,@R1

        MOV direct,#data MOV 20H,#34H

        以間接地址為目的操作數的指令

        MOV @Ri,A例:MOV @R0,A

        MOV @Ri,direct MOV @R1,20H

        MOV @Ri,#data MOV @R0,#34H

        十六位數的傳遞指令

        MOV DPTR,#data16

        51單片機匯編指令周期表:

        http://blog.sina.com.cn/s/blog_4419d72d0100mt7r.html

        http://www.51hei.com/mcuteach/242.html

        單片機的累加器A與片外RAM之間的數據傳遞類指令

        MOVX A,@Ri

        MOVX @Ri,A

        MOVX A,@DPTR

        MOVX @DPTR,A

        在51系列單片機中,與外部存儲器RAM打交道的只能是A累加器。所有需要傳送入外部RAM的數據必需要通過A送去,而所有要讀入的外部RAM中的數據也必需通過A讀入。在此我們能看出內外部RAM的區別了,內部RAM間能直接進行數據的傳遞,而外部則不行,比如,要將外部RAM中某一單元(設為0100H單元的數據)送入另一個單元(設為0200H單元),也必須先將0100H單元中的內容讀入A,然后再傳送到0200H單元中去。

        MOVC就是讀代碼存儲器,MOVX就是讀寫外部存儲器,即外部RAM

        51C語言

        表 3-1 KEIL uVision2 單片機c語言編譯器所支持的數據類型

        摘自http://www.51hei.com/mcuteach/146.html

        數據類型

        長 度

        值 域

        unsigned char

        單字節

        0~255

        signed char

        單字節

        -128~+127

        unsigned int

        雙字節

        0~65535

        signed int

        雙字節

        -32768~+32767

        unsigned long

        四字節

        0~4294967295

        signed long

        四字節

        -2147483648~+2147483647

        float

        四字節

        ±1.175494E-38~±3.402823E+38

        *

        1~3 字節

        對象的地址

        bit

        0 或 1

        sfr

        單字節

        0~255

        sfr16

        雙字節

        0~65535

        sbit

        0 或 1


        位運算:[摘自百度百科]

        P1=(4>0)&&(9<0xab);//將邏輯運算結果送P1口

        P0=0xa2^0x3c;//將條件運算結果送P0口,P0=8=0000 1000B

        一個簡單的C51程序[參考http://www.51hei.com/mcuteach/248.html]

        #include void DELAY()   //延時函數{ unsigned char i,j;for(i=0;i<250;i++){for(j=0;j<200;j++);} }void main() //程序從這里開始執行{while(1) //這句的作用就是反復的執行下面這個{}中包含的4句{P1_0=1;  //(1)熄滅燈DELAY(); //(2)延時一段時間P1_0=0;  //(3)點亮燈DELAY(); //(4)延時一段時間}}



        評論


        技術專區

        關閉
        主站蜘蛛池模板: 宜川县| 革吉县| 汉中市| 曲麻莱县| 丰顺县| 运城市| 永和县| 栾城县| 平山县| 西丰县| 江达县| 罗甸县| 嘉兴市| 兴隆县| 巩留县| 岑溪市| 水富县| 聂拉木县| 奉化市| 虞城县| 鹿泉市| 北安市| 凭祥市| 巴马| 信宜市| 甘孜县| 永靖县| 北川| 临城县| 尚志市| 阳高县| 长白| 丘北县| 比如县| 修文县| 广汉市| 夏津县| 新河县| 锦屏县| 安图县| 伊宁县|