STM8單片機中的外設資源是比較豐富的,定時器有8位的也有16位的,下面的實驗程序,就是利用8位定時器4來進行延時,然后驅動LED閃爍。
同樣還是利用ST的開發工具,生成一個匯編程序的框架,然后修改其中的main.asm,修改后的代碼如下。
編譯通過后,下載到開發板,運行程序,可以看到LED在閃爍,或者用示波器可以在LED引腳上看到方波。
在這里要特別提醒的是,從ST給的手冊上看,這個定時器中的計數器是一個加1計數器,但本人在實驗過程中感覺不太對,經過反復的實驗,我認為應該是一個減1計數器(也許是我拿的手冊不對,或許是理解上有誤)。例如,當給定時器中的自動裝載寄存器裝入255時,產生的方波頻率最小,就象下面代碼中計算的那樣,產生的方波頻率為30HZ左右。若初始化時給自動裝載寄存器裝入1,則產生的方波頻率最大,大約為3.9K左右。也就是說實際的分頻數為ARR寄存器的值+1。
stm8/
#include "mapping.inc"
; #include "STM8S207S8.INC"
; 涉及到的硬件資源
; 下面定義端口D的寄存器地址
PD_ODR EQU $500f
PD_IDR EQU $5010
PD_DDR EQU $5011
PD_CR1 EQU $5012
PD_CR2 EQU $5013
; 定時器4的寄存器定義
TIM4_CR1 EQU $5340
TIM4_IER EQU $5341
TIM4_SR EQU $5342
TIM4_EGR EQU $5343
TIM4_CNTR EQU $5344
TIM4_PSCR EQU $5345
TIM4_ARR EQU $5346
; 定義堆棧空間的起始位置和結束位置
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 ;
;
; 下面初始化定時器4
LD A,#$00
LD TIM4_IER,A ; 禁止中斷
LD A,#$01
LD TIM4_EGR,A ; 允許產生更新事件
LD A,#$07
LD TIM4_PSCR,A ; 計數器時鐘=主時鐘/128=2MHZ/128
; 相當于計數器周期為64uS
LD A,#255
LD TIM4_ARR,A ; 設定重裝載時的寄存器值,255是最大值
LD A,#255
LD TIM4_CNTR,A ; 設定計數器的初值
; 定時周期=(ARR+1)*64=16384uS
; 產生方波頻率=30.5HZ
;
LD A,#$01
; b0 = 1,允許計數器工作
; b1 = 0,允許更新
LD TIM4_CR1,A ; 設置控制器,啟動定時器
MAIN_LOOP.L
LD A,TIM4_SR ; 讀入定時器4的狀態
AND A,#01 ; 判斷是否產生更新標志
JREQ MAIN_LOOP ; 若沒有,則等待
LD A,#0 ; 清除更新標志
LD TIM4_SR,A
LD A,PD_ODR ; 將LED驅動信號取反
XOR A,#$08
LD PD_ODR,A ; LED閃爍頻率=2MHZ/128/255/2=30.63
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
上一篇:STM8與匯編語言(5)
下一篇:STM8與匯編語言(7)--8位定時器應用之二
推薦閱讀
史海拾趣
HANA Micron公司在電子行業的五個發展故事
故事一:2.5D封裝技術的突破
HANA Micron,作為韓國頂尖的后端工藝和外包半導體組裝測試(OSAT)公司,近年來在2.5D封裝技術領域取得了顯著進展。隨著高性能人工智能(AI)芯片需求的急劇增長,該公司致力于開發一種能夠水平組裝不同類型AI芯片的封裝技術,如高帶寬內存(HBM)。這一技術對于生產像英偉達H100這樣的頂級AI加速器至關重要。公司CEO Lee Dong-cheol表示,他們已將未來寄托在HBM和其他AI芯片的先進2.5D封裝技術上,并透露公司已生產出原型,盡管全面商業化尚需時日。HANA Micron的這一努力不僅提升了其技術實力,也為公司在全球芯片封裝市場的競爭中占據了有利位置。
故事二:越南市場的擴張
為了進一步擴大業務版圖,HANA Micron在越南進行了大規模的投資。自2016年在越南北寧省成立公司進軍東南亞市場以來,該公司已累計投資高達7000億韓元(約合5.25億美元)。其北江省云中工業園的2號制造工廠于2023年正式落成,標志著公司在越南半導體封裝和測試領域邁出了重要一步。這一投資不僅提升了公司的產能,還為公司帶來了更多的業務機會和市場份額。HANA Micron計劃到2025年將月產量提高到2億個,并預計越南業務的銷售額將很快達到萬億韓元。
故事三:多元化產品線的拓展
除了在傳統存儲芯片封裝領域保持領先地位外,HANA Micron還積極拓展多元化產品線。公司目前正在開發針對可穿戴設備和醫療設備的封裝技術,以提高這些設備的靈活性和可靠性。這一項目的第一個成果是去年年底開發的針對醫療貼片的心電圖傳感器模塊,該模塊允許傳感器的功率低于1mA,延遲低于5ms。這一創新不僅展示了公司在封裝技術上的深厚積累,也為其在未來醫療和可穿戴設備市場中的發展奠定了堅實基礎。
故事四:與國際巨頭的合作與競爭
在電子行業的激烈競爭中,HANA Micron不僅與國內同行如三星、SK海力士等展開合作與競爭,還與國際巨頭如臺積電、英特爾等保持著緊密的聯系。公司CEO Lee Dong-cheol透露,臺積電已成功研發出英偉達H100的2.5D封裝技術,而三星和SK海力士也在積極跟進。在這種背景下,HANA Micron不斷加大研發投入,以確保自己在封裝技術上的領先地位。同時,公司還通過與國際巨頭的合作與交流,不斷提升自身的技術水平和市場競爭力。
故事五:應對市場波動與未來展望
面對全球電子市場的波動和不確定性,HANA Micron展現出了較強的抗風險能力和市場適應能力。公司CEO Lee Dong-cheol表示,盡管過去幾年存儲市場有所放緩,但隨著電子產品制造商和AI設備制造商對先進芯片需求的不斷增長,預計2024年的業績將有所改善。為了實現這一目標,公司將繼續加大在研發、生產和市場拓展等方面的投入力度。同時,公司還計劃將系統芯片的比例提高到50%以上,以降低市場波動對公司業績的影響。這一戰略調整不僅體現了公司對未來的信心和決心,也為公司的可持續發展奠定了堅實基礎。
除了天然氣業務外,E.ON還致力于電力市場的拓展。通過與其他電力公司的合作和并購,E.ON逐漸擴大了在歐洲電力市場的份額。特別是在2003年收購德國魯爾天然氣公司后,E.ON間接持有了俄天然氣公司的股份,進一步鞏固了其在歐洲能源市場的地位。
除了天然氣業務外,E.ON還致力于電力市場的拓展。通過與其他電力公司的合作和并購,E.ON逐漸擴大了在歐洲電力市場的份額。特別是在2003年收購德國魯爾天然氣公司后,E.ON間接持有了俄天然氣公司的股份,進一步鞏固了其在歐洲能源市場的地位。
在快速發展的同時,Goldentech始終關注環境保護和社會責任。公司積極推行綠色制造理念,采用環保材料和節能技術,減少生產過程中的碳排放和資源消耗。此外,Goldentech還投入大量資金研發可回收和可降解的半導體產品,旨在為全球電子行業的可持續發展貢獻力量。這一環保理念不僅提升了公司的社會形象,還吸引了更多注重可持續發展的客戶和合作伙伴。
隨著物聯網、可穿戴設備等新興領域的興起,Goldentech敏銳地捕捉到了市場的新機遇。公司迅速調整戰略方向,加大在微型化、低功耗半導體器件的研發投入。通過引入先進的制造工藝和封裝技術,Goldentech成功推出了一系列適用于物聯網和可穿戴設備的高性能離散半導體產品。這些產品憑借出色的性能和穩定性,在市場中獲得了廣泛認可,為公司的持續發展注入了新的動力。
在快速發展的同時,Goldentech始終關注環境保護和社會責任。公司積極推行綠色制造理念,采用環保材料和節能技術,減少生產過程中的碳排放和資源消耗。此外,Goldentech還投入大量資金研發可回收和可降解的半導體產品,旨在為全球電子行業的可持續發展貢獻力量。這一環保理念不僅提升了公司的社會形象,還吸引了更多注重可持續發展的客戶和合作伙伴。
為了方便大家使用windowsce6,我們把開發所用的軟件上傳到服務器,很大(10G左右),但因為某些原因,我們暫時無法在此公開下載地址。 此處提供的wince6為破解版,里面有安裝密碼。 http://www.arm9home.net/read.php?tid-4349.html… 查看全部問答∨ |
|
目錄: 符號說明 第一章 緒論 1、什么是脈沖和脈沖電路 2、什么是數字信號和數字電路 3、脈沖數字電路的發展和應用 4、什么叫二進制 5、本書內容提要 第二章 RC電路 1、引言 2、電容 3、電容充放電規律 4、簡單RC電路分析 5、RC電路 ...… 查看全部問答∨ |
|
給喜歡玩轉linux系統或愛好嵌入式linux的朋友推薦一個項目 開源項目maxwit linux,從零開始,一步步打造整個嵌入式linux系統 沒有開放板的朋友可以在模擬器中跑 玩maxwit linux的好處類似于玩LFS——有助于理解整個linux,強化linux使用技能,無論對linux使用者還是開發者都有好處 不過與lfs或其他開源項 ...… 查看全部問答∨ |
|
求助:Gcc提示carriage return in preprocessing directive 我在PC上用Redhat自帶的gcc編譯通過的一段程序改用arm-elf-gcc編譯 在處理頭文件的時候遇到carriage return in preprocessing directive的錯誤信息 問題行都是預編譯指令 #ifndef mode_h #define mode_h "$Id_$" #endif 這是什么原因呢? ...… 查看全部問答∨ |
|
在Windows mobile 6中開發接打電話的程序使用TAPI,在接收到響鈴3聲后執行lineAnswer函數應答,但是無效。怎么實現自動摘機,或者屏蔽調系統的應答功能呢!謝謝!… 查看全部問答∨ |