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浏览量
634635 -
Holtek
+关注
关注
8文章
167浏览量
66587
发布评论请先 登录
相关推荐
评论