上一次的實驗程序,完成了LED指示燈的驅動,用到了GPIO的輸出方式,這一次要用GPIO的輸入方式,進行按鍵的輸入。下面的代碼是讀入按鍵值,如果按鍵按下,則點亮LED,否則熄滅LED。
利用ST的開發工具,生成一個匯編程序的框架,然后修改其中的main.asm,修改后的代碼如下。
編譯通過后,下載到開發板,運行程序,可以看到當按下按鍵時,LED1點亮,當抬起按鍵時,LED1熄滅。
stm8/
#include "mapping.inc"
; 涉及到的硬件資源
; LED1定義在PD3
; KEY1定義在PD7
; 下面定義端口D的寄存器地址
PD_ODR EQU $500f
PD_IDR EQU $5010
PD_DDR EQU $5011
PD_CR1 EQU $5012
PD_CR2 EQU $5013
; 定義堆棧空間的起始位置和結束位置
stack_start.w EQU $stack_segment_start
stack_end.w EQU $stack_segment_end
segment 'rom' ; 下面開始定義一個段,該段位于ROM中
main.l ; 定義復位后的第一條指令的標號(即入口地址)
;
; 首先要初始化堆棧指針
LDW X,#stack_end
LDW SP,X
; 下面初始化IO端口
; PD3設置成推挽輸出
; PD7設置成懸浮輸入
LD A,#08
LD PD_DDR,A ; 將PD3設置成輸出,PD7設置成輸入
LD A,#08
LD PD_CR1,A ; 將PD3設置成推挽輸出
LD A,#00
LD PD_CR2,A ;
MAIN_LOOP.L
LD A,PD_IDR ; 讀入端口D的引腳輸入寄存器
AND A,#$80 ; 測試最高位是否為1
JRNE MAIN_LOOP_1 ; 若最高位為1,則跳轉
LD A,#$08 ; 否則說明按鍵按下,PD3<-1,點亮LED1
LD PD_ODR,A ;
JRA MAIN_LOOP
MAIN_LOOP_1.L
LD A,#$00 ; 若按鍵沒按下,PD3<-0,熄滅LED1
LD PD_ODR,A ;
JRA MAIN_LOOP ;
interrupt NonHandledInterrupt
NonHandledInterrupt.l
iret
; 下面定義中斷向量表
segment 'vectit'
dc.l {$82000000+main} ; reset
dc.l {$82000000+NonHandledInterrupt} ; trap
dc.l {$82000000+NonHandledInterrupt} ; irq0
dc.l {$82000000+NonHandledInterrupt} ; irq1
dc.l {$82000000+NonHandledInterrupt} ; irq2
dc.l {$82000000+NonHandledInterrupt} ; irq3
dc.l {$82000000+NonHandledInterrupt} ; irq4
dc.l {$82000000+NonHandledInterrupt} ; irq5
dc.l {$82000000+NonHandledInterrupt} ; irq6
dc.l {$82000000+NonHandledInterrupt} ; irq7
dc.l {$82000000+NonHandledInterrupt} ; irq8
dc.l {$82000000+NonHandledInterrupt} ; irq9
dc.l {$82000000+NonHandledInterrupt} ; irq10
dc.l {$82000000+NonHandledInterrupt} ; irq11
dc.l {$82000000+NonHandledInterrupt} ; irq12
dc.l {$82000000+NonHandledInterrupt} ; irq13
dc.l {$82000000+NonHandledInterrupt} ; irq14
dc.l {$82000000+NonHandledInterrupt} ; irq15
dc.l {$82000000+NonHandledInterrupt} ; irq16
dc.l {$82000000+NonHandledInterrupt} ; irq17
dc.l {$82000000+NonHandledInterrupt} ; irq18
dc.l {$82000000+NonHandledInterrupt} ; irq19
dc.l {$82000000+NonHandledInterrupt} ; irq20
dc.l {$82000000+NonHandledInterrupt} ; irq21
dc.l {$82000000+NonHandledInterrupt} ; irq22
dc.l {$82000000+NonHandledInterrupt} ; irq23
dc.l {$82000000+NonHandledInterrupt} ; irq24
dc.l {$82000000+NonHandledInterrupt} ; irq25
dc.l {$82000000+NonHandledInterrupt} ; irq26
dc.l {$82000000+NonHandledInterrupt} ; irq27
dc.l {$82000000+NonHandledInterrupt} ; irq28
dc.l {$82000000+NonHandledInterrupt} ; irq29
end
上一篇:STM8與匯編語言(4)
下一篇:STM8與匯編語言(6)--8位定時器應用之一
推薦閱讀
史海拾趣
Fine Products Microelectronics Corp公司發展故事(虛構)
故事一:技術創新引領市場
Fine Products Microelectronics Corp(簡稱FPMC)自創立之初便致力于半導體技術的創新。在上世紀90年代,當半導體行業還普遍使用傳統光刻技術時,FPMC的研發團隊率先提出了步進式光刻機(Wafer Stepper)的概念。這一創新極大地提高了芯片制造的精度和效率,使得芯片特征尺寸得以大幅縮小。盡管初期面臨技術難度大、市場接受度低等挑戰,但FPMC憑借堅持不懈的努力,最終成功研發出并量產了步進式光刻機,迅速在半導體制造領域占據了領先地位。
故事二:與巨頭的合作與競爭
在FPMC的成長過程中,與行業內巨頭的合作與競爭是不可或缺的一部分。特別是在21世紀初,FPMC與IBM、TI等知名企業建立了合作關系,共同推進半導體技術的研發和應用。然而,這種合作并非一帆風順,FPMC在某些關鍵技術上堅持自主研發,與IBM的電子束光刻(e-beam)技術產生了競爭。盡管這種競爭給FPMC帶來了一定的壓力,但也促使公司不斷加大研發投入,提升技術實力,最終形成了自己獨特的競爭優勢。
故事三:石墨烯電極技術的突破
近年來,隨著二維材料研究的興起,FPMC緊跟科技前沿,成功研發出了石墨烯輔助金屬電極轉印技術。這一技術利用石墨烯與金屬間較弱的范德華作用力,實現了金屬電極陣列在二維溝道材料上的無損轉移。該技術不僅提高了電極的制備精度和效率,還降低了制造成本,為二維芯片的應用開辟了新的路徑。FPMC的這一創新成果迅速獲得了業界的關注和認可,進一步鞏固了公司在半導體材料領域的領先地位。
故事四:物聯網時代的布局
隨著物聯網技術的快速發展,FPMC敏銳地捕捉到了這一市場機遇。公司及時調整戰略方向,加大了對物聯網相關產品的研發力度。通過與多家物聯網企業和研究機構的合作,FPMC成功推出了一系列高性能、低功耗的物聯網芯片和解決方案。這些產品廣泛應用于智能家居、智慧城市、工業控制等領域,為物聯網的普及和發展提供了強有力的支持。
故事五:綠色可持續發展
在追求技術創新和市場拓展的同時,FPMC始終不忘企業的社會責任。公司積極響應全球綠色可持續發展的號召,致力于研發環保型半導體產品和制造工藝。通過采用先進的節能減排技術和循環利用材料等手段,FPMC不僅降低了自身的生產成本和能耗水平,還為推動半導體行業的綠色可持續發展做出了積極貢獻。此外,公司還積極參與社會公益活動,為構建和諧社會貢獻自己的一份力量。
ABL Heatsink公司在發展過程中,積極尋求與其他企業的合作。通過與芯片制造商、電子設備生產商等建立緊密的合作關系,ABL Heatsink成功將自己的散熱器產品集成到各種高端電子設備中。這種合作模式不僅提升了公司的知名度,也帶來了穩定的訂單和收入。
Dino-Lite公司在發展過程中,始終注重市場拓展和合作伙伴關系的建立。公司與多家知名企業建立了長期穩定的合作關系,共同開拓市場、分享資源。通過與合作伙伴的緊密合作,Dino-Lite公司的產品得以快速進入各個行業領域,并獲得了良好的口碑和市場份額。
此外,Dino-Lite公司還積極參與國際展覽和交流活動,展示公司的最新技術和產品。這些活動不僅提高了公司的知名度,也為公司帶來了更多的商業機會和合作伙伴。
進入21世紀,廣東長利光電開始將目光投向國際市場。公司積極參加各種國際展覽和交流活動,與世界各地的客戶建立了廣泛的聯系。憑借優質的產品和服務,公司逐漸在國際市場上嶄露頭角。為了更好地服務全球客戶,廣東長利光電在中國設立了多個辦事處,并建立了完善的銷售和服務網絡。
福斯特集團(FIRST SEMI)作為另一家以“FIRST”為品牌的企業,在半導體芯片領域也取得了顯著成績。該集團成立于2010年,總部位于中國深圳,是一家集半導體芯片研發、方案設計、封裝制造、測試編帶、產品銷售為一體的國家級高新技術企業。公司產品廣泛應用于無人機、機器人、筆記本電腦、液晶電視等多個領域。通過在全球設立代理銷售公司,福斯特集團的銷售網絡覆蓋全球多個國家和地區,服務合作客戶超過3000家。
在電子行業發展的浪潮中,愛普特半導體(APTSEMI)始終堅持自主創新的發展道路。公司自創立之初,就致力于研發具有自主知識產權的微處理器芯片。面對國外技術封鎖和市場壟斷的困境,愛普特團隊不畏艱難,投入大量研發資源,成功突破了多項技術難關,研發出了全國產、高可靠性的32位MCU產品。這些產品性能卓越,可與國際先進水平相媲美,為我國電子行業的自主可控發展貢獻了重要力量。
品牌設計師 崗位要求: * 視覺傳達設計類專業本科以上學歷; * 有平面設計從業經驗,并有較多的作品; * 熟練使用Photoshop、Illustrator、CorelDraw等軟件,熟悉排版、印刷等后期制作; * 能快速、全面、準確的領悟產品信息,對產品設計有獨 ...… 查看全部問答∨ |
下面貼個freescale的coldfire v1系列中mcf51cn128 MCU的一個示例,利用定時器實現輸出捕獲的功能。 MCF51CN128是freescale去年推出的V1 CORE的coldfire處理器,具有一個以太網控制器,是實現以太網應用的不錯選擇 具有50MHZ的主頻 ------------- ...… 查看全部問答∨ |
我想問一下,NRF2401的芯片發送數據時,怎么檢測它到底發沒發信號,我看了許多關于這部分調試的文章,只是對這個問題一帶而過,我現在都不知道整個程序到底是哪出了問題。是發射呢,還是i接收呢? 還有一個小問題就是,我用的是MSP430單片機,沒有 ...… 查看全部問答∨ |
|
我以前做工控的,現在有個項目,需要實時系統,本來說基于pc104+IO擴展卡,由于IO數目比較多,PC104可能達不到要求,我現在想基于PC機+PCI或者是PXI,我目前的問題是 1.Vxworks支持哪些CPU,是不是只要是X86架構的都能夠運行。 2.哪 ...… 查看全部問答∨ |
|
其實就是跟VC++一樣的,現在感覺不如在PC上做VC++開發有意思,在PC上做可以接觸到數據庫什么的,接觸面更加廣泛,而用EVC就是就是簡單的編碼。做做字符串的處理,邏輯業務的處理,真是沒什么大的意思啊。大家感覺呢。 等待被拍磚頭。。。。… 查看全部問答∨ |
最近研究驅動開發,環境如下: VS2005.NET+DDKXP+DriverStudio3.2 寫了hello程序,設置如下: 1 project type頁中選擇"Kernel Mode Service"點 2 IRP Handlers頁中把所有自動勾上的請求都去掉,因為我要手工寫DriverWorks代碼 ...… 查看全部問答∨ |
我想做兩對同時更新的PWM波形,一對是原數據,一對是調整后的數據,它們更新要同步,即四通道的PWM脈沖同時更新,內容不一樣但數組的索引是相同的,TIM1只有三通道,不能滿足要求,所以用TIM1和TIM8的CCR1和CCR2寄存器,程序如下,請問版主有 ...… 查看全部問答∨ |