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