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