|
|||||||||||
| 技術(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ī) |
剛剛做完一個(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 于 2006/2/23 11:14:00 發(fā)布:
好象你的帖子中,并沒有說明你用的位操作在哪里體現(xiàn)了優(yōu)勢(shì)? 我知道在循環(huán)移位以及連續(xù)訪問數(shù)組時(shí),C的確沒有用匯編的效率高。 但一般的位變量操作,似乎效率跟匯編差不多的。 |
|
| 3樓: | >>參與討論 |
| 作者: sxl_72 于 2006/2/23 11:15:00 發(fā)布:
該用c時(shí)用c,該用匯編時(shí)用匯編 應(yīng)該是這樣 |
|
| 4樓: | >>參與討論 |
| 作者: etiller 于 2006/2/23 11:52:00 發(fā)布:
不試不知道效率的區(qū)別 |
|
| 5樓: | >>參與討論 |
| 作者: AIRWILL 于 2006/2/23 18:41:00 發(fā)布:
怎么不用循環(huán),好枯燥的代碼 |
|
| 6樓: | >>參與討論 |
| 作者: etiller 于 2006/2/24 8:57:00 發(fā)布:
為了速度快 |
|
| 7樓: | >>參與討論 |
| 作者: xwj 于 2006/2/24 10:06:00 發(fā)布:
暈,樓主的代碼寫的啊。。。 既然用C,用ACC移位,那為什么不用循環(huán)? 在大量了解編譯器編譯特性后,用C也可以得到和匯編一樣的代碼的 比如通過ACC移位等 這個(gè)可以去搜索HotPower的帖子 但C下還是不建議對(duì)寄存器直接操作,因?yàn)檫@會(huì)破壞程序的結(jié)構(gòu)性 因此嵌入?yún)R編在某些特殊要求時(shí)也是必要的 |
|
| 免費(fèi)注冊(cè)為維庫(kù)電子開發(fā)網(wǎng)會(huì)員,參與電子工程師社區(qū)討論,點(diǎn)此進(jìn)入 |
Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號(hào) |