音影先锋亚洲天堂网|电影世界尽头的爱完整版播放|国产 熟女 91|高清无码免费观看欧美日韩|韩国一区二区三区黄色录像|美女亚洲加勒比在线|亚洲综合网 开心五月|7x成人在线入口|成人网站免费日韩毛片区|国产黄片?一级?二级?三级

登錄 免費(fèi)注冊(cè) 首頁(yè) | 行業(yè)黑名單 | 幫助
維庫(kù)電子市場(chǎng)網(wǎng)
技術(shù)交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術(shù) | 電源技術(shù) | 測(cè)控之家 | EMC技術(shù) | ARM技術(shù) | EDA技術(shù) | PCB技術(shù) | 嵌入式系統(tǒng)
驅(qū)動(dòng)編程 | 集成電路 | 器件替換 | 模擬技術(shù) | 新手園地 | 單 片 機(jī) | DSP技術(shù) | MCU技術(shù) | IC 設(shè)計(jì) | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe

用C51對(duì)51進(jìn)行位操作之我見

作者:etiller 欄目:單片機(jī)
用C51對(duì)51進(jìn)行位操作之我見
剛剛做完一個(gè)項(xiàng)目,其中要用到28個(gè)8字LED顯示塊,驅(qū)動(dòng)這28個(gè)8字LED顯示塊我用了7個(gè)74HC595,做1/4掃描,大家知道74HC595這個(gè)片子是串并轉(zhuǎn)換的,現(xiàn)在市面上大多數(shù)的LED顯示屏都是用它做的,既然是串并轉(zhuǎn)換就必然涉及到位操作,在我的設(shè)計(jì)當(dāng)中我采用的是混合編程,顯示掃描部分用的是匯編,其他功能用的是C作為主框架,下面是匯編完整代碼:

LineA          bit        P1.0
LineB          bit        P1.1
LineC          bit        P1.2
LineD          bit        P1.3
SER595         bit        P1.4
SRCLK595       bit        P1.5
RCLK595        bit        P1.6
EN595          bit        P1.7
DATA3078       bit        P2.0
CLK3078        bit        P2.1
START3078      bit        P2.2
STOP3078       bit        P2.2

public LineA
public LineB
public LineC
public LineD
public SER595
public SRCLK595
public RCLK595
public EN595
public DATA3078
public CLK3078
public START3078
public STOP3078

public Scan8Word
public GD3078ConFunc

extrn  code(_usDelay)         ;外部程序模塊,在C語(yǔ)言定義
extrn  data(InfoLed8)

parameters  segment data
asmF1       segment code

public ?GD3078ConFunc?byte  ;GD3078ConFunc(unsigned CHAR)的參數(shù)段
rseg   parameters
?GD3078ConFunc?byte:
    ds 1

rseg   asmF1
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;GD3078音樂芯片控制函數(shù):
;參數(shù):cmd-控制指令  0x21  選擇第1首音樂
;                    0x22  選擇第2首音樂
;                    ...................
;                    0x2f  選擇第15首音樂
;                    0x42  關(guān)閉鈴聲
;                    0x63  打開鈴聲
;                    0x96  喚醒芯片
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
GD3078ConFunc:      mov   r0,#8
                    mov   a,?GD3078ConFunc?byte
    GD3078:         rrc   a
                    mov   DATA3078,c
                    mov   r7,#08dh
                    mov   r6,#0
                    setb  CLK3078
                    PUSH  acc
                    lcall _usDelay
                    mov   r7,#08dh
                    mov   r6,#0
                    clr   CLK3078
                    lcall _usDelay
                    pop   acc
                    
                    djnz  r0,GD3078
                    ret
                    
Scan8Word:          mov  r2,#4          ;4掃
                    mov  r3,#7          ;每行7個(gè)8字塊
                    mov  r0,#InfoLed8   ;顯存起始地址送寄存器
    scan:           mov  a,@r0          ;取出顯存內(nèi)容
                    inc  r0             ;顯存地址加1
                    
                    mov  c,acc.7
                    mov  SER595,c
                    clr  SRCLK595
                    setb SRCLK595
                    
      &nb
2樓: >>參與討論
computer00
好象你的帖子中,并沒有說明你用的位操作在哪里體現(xiàn)了優(yōu)勢(shì)?
我知道在循環(huán)移位以及連續(xù)訪問數(shù)組時(shí),C的確沒有用匯編的效率高。

但一般的位變量操作,似乎效率跟匯編差不多的。

3樓: >>參與討論
sxl_72
該用c時(shí)用c,該用匯編時(shí)用匯編
應(yīng)該是這樣

4樓: >>參與討論
etiller
不試不知道效率的區(qū)別
 
5樓: >>參與討論
AIRWILL
怎么不用循環(huán),好枯燥的代碼
 
6樓: >>參與討論
etiller
為了速度快
 
7樓: >>參與討論
xwj
暈,樓主的代碼寫的啊。。。
既然用C,用ACC移位,那為什么不用循環(huán)?

在大量了解編譯器編譯特性后,用C也可以得到和匯編一樣的代碼的
比如通過ACC移位等
這個(gè)可以去搜索HotPower的帖子


但C下還是不建議對(duì)寄存器直接操作,因?yàn)檫@會(huì)破壞程序的結(jié)構(gòu)性
因此嵌入?yún)R編在某些特殊要求時(shí)也是必要的




參與討論
昵稱:
討論內(nèi)容:
 
 
相關(guān)帖子
哪有串口轉(zhuǎn)藍(lán)牙和802.11的芯片啊?
那位大蝦用過at29c040,我真么寫不進(jìn)去數(shù)據(jù)???
一個(gè)查詢方式檢測(cè)脈沖寬度的程序,這樣寫是不是很容易出問題?
一個(gè)困擾我的問題
相距一二百米遠(yuǎn)的兩個(gè)單片機(jī)通信最好是一個(gè)上電后控制另一個(gè)?
免費(fèi)注冊(cè)為維庫(kù)電子開發(fā)網(wǎng)會(huì)員,參與電子工程師社區(qū)討論,點(diǎn)此進(jìn)入


Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號(hào)