合泰单片机使用总结

之前一直用ARM 系列的单片机,现在因为产品需要,用了一款合泰单片机(HT67F2360),整个开发过程中发现还是有很多差异。

一、开发环境中的一些差异

arm 系列单片机,直接用keil 接 选用的芯片就可以编译,调试,烧录。而这款合泰单片机,ht-ide 是不能直接烧录芯片的,ht-ide 只能将程序烧录到专门的仿真开发板中,仿真开发板有两个板子,母板加子板,不同系列的单片机,选用不同的子板仿真。悲剧>的是,我没有开发仿真板。程序调通了,要通过官方的提供的烧录工具hope3000 for e-link,将mtp文件烧录到具体的芯片中。找了好久没找到hope3000的命令行工具,每次烧录,都要点击好几次鼠标:选择文件,选择电压,下载,效率不太高。

二、编译器,连接器的一些差异

  • HIT-IDE 的编译器有三个版本分别是V1,V2,V3。这三个版本的区别,不仅仅是性能上的差异,还有很多语言支持上的差异。
  • 三个版本的编译器,C语言的基本数据类型的Size(bit)互相之间会有不一致。并且无论哪个版本跟ANSI C都不完全一致。
  • 对中断函数的支持的差异。V1 不支持中断处理函数调用函数。V2,V3支持中断处理函数调用函数,但是被调用的函数必须定义为#pragma nolocal ,并且中断调用的函数不能和main 中调用同一个函数,中断之间也不能调用同一个函数(包括间接调用),否则会造成RAM 空间重叠使用。
  • V1 V2不支持静态变量,V3支持。
  • 默认情况下,未初始化的全局变量不初始化为0。如果需要,要在工程编译选项中勾选。
  • 默认情况下,enum 类型的不是byte。

三、存储器和间接寻址

  • 这款单片机,没有一个统一的虚拟地址空间用来表示所有的存储器地址。
  • 存储器包括:Flash 程序存储器,数据存储器,特殊功能寄存器,EEPROM 数据存储器。
  • 数据存储器被分为若干个Sector,操作不同的数据存储器,要切换到不同的Sector。
    1. 例如LCD 存储器地址位于Sector 4中,要操作LCD 存储器,要先切换Sector,然后通过间接寻址方式操作存储单元。
  • EEPROM 数据存储器独立于程序存储器和数据存储器,不能像其他类型的存储器一样寻址。
    1. 地址寄存器EEA , 数据寄存器EED,控制寄存器EEC 三个寄存器用来控制内部EEPROM 数据存储器的操作。
    2. EEA 和EED 位于Sector 中,可以直接访问。而EEC位于Sector1中,要通过间接的方式访问。

四、示例代码

LCD 存储器写操作 example

void lcd_write_mem(uint8_t addr,uint8_t val)
{
    _mp1h = 0x04;    //sector
    _mp1l = addr;
    _iar1 = val;
    _mp1h = 0x00;
}

EEPROM 存储器操作接口 example:

uint8_t eeprom_read_byte(uint8_t addr)
{
    uint16_t i = 0;
    //间接访问_eec
    _mp1l = 0x40;
    _mp1h = 0x01;
 
    _eea = addr;
 
    _iar1 |= 0x02;  // _rden = 1;
    _iar1 |= 0x01; //  _rd = 1
    _emi = 1;
 
 
    while ( (_iar1 & 0x01) && (i++ < 1000))
    GCC_DELAY(100);
    _iar1 &= 0xFD;
 
    _mp1l = 0x00;
    _mp1h = 0;
    return _eed;
}

void eeprom_write_byte(uint8_t addr,uint8_t data)
{
   uint16_t i = 0;
 
    _emi = 0;
 
    //间接访问_eec
    _mp1l = 0x40;
    _mp1h = 0x01;
 
    _eea = addr;
 
 
    //_eea = addr;
    _eed = data;
    _iar1 |= 0x08;  // _wren = 1;
    _iar1 |= 0x04; //  _wr = 1
    _emi = 1;
 
    // wait _wr
    while ( (_iar1 & 0x04) && (i++ < 1000))
    GCC_DELAY(100);
 
    _mp1l = 0x00;
    _mp1h = 0;
    _iar1 &= 0x7; //_wren = 0
    _emi = 1;
}
  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
### 回答1: 合泰单片机pwmc语言例程是指在合泰单片机使用pwmc语言编写的一段程序代码,用于控制单片机中的PWM输出。这段代码中通常包含了以下内容: 1. PWM频率的设定:通过设置定时器的时钟频率和周期,可以确定PWM输出的频率。 2. 占空比的设定:在PWM输出的过程中,需要设置PWM输出的高电平时间和低电平时间,从而控制PWM输出的占空比。 3. 输出引脚的设置:将PWM输出信号输出到单片机中的某个引脚上。 4. 中断处理程序的编写:在PWM输出的过程中,需要定义中断处理程序来响应定时器中断,从而在每个周期结束时重新设定PWM输出的占空比和输出引脚。 通过合理地编写pwmc语言例程,可以实现各种不同的PWM输出模式和功能,从而用于各种不同的应用场合,如电机控制、LED调光等。最终实现了单片机的PWM输出控制。 ### 回答2: 合泰单片机PWM C语言例程是指使用C语言编写的,用于控制合泰单片机PWM模块的示例程序。PWM(脉宽调制)是一种可以产生可控制的脉冲宽度,用于控制电压或电流的技术。它通常被用来控制电机和LED等设备。 下面是一个合泰单片机PWM C语言例程的简介: 首先,您需要使用合泰的开发工具,例如万能连接器,选择正确的CPU和编程器。其次,您需要在代码中初始化PWM模块,并设置您需要输出的波形的频率和占空比。以下是示例代码: #include<hc89f064.h> void pwm_init() { PWMCON=0x01; //PWM频率为FOSC/4 PWMDATA=0x80; //PWM占空比为50% PWMCON2|=0x80; //打开PWM输出 } void main() { pwm_init(); //初始化PWM模块 while(1) ; } 在上面的代码中,PWMCON是PWM控制寄存器,PWMDATA是PWM数据寄存器,PWMCON2是PWM控制寄存器2。在pwm_init()函数中,我们将PWM频率设置为FOSC/4,即8MHz,PWM占空比设置为50%。最后,我们打开PWM输出。 在main()函数中,我们首先调用pwm_init()函数来初始化PWM模块,然后进入一个无限循环来保持程序运行。 总之,合泰单片机PWM C语言例程为控制PWM模块提供了一个良好的参考,它可以帮助您了解如何初始化和控制PWM模块,并调整脉冲宽度和图形输出。 ### 回答3: 合泰单片机的PWMC语言例程可以帮助我们实现对PWM信号的控制和调节。在使用PWMC语言例程时,首先需要在代码中定义所需要使用的IO引脚,并对PWM模块进行初始化操作。接着可以通过设置不同的参数来改变PWM波的周期和占空比,从而控制输出信号的高低电平时间。例如,可以使用PWMC_Set_Period函数来设置PWM信号的周期,常见的参数值为1000或2000。当需要改变PWM信号的占空比时,可以使用PWMC_Set_Duty函数,根据需要设定不同的占空比,例如50%、75%等。此外,在编写PWMC语言例程时,还可以使用各种条件判断、循环控制等语法结构,使程序更加具有可读性和灵活性。例如,可以使用if语句来根据不同条件设置PWM输出信号的占空比和周期。总之,合泰单片机的PWMC语言例程在实际应用中具有较高的可靠性和灵活性,可以帮助开发者快速实现各种PWM控制任务。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

gdut_llkkyy

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值