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引脚分配
全球最小65W电源适配器发布,电源适配器设计面临的业界挑战?
基于柔性聚酰亚胺忆阻器的多合一压缩和加密引擎
OPPO R9和iPhone6s成16年最热销的手机一二名
PI推出业界首款采用SiC MOSFET的汽车级开关电源IC
二进制移相键控matlab系统仿真
holtek单片机怎么样_holtek单片机有什么特点
浅谈数据中心能源管理系统的应用分析及解决方案
沃尔玛使用无人机帮助将COVID-19检测试剂盒送到患者手中
Xilinx推出新一代系统级设计存储器解决方案UltraRAM
MIT最新研究指出 自动驾驶汽车并不能够省下太多成本
ZVS的实现方案解析和MOSFET的损耗分析
纷享销客逆势再获融资,连续三年保持40%持续增长
【大大芯方案】高端监控影像必备,大联大推出基于安森美产品的1.8英寸8百万 4K 影像感测器方案
华为MateX2与华为P50详细参数对比
全球经济“断崖式”下滑 江丰如何实现销售收入增长的呢
黑鲨游戏手机2评测 拥有近乎完美的游戏体验
HP存储虚拟化存储网络解决方案带来的好处及未来发展
锆石FPGA A4_Nano开发板视频:软核演练
比特大陆显卡矿机G1评测 按照教程小白用户也可以轻松操作
外媒爆任天堂被指控销售带有缺陷的游戏手柄