holtek
盛群半導體為***省專業(yè)微控制器IC設計領(lǐng)導廠商,營業(yè)范圍主要包括微控制器IC及其周邊組件之設計、研發(fā)與銷售。自1998年成立以來,公司不斷致力于新產(chǎn)品的研發(fā)及技術(shù)的創(chuàng)新,加上對市場趨勢的掌握,期能提供廣大電子市場最具競爭力之IC產(chǎn)品。
holtek bs84c12A 單片機開發(fā)
開發(fā)環(huán)境搭建
編輯編譯調(diào)試是官方的HT-IDE3000,仿真器用的Elink,單片機的程序用C開發(fā),使用代理商提供的觸摸按鍵庫。(這些資料后面都整體好提供下載)。軟件的安裝什么就不說了,直接就講怎么和自己的硬件連接,進行在線調(diào)試。
開發(fā)環(huán)境使用
關(guān)于IDE3000的使用,安裝好后可以在軟件的幫助部分,查看一些V3進行C語言編程的對應內(nèi)容; ELink的話有個《Elink仿真器使用說明》,關(guān)鍵就是“”BS84C12A_20150807_LIBV413--V3“”這個軟件包,后續(xù)的開發(fā)都在這個軟件包的基礎(chǔ)上進行(觸摸按鍵調(diào)用這個軟件包提供的庫就方便實現(xiàn)按鍵功能),具體怎么使用這個軟件包,可以看他對應的使用手冊。
關(guān)于使用Elink在線仿真,要注意就是 要使用對應的支持在線調(diào)試的芯片, 比如選的BS84C12A 對應的仿真芯對應的EV芯片。
關(guān)于編程
使用上面提到的軟件包進行編程,其實就是已經(jīng)幫搭建好了框架,void USER_PROGRAM_INITIAL()這個函數(shù)里面就是硬件初始化,void USER_PROGRAM()函數(shù)就是單片機程序需要循環(huán)執(zhí)行的內(nèi)容。
自己開發(fā)過程中編程時候遇到的問題主要如下:
1,堆棧溢出。
解決,查數(shù)據(jù)手冊可以知道,選的BS84C12A是硬件堆棧5層,調(diào)用的觸摸按鍵庫,它的手冊上已經(jīng)說明軟件包占用了2層的堆棧,因此留給自己用的堆棧只有3層。比如的程序,自己使用定時器中斷占用了一層,那么 USER_PROGRAM()之后,自己的代碼只能再調(diào)用一層函數(shù)。 再進行函數(shù)調(diào)用的話,就會導致堆棧溢出而死機。
2,ROM不足
解決,優(yōu)化代碼功能開啟來編譯器選項中,同時關(guān)鍵的變量都帶上volatile,相同功能的代碼就復用起來,盡量合理用數(shù)組來減少代碼量。后面自己發(fā)現(xiàn),程序里面要是進行了乘法,乘以0.55,ROM的使用量居然多出8%,而且還容易堆棧溢出,所以盡量不要用乘法吧。
3,RAM不足
bank0是編譯器自動分配的,bank1 ,bank2,好像是需要自己手動指定。 就是當編譯器出錯說RAM不足, 你就一些數(shù)組放到bank1中。下面就是程序中的定義方式 0X1B4, 0X1代表BANK1,B4代表地址,數(shù)據(jù)手冊上有寫bank1的地址是0x80~0XFF
static volatile unsigned int uiKeyTimeCnt[8] __attribute__ ((at(0x1b4))); //按鍵去抖動延時計數(shù)器
static volatile unsigned int uiKeyCtntyCnt[8] __attribute__ ((at(0x1c4))); //按鍵連續(xù)觸發(fā)的間隔延時計數(shù)器
static volatile unsigned char ucKeyLock[8] __attribute__ ((at(0x1d4))); //按鍵觸發(fā)后自鎖的變量標志
holtek單片機是由盛群半導體設計開發(fā),盛群半導體為國內(nèi)專業(yè)微控制器IC設計領(lǐng)導廠商,營業(yè)范圍主要包括微控制器IC及其周邊組件之設計、研發(fā)與銷售。自1998年成立以來,公司不斷致力于新產(chǎn)品的研發(fā)及技術(shù)的創(chuàng)新,加上對市場趨勢的掌握,期能提供廣大電子市場最具競爭力之IC產(chǎn)品。產(chǎn)品范圍包括:泛用型與專用型微控制器(MCU),除一般應用領(lǐng)域外,更涵蓋語音、通訊、計算機外設、家電、醫(yī)療、車用及安全監(jiān)控等各專業(yè)領(lǐng)域,并提供各種電源管理及非易失性內(nèi)存等微控制器外圍組件,提供客戶更具競爭能力的完整解決方案。
holtek單片機—分類
(1) HT48系列 I/O 型( + LCD)
(2) HT49系列 I/O + LCD 型
(3) HT46系列 I/O+AD 型( + LCD)
(4) HT47系列 I/O+RC-F(AD)+LCD+IR型
(5) HT48xAx\HT49xAx系列 Remote (遙控器用)型
(6) HT95R2x\HT95R3x系列Phone( + LCD)
(7) HT45R3x\BS28xx\BS26xx系列 Touch型
(8) Flash 型(HT46Fxx\HT48Fxx\HT66Fxx\HT68Fxx)
(9) TIny Power 型(HT56R2x, HT56R6x, HT56R6xx )
(10) Keyboard/Mouse系列,USB Audio系列,
Voice/Music系列,VFD系列……。。
HOLTEK單片機—系統(tǒng)結(jié)構(gòu)
Holtek單片機的系統(tǒng)結(jié)構(gòu)
時序和流水線結(jié)構(gòu)
子程序調(diào)用流水線的情況
程序計數(shù)器
lALU所提供的功能與其相關(guān)指令碼如下:
算術(shù)運算 :ADD、ADDM、ADC、ADCM、SUB、SUBM、SBC、SBCM、DAA
邏輯運算 :AND、OR、XOR、ANDM、ORM、XORM、CPL、CPLA
移位 :RRA、RR、RRCA、RRC、RLA、RL、RLCA、RLC
增加和減少:INCA、INC、DECA、DEC
分支判斷 :MP、SZ、SZA、SNZ、SIZ、SDZ、SIZA、SDZA、CALL、RET、RETI
堆棧與堆棧指針/程序計數(shù)器
HOLTEK單片機—存儲器(程序存儲器/數(shù)據(jù)存儲器)
盛群半導體I/O型單片機程序存儲器結(jié)構(gòu)
第一部分是特殊功能寄存器,有固定的地址且與單片機的正確操作密切相關(guān)。大多特殊功能寄存器都可在過程控制下直接讀取和寫入,但有些被保留用于未來擴展功能而不開放。
第二部分通用數(shù)據(jù)存儲器是留給用戶使用的,都可在過程控制下進行讀取和寫入。
數(shù)據(jù)存儲器
通用數(shù)據(jù)存儲器的結(jié)構(gòu)
專用寄存器的結(jié)構(gòu)
特殊功能寄存器:
間接尋址寄存器 – IAR, IAR0, IAR1
間接尋址指針 – MP, MP0, MP1
累加器 (數(shù)據(jù)存儲器地址:05H)– ACC
程序計數(shù)器低字節(jié)寄存器(數(shù)據(jù)存儲器地址:06H) – PCL
表格寄存器(數(shù)據(jù)存儲器地址:07、08H) – TBLP, TBLH
看門狗定時寄存器(數(shù)據(jù)存儲器地址:09H) – WDTS
狀態(tài)寄存器(數(shù)據(jù)存儲器地址:0AH) – STATUS
中斷控制寄存器(數(shù)據(jù)存儲器地址:0BH) – INTC
定時/計數(shù)器寄存器 (數(shù)據(jù)存儲器地址:0CH~11H)
輸入/輸出端口和控制寄存器
HOLTEK單片機—基本I/O
上圖:輸入/輸出端口硬件圖
上拉電阻(配置選項設置 or 軟件設置)
喚醒功能(配置選項設置 or 軟件設置)
輸入/輸出端口控制寄存器
外部中斷輸入
外部中斷
外部中斷是通過端口上由高到低的電平轉(zhuǎn)換來觸發(fā),之后相應中斷請求標志位(EIF;INTC的第4位)被置位。當中斷允許,堆棧未滿且外部中斷產(chǎn)生時,會調(diào)用地址04H的子程序,中斷請求標志位EIF將被清零,且EMI位將被清零來屏蔽其它中斷。
l中斷控制寄存器(一個定時/計數(shù)器)
中斷控制寄存器(兩個定時計數(shù)器)
不同中斷的允許位、請求標志優(yōu)先級
注意:在圖中,T0F和T1F中斷請求標志位與ET0I和ET1I中斷允許位提供給HT48R70A-1/ HT48C70-1和HT48R50A-1/HT48C50-1使用,因為它們擁有兩個定時/計數(shù)器。HT48R10A-1/ HT48C10-1和HT48R30A-1/HT48C30-1只有一個定時/計數(shù)器,定時/計數(shù)器0代表唯一的定時/計數(shù)器TMR,擁有中斷請求標志位TF和中斷允許位ETI。
HOLTEK單片機—定時/計數(shù)器中斷
當定時/計數(shù)器溢出,會置位定時/計數(shù)器中斷請求標志位,定時/計數(shù)器中斷發(fā)生。在只有一個定時/計數(shù)器的單片機中,此位是INTC寄存器的第5位即TF,而在有兩個定時/計數(shù)器的單片機中,定時/計數(shù)器0中斷請求標志位是INTC的第5位即T0F,而定時/計數(shù)器1中斷請求標志位是INTC的第6位即T1F。當主中斷位被打開、堆棧未滿且相關(guān)內(nèi)部中斷允許位打開,定時/計數(shù)器溢出時會發(fā)生內(nèi)部中斷。對于只有一個定時/計數(shù)器的單片機將調(diào)用地址08H的子程序。對于有兩個定時/計數(shù)器的單片機,定時/計數(shù)器0中斷將調(diào)用地址08H的子程序,而定時/計數(shù)器1中斷將調(diào)用地址0CH的子程序。內(nèi)部中斷發(fā)生時,中斷請求標志位TF、T0F或T1F被清零,且EMI位將被清零來屏蔽其它中斷 。
中斷優(yōu)先級
注意:此表應用于HT48R70A-1/HT48C70-1和HT48R50A-1/HT48C50-1,它們擁有兩個定時/計數(shù)器,即為TMR0和TMR1。而HT48R10A-1/HT48C10-1和HT48R30A-1/HT48C30-1只有一個定時/計數(shù)器,定時/計數(shù)器0代表唯一的定時/計數(shù)器,即TMR。
8位定時/計數(shù)器結(jié)構(gòu)
16位定時/計數(shù)器結(jié)構(gòu)
定時/計數(shù)器的相關(guān)寄存器(續(xù))
定時/計數(shù)控制寄存器 – TMRC,TMR0C,TMR1C
配置定時/計數(shù)器輸入時鐘源
定時/計數(shù)寄存器–TMR, TMR0, TMR0L/TMR0H, TMR1L/ TMR1H
定時器模式
事件計數(shù)模式
可編程分頻器(PFD)和蜂鳴器的應用
TIMER應用舉例:
TMR是向上計數(shù)的寄存器
l在定時或計數(shù)時,當計數(shù)到OFFH時,再來一個CLK,計數(shù)器就會溢出(在中斷開啟且堆棧未滿時,就會發(fā)生TIMER中斷),計數(shù)器重新裝載初始值,并從此初始值開始重新計數(shù)。
寄存器TMR或者TMR0L/TMR0H寫入初始值
控制寄存器TMRC設置工作模式、時鐘、觸發(fā)條件,開關(guān)。
TMRC控制寄存器
TIMER定時模式
TIMER定時模式時時間計算
(以上面程序為例)
條件: OSC : Crystal = 4 MHz
Timer source: system clock
計算每次發(fā)生中斷的時間間隔T=?
PSC2 PSC1 PSC0 = 000
f INT = fsys/2 =2MHZ
t = 1/ f INT = 0.5us
T= (256-96)* t=160*0.5us= 80us
TIMER 計數(shù)模式
a) 將TMRC中 設置為
TM1 TM0 = 01定時器就工作于定時模式 ,計數(shù)模式和定時模式原理相同,只是計數(shù)器的時鐘源選擇不同。
b) 計數(shù)器的時鐘源由芯片的
TMR腳輸入。
c) TE= 0 上升沿計數(shù) /1 下降沿計數(shù)
TIMER 脈寬測量模式
(a) TMRC中設置 TM1,TM0=11
TE= 0 脈寬下降沿開始計數(shù)/1 脈寬上升沿開始計數(shù)
TO=1 脈寬測量啟動,測量完一次會被清0,再次測量必須重新設置此位
(b) 如果TO,TE=1, TMR腳上脈沖上升沿開始計數(shù),下降沿停止計數(shù)。測量結(jié)果存放在TMR中。
編程注意事項
當定時/計數(shù)器運行在定時器模式時,定時器的時鐘源是使用內(nèi)部系統(tǒng)時鐘或RTC,與單片機所有運算都能同步。在這個模式下,當定時器寄存器溢出時,單片機將產(chǎn)生一個內(nèi)部中斷信號,使程序進入相應的內(nèi)部中斷向量。對于脈沖寬度測量模式,計數(shù)器的時鐘源也是使用內(nèi)部系統(tǒng)時鐘或RTC,但定時器只有在正確的邏輯條件出現(xiàn)在外部定時/計數(shù)器輸入引腳時才執(zhí)行動作。當這個外部事件沒有和內(nèi)部定時器時鐘同步時,只有當下一個定時器時鐘到達時,單片機才會看到這個外部事件,因此在測量值上可能有很小的差異,需要程序設計者在程序應用時加以注意。在定時器配置為外部事件計數(shù)模式時,它的時鐘來源是外部事件,和內(nèi)部系統(tǒng)時鐘或者定時器時鐘不同步。
holtek單片機—振蕩器
l三種系統(tǒng)時鐘可供選擇:看門狗定時器也有多種時鐘源選擇,另外還有實時時鐘RTC
l三種方法產(chǎn)生系統(tǒng)時鐘:使用外部晶體/陶瓷振蕩器、外部RC電路或是內(nèi)部RC時鐘源
晶體/陶瓷振蕩器
外部RC振蕩器
三種振蕩電路
RTC振蕩器
如果選擇RTC作為定時/計數(shù)器的時鐘源,則即使單片機工作在暫停即HALT時,定時/計數(shù)器依然有效工作,當定時器溢出時,還會發(fā)出正常的內(nèi)部中斷信號,此信號使單片機從HALT狀態(tài)下被喚醒,并且繼續(xù)正常工作直到下一個“HALT”指令被執(zhí)行。
看門狗定時振蕩器
WDT振蕩器是一種完全獨立在芯片上自由動作的RC振蕩器,它在5V條件下的周期時間典型值是65us周期,且不需外部的器件搭配。當單片機進入暫停模式時,系統(tǒng)時鐘將停止動作,但WDT振蕩器繼續(xù)自由動作且保持看門狗有效。某些應用中為降低功耗,可通過掩膜選項來關(guān)閉WDT振蕩器。
系統(tǒng)的暫停和喚醒
暫停模式是通過“HALT”指令實現(xiàn)且造成如下結(jié)果:
系統(tǒng)振蕩器將被關(guān)閉
在RAM芯片和寄存器上的數(shù)據(jù)保持不變
假如WDT時鐘源是來自WDT振蕩器,WDT和WDT預分頻器(Prescaler)將被清零然后再重新計數(shù)
所有輸入/輸出端口狀態(tài)保持不變
PDF標志位被置位而TO標志位被清零
holtek單片機—看門狗定時器和節(jié)電模式
看門狗定時器用于程序防止單片機死機,或進入死循環(huán)。一般用在環(huán)境比較惡劣的情況下。
看門狗定時器
WDT預分頻器
看門狗定時器的操作:
以HT48R30A-1為例
WDT的時鐘源可選擇:
a) WDTOSC(12Kz)
b) T1(system clock/4)
c) RTCOSC(32
看門狗清除:
方式一: CLR WDT
方式二: CLR WDT1…CLR WDT2
配置選項選擇清除方式,必須在WDT計數(shù)器溢出之前清除,否則將發(fā)生WDT溢出Reset 系統(tǒng)。
配置選項:
基本電路參考/技術(shù)參數(shù)
基本應用電路
HT48 I/O單片機技術(shù)參數(shù):
技術(shù)特性:高性能RISC結(jié)構(gòu)、低功率完全靜態(tài)CMOS設計
工作電壓:在4MHz下,由2.2V到5.5V,在8MHz下,由3.3V到5.5V,
功率損耗:在5V/4MHz下,典型值為2 mA/1.5mA(Enhanced I/O)
不使用看門狗定時器和RTC時,3V下靜態(tài)(standby)電流小于1uA
溫度范圍:工作溫度--40-85度(工業(yè)級規(guī)格),儲存溫度--50-125度
內(nèi)核特性:
程序存儲器
l1K×14 OTP/Mask ROM (HT48R10A-1/HT48C10-1)
l2K×14 OTP/Mask ROM (HT48R30A-1/HT48C30-1)
l4K×15 OTP/Mask ROM (HT48R50A-1/HT48C50-1)
l8K×16 OTP/Mask ROM (HT48R70A-1/HT48C70-1)
數(shù)據(jù)存儲器
l64×8 SRAM (HT48R10A-1/HT48C10-1)
l96×8 SRAM (HT48R30A-1/HT48C30-1)
l160×8 SRAM (HT48R50A-1/HT48C50-1)
l224×8 SRAM (HT48R70A-1/HT48C70-1)
周邊特性:
從8個到56個具有上拉功能的雙向輸入輸出口
PA口具有喚醒功能
外部中斷輸入
事件計數(shù)輸入
具有預分頻器(Prescaler)及中斷功能的定時器
看門狗定時器(WDT)
暫停與喚醒特性可以節(jié)省功耗
PFD/蜂鳴器驅(qū)動輸出
芯片內(nèi)置晶體及電阻電容振蕩電路
具有低電壓復位特性
32768Hz的實時時鐘(RTC)功能
具有低電壓復位(LVR)特性
具有燒錄電路接口及程序代碼保護功能
Mask版單片機適用于大量生產(chǎn)
提供高效的軟硬件支持工具
表格讀取功能
多層硬件堆棧
直接和間接數(shù)據(jù)尋址模式
位操作指令
63條強大的指令
大多數(shù)指令執(zhí)行時間只需要一個指令周期
引腳分配:
HT48R30A-1/HT48C30A-1引腳分配
-
單片機
+關(guān)注
關(guān)注
6035文章
44554瀏覽量
634634 -
Holtek
+關(guān)注
關(guān)注
8文章
167瀏覽量
66587
發(fā)布評論請先 登錄
相關(guān)推薦
評論