久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

立即注冊 登錄
返回首頁

uid:257705的個人空間

日志

一種新的單片機編譯器:ZJB8

已有 565 次閱讀2017-12-5 15:25

指針與指量

 

       指針是動態數據結構的根本,利用指針程序員可隨意操縱數據結構,因為指針具有極大的靈活性,所有使用指針也必須小心。ZJB根據單片機的特點,為了避免生成效率低下的代碼,ZJB用戶僅可操作硬件指針,使用硬件指針的好處是代碼小巧精悍,不利的一點是硬件指針只有少數的幾個,所以使用指針前必須首先對指針進行賦值,這種要求也是用好指針的金科玉律,為了使用指針,必須了解存儲結構和地址,這點在聲明變量時必須保證聲明順序不變,這樣,這些順序聲明的變量就形成了數據結構,你可以使用

#變量名 來取得變量的首地址,然后把地址賦值給指針,這樣指針指向的地址就可增量或減量操作,我們把指針指向的地址變量稱作指量,操作指針只是指向要操作的指量,指量一般在指針前加@@@來代表指量。

      

       單片機硬件指針:

              R0          八位內存指針0,指向片內內存

              R1          八位內存指針1,指向片內內存

              DP          16位外存指針,指向片內或片外16位存儲器

              DP.x        16位程序代碼指針,指向16位程序存儲器,x8位偏移量

              @R0              8位內存指量0

              @R1              8位內存指量1

              @@R0    8位外存指量0(具體應用請參閱硬件文檔手冊)

              @@R1    8位外存指量1(具體應用請參閱硬件文檔手冊)

              @@DP    16位外存指量

              @@DP.x  16位程序存儲器指量

 

       ;利用指針進行內存清零示例:

              R0=~0                                ;指針賦值

              ..      @R0=0,??R0<            ; 遞減循環指量清零

              其他代碼

       ;利用指針把外存2000H處的8字節數據復制到內存緩沖器,

              ::      x:7                               ;定義內存8字節緩沖器x

              DP=2000H                           ;外存指針指向外存2000H

              R0=#x                                 ;內存指針指向內存緩沖器x

              8..    @R0=@@DP                ;重復復制8字節數據到x

                     ++R0,++DP                  ;修改指針指向下一個指量

              其他代碼

       ;利用指針進行7段數碼管顯示示例:

              數碼顯示(A):

                     DP=七段顯示代碼           ;指針賦值

                     P1=@@DP.A                 ;獲取指量7段代碼并在P1口驅動數碼管

                     /

              七段顯示代碼:  0xCF, 0xA4,0xB0,0x99,0x92,0x82,0xD8,0x80,0x90


 移位與通信

 

       通信是單片機和外界聯系的必要手段,隨著外部芯片越來越多的使用串行器件,對單片機的編程也提出了相應的要求,為此,ZJB修改了移位語句來和這些新穎的硬件打交道,例如大量使用的IIC器件和SPI器件等。

 

       串行通信的實質為移位操作,在發送端,把發送緩沖器中的數據逐位移出移出到通信的輸出口,同時再把通信輸入端的電平狀態從另一端逐位移入到發生緩沖器中,當發送緩沖器中的數據全部移出后,發送緩沖器中就收到了對方傳入的數據,這樣就完成了一幀數據的通信或信息交換?梢钥闯觯ㄐ判枰3個部件,1:發送端口(位變量),2:數據緩沖器,3:接收端口(位變量),由于以上原因,ZJB的移位語句被設計為一個三目語句,由于通信可能從緩沖器高位移出也可能從低位移出,所以ZJB的基本移位語句有兩個,她們分別是左移語句和右移語句。

 

基本移位語句形式如下:

              [可選左移輸出的位]<<通信緩沖器變量[<<可選左移輸入的位]

              [可選右移輸入的位]>>通信緩沖器變量[>>可選右移輸出的位]

功能:把數據從一端移入變量,從變量的另一端移出數據到位變量,變量內容移位改變。

