欧美一级毛片免费高清

  • <tr id='eriSMQ'><strong id='eriSMQ'></strong><small id='eriSMQ'></small><button id='eriSMQ'></button><li id='eriSMQ'><noscript id='eriSMQ'><big id='eriSMQ'></big><dt id='eriSMQ'></dt></noscript></li></tr><ol id='eriSMQ'><option id='eriSMQ'><table id='eriSMQ'><blockquote id='eriSMQ'><tbody id='eriSMQ'></tbody></blockquote></table></option></ol><u id='eriSMQ'></u><kbd id='eriSMQ'><kbd id='eriSMQ'></kbd></kbd>

    <code id='eriSMQ'><strong id='eriSMQ'></strong></code>

    <fieldset id='eriSMQ'></fieldset>
          <span id='eriSMQ'></span>

              <ins id='eriSMQ'></ins>
              <acronym id='eriSMQ'><em id='eriSMQ'></em><td id='eriSMQ'><div id='eriSMQ'></div></td></acronym><address id='eriSMQ'><big id='eriSMQ'><big id='eriSMQ'></big><legend id='eriSMQ'></legend></big></address>

              <i id='eriSMQ'><div id='eriSMQ'><ins id='eriSMQ'></ins></div></i>
              <i id='eriSMQ'></i>
            1. <dl id='eriSMQ'></dl>
              1. <blockquote id='eriSMQ'><q id='eriSMQ'><noscript id='eriSMQ'></noscript><dt id='eriSMQ'></dt></q></blockquote><noframes id='eriSMQ'><i id='eriSMQ'></i>

                首頁 > 應用 > 單片機應〗用
                [導讀]做了一單片機設計,要用C語言與匯編語言同時實現,現將這次設計的感受和收獲,還有遇到的問題寫◥下,歡迎感興趣的朋友交流想法,提出建議。

                做了一單片機設計,要用C語言與匯編語言同時實現,現將這次設計的感受和收獲,還有遇到的問題寫下,歡迎感興趣的朋友交流想法,提出建議。

                單片機設計:基於51單片機的99碼表設計

                軟件環境:Proteus8.0 + Keil4

                要求:1,開關按xzd998一下,數碼管開始計時。2,按兩下,數碼管顯示靜止。3,按三下,數碼管數值清零。

                C語言程序如╱下:

                #include

                #define uint unsigned int

                #define uchar unsigned char

                uchar shi,ge,aa,keycount=0,temp;

                sbit anjian=P1^7;

                uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};

                void display(shi,ge);

                void key ();

                void init();

                void delay(uint z);

                /*-----主程序-----*/

                void main()

                {

                init(); //初始化

                while(1)

                {

                key ();

                if(keycount==1)

                TR0=1; //開中斷

                if(keycount==2)

                TR0=0;

                if(keycount==3)

                {

                temp=0;

                keycount=0;

                }

                if(aa==10){aa=0;

                if(temp<=99)

                {

                temp++;display(shi,ge);

                }

                else

                temp=0;}

                }

                }

                /*------初始化程序-------*/

                void init()

                {

                keycount=0;

                temp=0;

                TMOD=0x01;

                TH0=(65536-50000)/256;

                TL0=(65536-50000)%256;

                EA=1;

                ET0=1;

                //TR0=0;

                }

                /*-----定時器∑中斷-----*/

                void timer0() interrupt 1

                {

                TH0=(65536-50000)/256;

                TL0=(65536-50000)%256;

                aa++;

                }

                /*-----顯示子程序-----*/

                void display(shi,ge)

                {

                shi=temp/10;

                ge=temp%10;

                P0=table[shi];;delay(70);

                P2=table[ge]; ;delay(70);

                }

                /*-----按鍵檢測子程序-----*/

                void key ()

                {

                if(anjian==0)

                {

                delay(5); //消抖

                if(anjian==0)

                keycount++;

                }

                //while(anjian==0);

                //display(shi,ge); //等待按鍵彈起

                }

                /*-----延時子程序-----*/

                void delay(uint z) //延時約1ms

                {

                uint x,y;

                for(x=z;x>0;x--)

                for(y=100;y>0;y--);

                }

                電路仿真結果♀如下:

                 

                好了,那麽接下來我們就開始C語言——>匯編語言之旅^_^

                (1)C語言1-10行改為

                ORG 0000H //匯編起始偽╳指令,功能是規定程序存儲器中源程序或數據塊存放的起始地址

                ajmp STAR //ajmp無條件跳轉◇指令

                ORG 000bh

                ajmp timer0

                anjian equ P1.7 //位定義

                keycount equ 40h

                shi equ 41h

                gewei equ 42h

                aa equ 43h

                temp equ 44h

                tab: db 3fh,6h,5bh,4fh,66h //建表

                db 6dh,7dh,7h,7fh,6fh

                (2)C語言中的初始化函數 12-14行和39-49行改為

                1 STAR: 2 acall init //子程卐序近程調用指令,功能是主程序調用●子程序,調用子程序的範圍為2kb

                init:

                mov keycount,#0 //keycount=0

                mov temp,#0 //temp=1

                mov tmod,#01h //TMOD=0x01

                mov TH0,#60

                mov TL0,#176

                setb EA //位置ζ位指令,對操作數所指○出的位進行置1操作

                setb ET0

                setb TR0

                ret

                acall為子程序近程調用指令,返回用ret。

                (3)C語言中15-35行是個while循環,邏輯比較繁瑣,註意了!

                START:

                acall display

                inc temp //加1指令,將操作數所指定的單元或寄存器中的內容加1

                acall delay70 //近程調用delay70

                x8: mov r0,keycount

                cjne r0,#2,F1 //cjne比較跳已經到了馬車旁邊轉指令,若r0=2則跳轉到x8,否則跳萬分之一轉到F1。

                ajmp x8

                F1: mov r0,temp

                cjne r0,#99,START //若r0<99時,重復循環,否則temp=0

                mov temp,#0

                ajmp START

                F9:

                acall key

                mov r0,keycount

                cjne r0,#0,F2 //keycount=0順序執行,否則跳轉到F1

                CLR P1.3 //清0

                SETB TR0

                F2: mov r0,keycount //第二次按鍵

                cjne r0,#2,F2

                clr TR0

                reti

                mov r0,keycount //第三次按鍵

                cjne r0,#3,F3

                mov temp,#0

                mov keycount,#0

                inc增量指令,功能是將操作數所指定的單元或寄存器中的內容加1,其結果返還回原操作數單元中。

                clr位復位,功能是對操作數所指出的位進行清“0”操作。

                或者在中斷函數中

                timer0:

                w1:

                acall key

                mov TH0,#60

                mov TL0,#176

                cpl p1.0

                JB keycount,x2

                ajmp x3

                x2:

                ajmp START

                clr p1.0

                ajmp w1

                ajmp w1

                x3: mov r0,keycount

                cjne r0,#3,w1 //若r0=3則順序執行,否則跳轉到w1

                mov temp,#0

                mov keycount,#0

                ret

                (4)C語言58-64行display函數改為

                display:

                mov a,temp

                mov b,#10

                div ab //除法指令,實現兩個八位無符號數的除法操作。

                mov r2,A

                mov r3,B

                mov dptr,#tab //16位數據傳送使用方式

                mov a,r2

                movc a,@a+dptr //查表,先將累加器A的內容與數據指針寄存器DPTR的內①容相加,再以其結果為地足足半個時辰址,將該地址的結果送入∏A中

                mov P0,a

                acall delay70

                nop //空指令

                mov a,r3

                movc a,@a+dptr

                mov P2,a

                nop

                acall delay70

                ret

                div為除法指話令,功能是實現兩個8位無符號數的除法操作,一般被除數放在累加器A中,除數放□在寄存器B中。指令執行後,商放在A中,余數放在B中。

                movc為查表指令,先將累加器A的內容與數據指針寄存器DPTR的內容相加,再以其結果為地址,將該地址的內容送入A中。

                nop為空操作指令,它不作任何操作,但要占用一個機器周期(即12個振蕩周期)的時間,常用於延時或等待。(有些程序執行的效果由於延時時間太短,在人眼視覺暫時作用下無法辨認清楚)

                此段程序的作用在於將一個兩位數分別分在一個十位上的數碼管和一個個位上的數碼管顯示。

                (5)C語言66-76行key函數改為

                1 key:2 jb anjian,F6 //若anjian=0則順序執行,否則跳轉到F63 ACALL delay54 inc keycount //keycount++5 F6: 6 ret

                jb為位條件轉移指令,功能是若直接尋∞址的位bit=1,則程序轉移到指定的目標地址去執行,若bit=0,則程序》順序執行。

                (6)C語言78-83行delay函數改為

                delay70:

                mov r6,#70

                D2: mov R7,#248

                d1: djnz R7,d1 //248*70次

                djnz R6,D2

                ret

                delay5:

                mov r6,#5 //消抖。

                F7: mov R7,#248

                F8: djnz r7,F8 //248*5次

                djnz r6,F7

                ret

                註意:248=2 8 ,約等於1ms。delay為延時程序。

                溫馨提示:在匯編中程序代碼的大小寫不受影響,但在C語言中就有影響了。

                思考1:ret和 reti都是程序返回指令,有什麽區別?

                我的回答:ret是子程序返回指令,reti是中斷子程序返回指令。區別在於如果是acall、lcall指令調用的子程序,返回指令就用ret;如果地址是0003,0013,000B,001B,0023調用的子程序,返回指令就用reti。

                思考2:mov 20h,#0h和 setb 20h都是加1,用什麽區別?

                我的回答:mov指令中的20h指字節,setb中的20h是位。

                旅途結束!

                還記得前段時間我一直糾結於匯編語言中的各種指令的語法和功能,直到一個陽光明媚的中午,我一手拿著已經寫好的兩頁半的C語言代碼,一手拿著一本單片機的匯編指令查詢手冊,開始一行一行的翻譯,可能匯編代碼會在調試中有所錯誤,但基本邏輯是對的。而且這次C——>匯編,使我更加深入地理解了數據在計算機中的存儲與調用。在此期間班主任和同學也給我答疑解惑,相信在以後的道路上卐,我會更加更深入地理解計算機。越努力,越幸運!

                換一批

                延伸閱讀

                [嵌入式] 亂長眉一軒花漸欲迷人眼的C編譯器中,誰才是“編譯之王”?

                亂花漸欲迷人眼的C編譯器中,誰才是“編譯之王”?

                C語言作為“萬物的○始祖”,所有剛接觸的小夥伴都在使用C語言,然而不一些重要位置勝枚舉的C語言編譯器讓人眼花繚亂,VScode、GCC、TCC……那麽到底哪些C語言編譯器是大佬們》用的最多的?又有哪些C語言編譯器是兼容性最強的ω呢?到底誰才是編譯之王?......

                關鍵字:C編譯器 C語言 VScode GCC

                [單片機應用] 兩機串行通訊在這下三天或者可以威風一世單片機匯編語言編程舉例

                兩機串行通訊單片機匯編語言編程舉例

                A、B兩機之間串行通訊(方式1),用‘檢驗和’校驗波事情特率為2400,發送緩沖區和接收緩沖區都為片內30H開始的16個字︻節單元。已知:fosc=11.0592MHz。設計A發送,B接收的雙方協議如下:1、首先A發送‘AA’信號,B接收到......

                關鍵字:串行通訊 單片機 匯編語言

                [單片機應用] AVR c語言優秀編程風格

                AVR c語言優秀編程風格

                文件結構模塊化的程序應該是有一個很好的程序結構的。AVR C語言程序有兩種用戶文件,.c程序文件,.h頭文件,程序中編寫過程中需要在.c文件中包含.h頭文件。初學者往往出現重復包含或者頭文件包含錯誤的問題,我當時也......

                關鍵字:AVR c語言 編程風格

                [單片機應用] 單片機C語言模塊化編程方◇法

                單片機C語言模塊化編開玩笑程方法

                當你在一個項目小組做一個相對較復雜ξ的工程時,意味著你不再獨自單幹。你需要和你的小組成員分工合作,一起完成項目,這就要求小組成員各自負責一部分工程。比如你可能只是負責通訊或者顯示這一塊。這個時候,你就應......

                關鍵字:單片機 C語言 模塊化編程

                [單片機應用] 51單片▲機智能溫控器C語言源程序

                51單片機智能溫控♀器C語言源程序

                這是一款51單片機智能溫控器C語言源程序,程序功能:速成有時鐘顯示,使用DS18B20進行溫度檢測,控制溫度可通過按鍵進行設置,輸出通過繼電器械驅動加熱器進行加熱。是一款功能較為完善的溫度控制滋潤板,適合單片機愛好......

                關鍵字:51單片機 智能溫控器 C語言

                [單片機ξ新聞] 麒麟980背後,華為默默做了這些工作

                麒麟980背後,華為默默做了這些工作

                麒麟980成為全球首款商用7nm手機SoC芯片;首款Cortex-A76 Based CPU;首款雙核NPU;首款Mali-G76 GPU;首款1.4Gbps Cat.21Modem;首款支持2133MHz LPDDR4X的芯片。 ......

                關鍵字:麒麟980 華為

                [智能硬件] 內存、閃存▂降價不可避免,美光計劃☆削減12.5億美元指出

                內存、閃存降價不可避免,美光計劃讓這大石板落下削減12.5億美元指出

                2019年內存、閃存芯片的價格還會繼續』降低,大趨勢不可避免,為此美光計劃削減12.5億美元的資本支出,減少內存及閃存芯精華片的產量。......

                關鍵字:內存 閃存 美光

                [智慧城市] 神州控股簽約唐山智慧城市建設項目

                神州控股簽約唐山智慧城市建設項目

                近日,神州數碼控股有限公司(以下簡稱:神州控股,股票代碼:00861.HK)與唐▂山市政府簽署“智慧唐山”建設項目,金額1.4億元。......

                關鍵字:神州數碼 智慧唐山 智慧城市

                [消費類電子新聞] 余承東:華為正在研發支持5G的可折更不是好漢疊手機!

                余承東:華為正在研發支持5G的可折疊手機!

                華為和三星的可折疊手機都在積極研發中,據悉,華為將在今年展示可折疊手機真機,但具體發布要等到明年年中。在華為Mate20系列產品發呼——布會上,華為方面透露現在,華為的可折疊手機將會支持5G。 ......

                關鍵字:余承東 5G 可折疊手機

                我 要 評 論

                網友評論

                技術子站

                更多

                項目外包

                更多

                推薦博客