盛群单片机集成开发环境使用简介
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
盛群单片机集成开发环境使用简介
重庆理工大学电子学院万文略
一、建立项目(工程)
工程->新建Project Location Step1对话单击集成开发环境的菜单,弹出框
NextProject
按钮,弹出及编译工具后按输入项目名称,确定保存路径,选择CPU Location-Step2对话
框。
.
NextProject
出,弹序程,按按钮用机单盛编语用择选使C言写群片应Location-Step3对话框。
NextWarning对话框。
按钮,弹出输入程序文件名,
按.
初次使用盛群单片机开发环境及e-ICE时,单击QS10001SV100.DOC文件名,打开文件查看e-ice 的使用限制,若已熟悉可以直接按OK按钮进行项目配置。
利用配置文件设置CPU工作在特定的模式下,主要有:
系统电压设置
系统时钟频率设置
ICE复位功能选择
芯片封装选择。
配置选项的项目繁多,初学者难以理解,这时可以按以下给出的设置套用即可。
.
选择系统电压为5V
选择系统工作频率,这里设置的时钟频率最好与目标板使用的时钟频率一致,时钟频率值只8. ,6,4,N=2,其中24/N Mhz能等于
这里选择SYSTEM,无需再外界复位电路。
可以选择与目标板使用的芯片一致的封
装。
.
CPU的RC振荡器工作电压电压选择。
这里选择高速时钟振荡源分别是
HXT:外部晶体振荡
ERC:外部RC振荡
HIRC:内部高频RC振荡
RC振荡器电路简单,但振荡频率不精确、不稳定。
对时钟频率要求高的应用建议选择外部晶体振
荡。
.
内部低频RC振荡源选择
LIRC:内部低频振荡
LXT:外部低频晶体振荡
低频晶体振荡指的是32.67Khz的晶体。
看门狗时钟频率选择
fSUB内部振荡器(LXT或LIRC)
指令周期频率
fSYS/4.
内部RC振荡器振荡频率选择
禁能/低电压复位使能
低电压检测阈值电压选择
串行接口模块使能
SPI片选信号使能/禁能
禁能/数据写入冲突标志位使能
SPI.
看门狗定时器功能使能/禁能
条指令1条指令或2清除看门狗指令方式选择:
PB0做复位引脚或IO引脚选择
I2c接口去噪声选项Nodebounce 无去噪声功能
2 system clock debounce 4 system clock debounce
工程选项设置
盛群单片机开发工具简介
仿真器
盛群单片机的仿真器由MEV和DEV组成,仿真器不具备通用性,仿真HT66系列单片机时应配套使用M1001C MEV板和D1003C DEV板。
仿真版M1001C
DEV.
单片机仿真HT66F50板用于D1003C DEV.
MEV、DEV叠加到一起构成仿真器
仿真器的引脚定义
HT66F50 / HT68F50 DEV PN
D1003A
在IDE的帮助文件里可以查看仿真器的引脚定义。
HT66F50的IO口
HT66F50有多种封装形式,最少有13个IO口,最多有50个IO口。
每种型号的CPU的IO口分布见下表
IO口的复用
引脚复用在单片机设计中普遍使用,这使得一个MPU引脚可以分时具备多个功能。
使得MCU在应
用上具备更好的灵活性。
用户可以根据需要选择和配置引脚功能。
PA口的功能
PA口除了可以做一般双向IO口(PA0~PA7)外还可以有以下功能:
模拟输入引脚(AN0~AN7)
PA0模拟比较器0的输出引脚
PA1 ETM的捕获输入或比较输出引脚
PA2模拟比较器0的同相输入C0+,或作STM的外部时钟输入引脚TCK0
PA3模拟比较器0的反相输入C0-,或作外部中断输入引脚INT0。
PA4外部中断输入引脚INT1,或作ETM的外部时钟输入引脚TCK1。
PA5模拟比较器1的输出引脚,或作SPI接口的SDO线。
PA6SPI接口的SDI线,或作I2C接口的SDA线。
PA7SPI接口的SCK线,或作I2C接口的SCL线。
口内部结构IO
)(Ioh口都是推挽输出,当工作在每个IO5V电压下时可以输出Source Current1. 。
,
Iol=80mAIol)20mA。
整块芯片驱动总电流Ioh=80mA-7.4mA,Sink Current(口为弱上拉功能。
可以选择IO2. 口支持掉电唤醒输入。
3.PA 有较好的抗干扰能力。
输入加施密特触发器,使
MCU4.IO IO口的控制寄存器是。
PxF,G,C,D,E,B3每个IO口有个控制寄存器,即Px,PxC,PxPU,这里x=A,口的IOIOIO口的数据寄存器,写这个寄存器控制对口进行输出控制,读这个寄存器得到口的上拉状态。
PxPU控制IOPxC是IO口的控制寄存器,控制IO口的方向;
状态;口控制寄存器,PxPxC口的方向寄存器控制PxPxCPxC
PxC7 PxC6 PxC5 PxC4 PxC3 PxC2 PxC0 PxC0
Bit0
Bit3
Bit7
Bit1
Bit6
Bit5
Bit2
Bit4
盛群单片机的IO口的输入输出方向由PxC寄存器控制:
当Bit=0时,对应的Px口IO引脚为输出状态
当Bit=1时,对应的Px口IO引脚为输入状态
Px,Px口的数据寄存器
Px寄存器是IO口的数据寄存器,当IO口为输入模式时,读Px寄存器可以得到当前IO口的状态,当IO口为输出模式时,写Px寄存器改变IO口的状态。
口的上拉控制寄存器Px,PxPU.
口处于弱的上拉状态。
PxPU寄存器控制IO 时无上拉状态。
对应位为1时使能弱上拉,为0时,3V5V电压下时,上拉电阻的值在10K~50K之间,当单片机工作在当单片机工作在之间。
上拉电阻的值在20K~100K 语言控制盛群单片机的寄存器CHT66F50这里以PA口为例,查阅如何在C程序中访问盛群单片机的特殊功能寄存器呢,位字长的无符号数寄存器的地址为0x1a,0x1b。
每个寄存器都是8器件手册,得知PA,PAC (因为每一位都有特定的功能,最高位不是符号位)。
在程序中定义:@0x1a; unsigned char _pa
@0x1b;
unsigned char _pac
表示PA寄存器,_pac表示盛群单片机的C语言用@表示一个物理地址,这样符号_pa PAC寄存器。
口为输入口,则程序为让PA_pac=0xff;
变量,程序为 PA口的状态到tmp读tmp=_pa;
以上是对整个IO口同时进行读写操作,有时我们常常要单独写寄存器的某一位。
盛群单片机的C语法为
#define _pa0 _1a_0
_1a是寄存器的字节地址,_0为寄存器的位地址。
执行程序
_pa0=0;
的结果是PA口的第0位为低,其他位的状态不变。
例:检测PA口的第5位是否为高电平
#define _pa5 _1a_5
if(_pa5==1)
…处理PA5为高
else
…处理PA5为低
以上简单地介绍了盛群单片机的特殊表示方式,读者只需要模仿就可以了,这些特殊的语法在其他品牌的MCU开发中是不适用的。
需要注意的是#define语句要在C程序的最开始的部分进行定义。
关于其他寄存器的定义请参阅HT66F50.h文件。
例一:PA口控制8流水灯。
本例用PA口驱动8个LED,每次只点亮一个发光二极管,
口控制流水灯,如图所示。
PA硬件设计:选
用.
时时发光二极管点亮,反偏或正向偏置电流为0mA发光二极管正向偏置电流在5~10mA 发光二极管熄灭。
发光二极管的正5VIO口电压接近5V电源电压下,当IO口为高电平时,工作在MCU 欧限流电阻时,发光二极管的导通工作电流大约为4701.1V~1.2V。
因此当接向导通电压约口的寄存器位IO8mA左右。
图中所有的发光二极管的阴极接地,又称作共阴极解法。
这时口的位对应得引脚输出高电平,发光二极管点亮。
也可以采用共阳极的解法,这时IO为1 0的位对应的引脚输出低电平,发光二极管点亮。
具体电路请读者自己思考。
的寄存器位为程序设计思路 MCU 进行初始化1.首先要对口的工作模式为输出口,PAPA口的功能为IO对本例来说要IO口进行初始化。
即选择 IO口时要关闭其他复用功能。
模式。
另外,由于PA口为多功能复用口,作一般建立控制模型2.以便于程序实建立控制模型的目的是将具体应用功能要求用数学模型或数字逻辑表示,现和处理。
建模是程序设计的关键步骤。
时发光二极管点亮。
每个发光二极管点亮后1控制,IO口输出为本例为最简单的MCU 一段时间后后熄灭,再依次点亮下一位发光二极管。
用数字表示为
PA口PA7 PA6 PA5 PA4 PA3 PA2 PA1 PA0 寄存器1 0 0 0 0 01H 0 第1次 0 0
0 1 0 02H 0 次第2 0 0 0 0
0 04H 0 次第3 0 0 0 0 1 0
0 0 1 0 0 08H 0 次4第 0 0
1
10H
次5第
通过观察表中MCU输出数据的变化规律,可以得出每次控制状态发生改变时,下一时刻的PA口数据的状态是前一时刻状态的2倍,或下一次的状态是前一时刻的左移。
共有8个发光二极管,所以要循环8次。
实现上述算法时可以采用向左移位或乘2的两种方法。
以向左移位的方法为好,因为左移只需要MPU执行一条机器指令即可,而用乘2的方法则需要MCU执行更多的机器指令,对没有乘法指令的MCU而言,需要调用一个乘法子程序来实现乘法的功能,即使对有乘法指令的MCU,其执行乘法指令的速度一般要慢于执行移位指令。
需要注意的是,C语言没有循环移位运算符,PA是个8为字长的寄存器,当PA=0x80时,再次移位或乘2后PA=0。
这时全部的LED都熄灭了。
所以程序中要加以处理,处理的方法是,若PA=0,则令PA=0x01;
3.编写程序
#include HT66F50.h //包含HT66F50头文件,这个文件定义了MCU所有的寄存器
#define LedPort _pa // pa 端口
#define LedPortCtrl _pac // pa 控制端口
#pragma vector isr_4 @ 0x4
#pragma vector isr_8 @ 0x8
#pragma vector isr_c @ 0xc
//ISR for safequard
void isr_4(){} // external
void isr_8(){} // timer/event
void isr_c(){}
这里将中断服务程序定义为空函数。
若有中断发生,程序不作处理直接返回,若没有这些空函数,当发生中断时,MCU的程序计数器会崩溃。
//initialize registers for
void safeguard_init(){
_pac = 0xff;
_pbc = 0xff;
_pcc = 0xff;
_pdc = 0xff;
}
上电复位时,所有的IO口为输入状态,保证系统安全
void main(void) // 主函数
{
unsigned char k ;
safeguard_init();
_papu=0xff; //PA口弱上拉
LedPortCtrl = 0 ; // 设定 pa 端口为输出
LedPort = 0xff ; // 熄灭所有 LED
_cp0c=0; //不使用比较器0
_cp1c=0; //不使用比较器1
转换器AD不使用 _acerl=0; //
_tmpc0=0; //不使用定时器0的复用引脚 _tmpc1=0; //不使用定时器1的复用引脚 k=1;
while(1) //程序为一个无限循环
{
LedPort = k;
_delay(25000) ; // 延迟 500 毫秒 (ms)
_delay(25000) ;
_delay(25000) ;
_delay(25000) ;
_delay(25000) ;
k=k*2;
if(k==0)
k=1;
}
}
未完待续。