可能的變形語句:

       1:如果忽略可選的輸入位,那么移位結束緩沖器的數據不定。

       2:如果可選輸入位為01那么移位結束緩沖器中為全0或全1。

       3:移位語句每次只能移位1次,多位傳送需在定次循環中完成。

 

       ;利用串并語句進行1字節SPI通信的例子:

              SPI(*A):                                              ;聲明SPI通信過程,緩沖器為A

                     SDI==P1.0                                  ;定義輸入口

                     SDO==P1.1                                ;定義輸出口

                     SCK==P1.2                                 ;定義同步口

                     8..                                              ;重復8,傳遞1字節數據

                            SDO<<A<<SDI                    ;從輸入口接收數據從輸出口傳出數據

                            SCK=1,~SCK                        ;給出一個同步脈沖

                     /                                                ;返回

 

       ;利用串并語句進行BCD轉換的例子:

              BCD(x"1,/y"2):                                    ;x:BIN,y:壓縮BCD,y為可返參數

                     y=0                                            ;y清零

                     16..                                            ;2字節BIN,2*8=16

                            C<<x                                  ;左移

                            A=y0++y0,DAA,y0=A            ;y+y,BCD調整

                            A=y1++y1,DAA,y1=A

                            A=y2++y2,DAA,y2=A

                     /



 單目操作語句

 

編程中最重要的任務是操作一個變量,為了簡單快速操作變量,ZJB設計了一系列單目語句用于操作變量本身,這些語句由一個變量和一個前綴運算符組成,可以完成諸如取反、取補、增量、減量和半字節交換等簡單任務,單目語句簡單明快,操作簡單,下面介紹常用的單目語句。

取反語句:      ~ 變量,

       功能:對變量內容取反,相當于匯編的CPL指令。

取補語句:      - 變量,

       功能:對變量內容取反,相當于匯編的CPL指令。

增量語句:      ++ 變量,

       功能:對變量內容直接進行+1操作,不影響標志字,相當于匯編中的 INC指令。

減量語句:      -- 變量,

       功能:對變量內容直接進行-1操作,不影響標志字,相當于匯編中的 DEC指令。

半交換語句:   <> 字節變量,

       功能:把字節變量的高低四位進行互換,不影響標志字,相當于匯編的SWAP指令。




通用操作語句

 

       通用語句由左值表達式和右值表達式組成,右值表達式一般是一個運算式,由一系列變量、常量和運算符組成,右值運算的結果將賦值給左值表達式中的每一個變量,如果左值表達式中的變量有一個后綴運算符,那么這個左值變量和右值運算的結果再次運算,然后再賦值給這個左值變量,左值表達式的賦值順序從右向左逐個運算并賦值,而右值表達式的計算則按從左到右的順序逐個計算,然后生成結果。

 

為了完成復雜的運算,ZJB使用了如下運算符:

       =            賦值運算符 雙目

       +            加法運算符 雙目

       -             減法運算符 雙目      取補運算符 前綴單目

       *             乘法運算符 雙目

       /             除法運算符 雙目

       &            位與運算符 雙目

       |             位或運算符 雙目

       ^            異或運算符 雙目

       ~            位非運算符 前綴單目

 

;賦值運算示例:

       x=y=z=20             ;賦值順序: z=20,y=z,x=y

       x=y=z=~0             ;賦值順序: z=~0,y=z,x=y

       x=y=z=-1              ;賦值順序: z=-1,y=z,x=y

;混合運算示例:

       x=y|z+10               ;運算順序:y z相或再加20,最后把結果賦值給x

;混合運算示例:

       x=y|=z&20H          ;運算順序: y=y|z&20Hx=y

 

       為了簡化編譯器,右值表達式的優先級為從左到右,她們按運算順序從左到右逐個計算,這點和其他編譯器不同,至于其他運算,請參閱附錄:ZJB運算符一節

 


路過

雞蛋

鮮花

握手

雷人

評論 (0 個評論)

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

返回頂部
主站蜘蛛池模板: 一级二级三级在线观看 | 久久久久久久综合 | 日一区二区三区 | 亚洲视频免费在线观看 | 国产精品一区网站 | 日韩欧美一区二区三区四区 | 夜夜夜夜夜夜曰天天天 | 久久国产综合 | 国产一区二区久久 | 欧美群妇大交群中文字幕 | 久久久久久久久久久国产 | 人人射人人 | 国产1区| 日韩av成人| 日本一区二区三区四区 | 午夜看片网站 | 成人精品一区二区三区中文字幕 | 欧美日韩综合一区 | 狠狠做深爱婷婷综合一区 | 天天影视色综合 | 中文字幕一区二区三区四区五区 | 99视频在线免费观看 | 户外露出一区二区三区 | 色婷婷亚洲 | av永久免费 | 国产乱一区二区三区视频 | 69精品久久久久久 | 99热播精品 | 免费观看色 | 亚洲色欧美另类 | 综合视频在线 | 日本大片在线播放 | 日韩在线精品强乱中文字幕 | 国产精品美女久久久久久久网站 | 99精品国自产在线观看 | 亚洲精品电影在线观看 | 久久久久久久久91 | 欧美亚洲视频 | 久久99精品国产 | 欧美日韩在线一区 | 99热在线免费 |